python机器学习过程中需要将一些数据正态化,那么是先分离数据集,然后将再将数据集正态化呢,还是反过来执行呢?
参考网上别的作者,有如下解释(文章选择链接如下):
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 正确方法 --->>> 先分离,再转换
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=7)
ss = StandardScaler()
x_train = ss.fit_transform(x_train)
x_test = ss.transform(x_test)
# 错误方法 --->>> 先转换, 再分离
ss = StandardScaler()
x = ss.fit_transform(x)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=7)
第一种先划分再在训练集上使用fit_transform,然后在对测试集用transform是正确的。但第二种方法先对所有样本标准化再划分则是错误的。举个例子说明这个问题:假设我们的样本中有异常值,而这些异常值被划分到了测试集中,那么第一种方法,异常值对均值和方差没有任何影响。而第二种方法要先计算所有样本的均值和方差,则异常值产生了影响。第二种方法会造成类似过拟合的现象,在测试集上准确率也显得很高,但是如果换做其他测试样本,那么泛化性能将差的多。
本选选自网上一位博主,虽然现在看得还是不太懂,不过还是谢谢有人做出了解释。