在对模型数据进行特征工程的时候我们会遇到这种情况:
# 特征缩放
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
可能有人会疑惑为什么两批数据的标准化方式不一样。
这里这样做的主要原因是为了避免数据泄露。
数据泄漏(Data Leakage)是指在机器学习模型训练过程中,意外地将测试集或未来信息引入到模型的训练中,从而导致模型对未见数据的性能评估过于乐观。数据泄漏会使模型在训练时获得不真实的信号,进而影响其在实际应用中的效果和泛化能力。
上述代码在第一步中使用fit_transform对训练数据进行标准化,该函数在标准化的过程中会先计算出训练数据的统计信息(均值和标准差),利用这些统计信息将训练数据标准化,而这些统计信息会被保留在StandardScaler对象中。
在第二步使用transform对测试数据进行标准化的时候就不用fit了,直接使用保存下来的统计信息进行标准化,确保测试集的标准化过程与训练集一致,不会引入新的信息。