【发布时间】:2018-07-19 10:29:18
【问题描述】:
我无法理解 transform() 和 fit_transform() 究竟是如何协同工作的。
我在我的训练数据集上调用fit_transform(),然后在我的测试集上调用transform()。
但是,如果我在测试集上调用 fit_transform(),我会得到不好的结果。
谁能给我解释一下这是怎么发生的以及为什么会发生?
【问题讨论】:
标签: python scikit-learn
我无法理解 transform() 和 fit_transform() 究竟是如何协同工作的。
我在我的训练数据集上调用fit_transform(),然后在我的测试集上调用transform()。
但是,如果我在测试集上调用 fit_transform(),我会得到不好的结果。
谁能给我解释一下这是怎么发生的以及为什么会发生?
【问题讨论】:
标签: python scikit-learn
让我们举一个变换的例子,sklearn.preprocessing.StandardScaler。
根据文档,这将:
通过去除均值和缩放到单位方差来标准化特征
假设您正在使用如下代码。
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# X is features, y is label
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.33, random_state=42
)
当您调用StandardScaler.fit(X_train) 时,它会根据X_train 中的值计算均值和方差。然后调用.transform() 将通过减去均值并除以方差来转换所有特征。为方便起见,这两个函数调用可以使用fit_transform() 一步完成。
您希望仅使用训练数据来拟合缩放器的原因是您不希望使用来自测试数据的信息来偏向您的模型。
如果您 fit() 测试数据,您将为每个特征计算 新 均值和方差。理论上,如果您的测试集和训练集具有相同的分布,这些值可能非常相似,但实际上通常情况并非如此。
相反,您只想使用在训练数据上计算的参数来转换测试数据。
【讨论】: