1. 基本概念
这三个方法是 scikit-learn 转换器(Transformer)的核心方法:
fit() - 学习数据的参数(如均值、标准差等)
transform() - 应用学到的参数转换数据
fit_transform() - 一次性完成学习和转换
2. 详细解释
fit() - 训练/学习阶段
# 只学习参数,不转换数据scaler.fit(X_train)计算并存储数据的统计信息(如均值、方差等)
不返回转换后的数据,只返回转换器对象本身
通常用于训练集
transform() - 转换阶段
# 使用已学习的参数转换数据X_train_scaled=scaler.transform(X_train)X_test_scaled=scaler.transform(X_test)# 对测试集用相同的参数应用之前 fit() 学到的参数
返回转换后的数据
可用于训练集和测试集
fit_transform() - 训练+转换
# 一次性完成学习和转换X_train_scaled=scaler.fit_transform(X_train)相当于先调用 fit() 再调用 transform()
只返回转换后的数据(不返回转换器)
仅用于训练集
3. 实际示例
示例1:标准化 (StandardScaler)
from sklearn.preprocessingimportStandardScalerimportnumpy as np# 创建数据X_train=np.array([[1,2],[3,4],[5,6]])X_test=np.array([[7,8],[9,10]])# 创建标准化器scaler=StandardScaler()# 正确用法scaler.fit(X_train)# 只在训练集上学习参数X_train_scaled=scaler.transform(X_train)X_test_scaled=scaler.transform(X_test)# 测试集用相同参数# 或者用快捷方式X_train_scaled=scaler.fit_transform(X_train)# 训练集X_test_scaled=scaler.transform(X_test)# 测试集print("训练集标准化后:")print(X_train_scaled)print("\n测试集标准化后:")print(X_test_scaled)示例2:PCA降维
from sklearn.decompositionimportPCA# 创建PCA对象,保留2个主成分pca=PCA(n_components=2)# 在训练集上学习主成分X_train_pca=pca.fit_transform(X_train)# 相当于 fit() + transform()# 在测试集上应用相同的主成分X_test_pca=pca.transform(X_test)# 只用 transform()print(f"解释方差比例: {pca.explained_variance_ratio_}")4. 重要注意事项
绝对不能这样用!
# ❌ 错误:测试集上调用 fit_transform()X_test_scaled=scaler.fit_transform(X_test)# 错误!# ❌ 错误:训练集只transform不fitX_train_scaled=scaler.transform(X_train)# 报错:没有先fit为什么测试集只用 transform()?
保证训练集和测试集使用相同的转换规则
防止数据泄露(Data Leakage)
确保模型评估的准确性
5. 流程总结
# 训练阶段(训练集)X_train_transformed=transformer.fit_transform(X_train)# 测试/预测阶段(测试集/新数据)X_test_transformed=transformer.transform(X_test)# 如果有新数据需要预测new_data_transformed=transformer.transform(new_data)记忆技巧
fit = 学习规则(只在训练集做一次)
transform = 应用规则(训练集、测试集都要做)
fit_transform = fit + transform(训练集的快捷方式)
记住这个原则:训练集可以了解数据,测试集只能应用从训练集学到的规则。