sklearn中fit、transform、fit_transform用法详解

1. 基本概念

这三个方法是 scikit-learn 转换器(Transformer)的核心方法:

fit() - 学习数据的参数(如均值、标准差等)

transform() - 应用学到的参数转换数据

fit_transform() - 一次性完成学习和转换

2. 详细解释

fit() - 训练/学习阶段

bash 复制代码
# 只学习参数,不转换数据
scaler.fit(X_train)

计算并存储数据的统计信息(如均值、方差等)

不返回转换后的数据,只返回转换器对象本身

通常用于训练集

transform() - 转换阶段

bash 复制代码
# 使用已学习的参数转换数据
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)  # 对测试集用相同的参数

应用之前 fit() 学到的参数

返回转换后的数据

可用于训练集和测试集

fit_transform() - 训练+转换

bash 复制代码
# 一次性完成学习和转换
X_train_scaled = scaler.fit_transform(X_train)

相当于先调用 fit() 再调用 transform()

只返回转换后的数据(不返回转换器)

仅用于训练集

3. 实际示例

示例1:标准化 (StandardScaler)

bash 复制代码
from sklearn.preprocessing import StandardScaler
import numpy 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降维

bash 复制代码
from sklearn.decomposition import PCA

# 创建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. 重要注意事项

绝对不能这样用!

bash 复制代码
# ❌ 错误:测试集上调用 fit_transform()
X_test_scaled = scaler.fit_transform(X_test)  # 错误!

# ❌ 错误:训练集只transform不fit
X_train_scaled = scaler.transform(X_train)  # 报错:没有先fit

为什么测试集只用 transform()?

保证训练集和测试集使用相同的转换规则

防止数据泄露(Data Leakage)

确保模型评估的准确性

5. 流程总结

bash 复制代码
# 训练阶段(训练集)
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(训练集的快捷方式)

记住这个原则:训练集可以了解数据,测试集只能应用从训练集学到的规则。

相关推荐
hopsky32 分钟前
大模型生成PPT的技术原理
人工智能
禁默1 小时前
打通 AI 与信号处理的“任督二脉”:Ascend SIP Boost 加速库深度实战
人工智能·信号处理·cann
心疼你的一切2 小时前
昇腾CANN实战落地:从智慧城市到AIGC,解锁五大行业AI应用的算力密码
数据仓库·人工智能·深度学习·aigc·智慧城市·cann
AI绘画哇哒哒2 小时前
【干货收藏】深度解析AI Agent框架:设计原理+主流选型+项目实操,一站式学习指南
人工智能·学习·ai·程序员·大模型·产品经理·转行
数据分析能量站2 小时前
Clawdbot(现名Moltbot)-现状分析
人工智能
那个村的李富贵2 小时前
CANN加速下的AIGC“即时翻译”:AI语音克隆与实时变声实战
人工智能·算法·aigc·cann
二十雨辰2 小时前
[python]-AI大模型
开发语言·人工智能·python
陈天伟教授2 小时前
人工智能应用- 语言理解:04.大语言模型
人工智能·语言模型·自然语言处理
Luhui Dev2 小时前
AI 与数学的融合:技术路径、应用前沿与未来展望(2026 版)
人工智能
Yvonne爱编码2 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python