【问题标题】:Sklearn - fit, scale and transformSklearn - 适合、缩放和变换
【发布时间】:2021-08-28 10:34:12
【问题描述】:

sklearn 中的 fit() 方法似乎在同一界面中用于不同的目的。

当应用于训练集时,如下所示:

model.fit(X_train, y_train)

fit() 用于学习稍后将在测试集上使用的参数predict(X_test)


但是,在某些情况下,fit() 不涉及“学习”,而只是进行了一些标准化来转换数据,如下所示:

min_max_scaler = preprocessing.MinMaxScaler()
min_max_scaler.fit(X_train)

这将简单地在 0 和 1 之间缩放特征值,以避免某些具有较高方差的特征对模型产生不成比例的影响。


为了让事情变得更不直观,有时需要在fit() 扩展(并且似乎已经在转换)方法之后再使用进一步的transform() 方法,然后再用实际学习和学习的fit() 再次调用构建模型,如下所示:

X_train2 = min_max_scaler.transform(X_train)
X_test2 = min_max_scaler.transform(X_test)

# the model being used
knn = KNeighborsClassifier(n_neighbors=3,metric="euclidean")
# learn parameters
knn.fit(X_train2, y_train)
# predict
y_pred = knn.predict(X_test2)

有人可以澄清一下fit()的用途或多种用途,以及缩放和转换数据的区别吗?

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    fit() 函数提供了一个在所有 scikit-learn 对象之间共享的通用接口。

    此函数将X(有时y数组作为参数来计算对象的统计信息。例如,在MinMaxScaler转换器上调用fit将计算其统计信息(data_min_data_max_、@987654327 @...

    因此,我们应该将fit() 函数视为一种计算对象必要统计信息的方法。

    这个公共接口非常有用,因为它允许使用Pipeline 将转换器和估计器组合在一起。这允许一次性计算和预测所有步骤,如下所示:

    from sklearn.pipeline import make_pipeline
    from sklearn.datasets import make_classification
    
    from sklearn.preprocessing import MinMaxScaler
    from sklearn.neighbors import NearestNeighbors
    
    
    X, y = make_classification(n_samples=1000)
    model = make_pipeline(MinMaxScaler(), NearestNeighbors())
    model.fit(X, y)
    

    这也提供了将整个模型序列化为一个对象的可能性。

    如果没有这个组合模块,我同意你的观点,使用独立的转换器和估计器不是很实用。

    【讨论】:

      【解决方案2】:

      scikit-learn 中有 3 个类共享接口:Estimators、TransformersPredictors

      Estimators 具有fit() 函数,它始终服务于相同的目的。它根据数据集估计参数。

      变形金刚transform()功能。它返回转换后的数据集。一些估算器也是变形金刚,例如MinMaxScaler()

      Predictorspredict() 函数,它返回对新实例的预测,例如KNeighborsClassifier()

      MinMaxScaler()KNeighborClassifier() 都包含 fit() 方法,因为它们共享 Estimator 的接口。

      但是,在某些情况下,fit() 不涉及“学习”

      这涉及到“学习”。变压器,MinMaxScaler() 必须“学习”每个数字特征的最小值和最大值。 当您调用min_max_scaler.fit(X_train) 时,您的缩放器会估计您的训练集中每个数字列的值。 min_max_scaler.transform(X_train) 根据估计缩放你的训练集。 min_max_scaler.transform(X_test) 使用为训练集学习的估计来扩展测试集。这对于使用相同的估计来扩展训练集和测试集非常重要。

      如需进一步阅读,您可以查看:https://arxiv.org/abs/1309.0238

      【讨论】:

        猜你喜欢
        • 2021-12-13
        • 1970-01-01
        • 2013-06-04
        • 2011-01-15
        • 1970-01-01
        • 1970-01-01
        • 2013-12-17
        • 1970-01-01
        • 2012-05-19
        相关资源
        最近更新 更多