sklearn 转换器和预估器

刚学习sklearn时,没分清转换器的fit()和模型训练的fit(),还以为是一个,结果学完了回过头来,才发现这些差异。再此记录一下。

一、 sklearn 转换器和预估器

  1. 转换器(Transformers)

    • 定义:转换器是一种可以对数据进行某种转换的对象。例如,标准化、归一化、PCA等都是转换器的例子。
    • 主要方法
      • fit(X, y=None):在数据集X上训练转换器,这可以让转换器学习数据的一些统计特性。
      • transform(X):使用学习到的转换在新的数据集X上执行转换。
      • fit_transform(X, y=None):这是fittransform的组合。它首先在X上训练转换器,然后在同一个数据上执行转换。
    • 用途:转换器主要用于数据预处理,比如缺失值填充、特征缩放、编码分类特征等。
  2. 预估器(Estimators)

    • 定义 :预估器是一种可以估计某些参数的对象。在sklearn中,几乎所有的学习算法都是预估器,包括分类、回归、聚类等。
    • 主要方法
      • fit(X, y):用数据X和标签y训练预估器。
      • predict(X):对新的数据集X进行预测。
      • score(X, y):评估预估器在数据X和标签y上的性能。
    • 用途:预估器主要用于执行实际的学习任务,如分类、回归、聚类等。

总结

  • 转换器主要用于改变数据的形式或结构,而预估器用于基于数据进行预测或决策。
  • 转换器和预估器都有fit方法,用于从数据中学习参数。
  • 转换器用于数据预处理阶段,预估器则用于模型的训练和预测阶段。

二、转换器中的fit和模型训练中的fit区别

尽管它们都被称为fit,但它们在转换器和模型(预估器)之间的作用有所不同。

  1. 转换器中的fit

    • 作用 :在转换器中,fit方法用于学习数据的某些特性。例如,如果使用标准化转换器,fit方法会计算特征的均值和标准差。
    • 目的:目的是理解数据的结构和分布,以便可以将相同的转换应用于训练数据和未来的数据。
    • 输出fit方法通常不返回转换后的数据,而是将学习到的参数存储在转换器对象中。
  2. 模型训练中的fit(预估器的fit

    • 作用 :在预估器(例如分类器或回归器)中,fit方法用于从带标签的数据中学习模型的参数。例如,线性回归中的fit方法将找到最佳拟合线的斜率和截距。
    • 目的:目的是找到可以用于预测未来数据的模型参数。
    • 输出 :与转换器不同,预估器的fit方法将修改对象本身,使其准备好进行预测。

总的来说,转换器的fit方法与预估器的fit方法的主要区别在于它们的目标和作用:

  • 转换器的fit主要用于理解数据的特性,并为将来的转换做准备。
  • 预估器的fit用于学习模型的参数,以便对新数据进行预测。

特征工程:标准化

transfer = StandardScaler()

x_train = transfer.fit_transform(x_train)

x_test = transfer.transform(x_test)

实际中,我们经常写上述代码,fit_transform其实可以理解为先fit后transfrom,先训练出模型,然后根据模型进行转换。本质上上述代码等价于:

transfer = StandardScaler()

transfer.fit(x_train)

x_train = transfer.transform(x_train)

x_test = transfer.transform(x_test)

三、案例分析

案例:房价预测

假设有一个包含各种特征的房屋数据集,例如面积、卧室数量、地段等,以及房价的标签。目标是根据这些特征预测房价。

步骤1:数据预处理(使用转换器)

首先,需要对一些特征进行标准化,使其具有均值为0和标准差为1。

python 复制代码
from sklearn.preprocessing import StandardScaler

# 假设 X_train 是训练特征
scaler = StandardScaler()
scaler.fit(X_train)  # 用fit方法学习训练数据的均值和标准差

# 使用转换器对训练和测试数据进行转换
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)  # 注意:使用训练数据的均值和标准差转换测试数据

在这里,fit方法用于学习训练数据的均值和标准差。然后,使用transform方法将这些参数应用于训练和测试数据。

步骤2:训练模型(使用预估器)

使用预估器,例如线性回归模型,对房价进行预测。

python 复制代码
from sklearn.linear_model import LinearRegression

# 创建线性回归模型
model = LinearRegression()

# 使用标准化后的训练数据和房价标签来训练模型
model.fit(X_train_scaled, y_train)

# 使用训练后的模型预测测试集的房价
y_pred = model.predict(X_test_scaled)

在这里,预估器的fit方法用于从训练数据中学习模型参数,以便可以用于对新数据进行预测。

总结

  • 转换器的fit用于学习数据的特性(例如均值和标准差),以便以后可以对新数据应用相同的转换。
  • 预估器的fit用于从带标签的训练数据中学习模型参数,以便可以用于预测。

完整案例:波士顿房价预测

步骤1:加载数据

python 复制代码
from sklearn.datasets import load_boston

boston = load_boston()
X = boston.data
y = boston.target

步骤2:划分训练集和测试集

python 复制代码
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

步骤3:创建预处理

python 复制代码
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline

preprocessing_pipeline = Pipeline([
    ('scaler', StandardScaler()),
])
preprocessing_pipeline.fit(X_train)
X_train_scaled = preprocessing_pipeline.transform(X_train)
X_test_scaled = preprocessing_pipeline.transform(X_test)

步骤4:选择和配置预估器

python 复制代码
from sklearn.linear_model import LinearRegression

model = LinearRegression()

步骤5:拟合预估器

python 复制代码
model.fit(X_train_scaled, y_train)

步骤6:预测

python 复制代码
y_pred = model.predict(X_test_scaled)

步骤7:评估

python 复制代码
from sklearn.metrics import mean_squared_error

mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse}')

参考:黑马机器学习视频。

相关推荐
jndingxin8 分钟前
OpenCV特征检测(1)检测图像中的线段的类LineSegmentDe()的使用
人工智能·opencv·计算机视觉
@月落18 分钟前
alibaba获得店铺的所有商品 API接口
java·大数据·数据库·人工智能·学习
z千鑫27 分钟前
【人工智能】如何利用AI轻松将java,c++等代码转换为Python语言?程序员必读
java·c++·人工智能·gpt·agent·ai编程·ai工具
MinIO官方账号1 小时前
从 HDFS 迁移到 MinIO 企业对象存储
人工智能·分布式·postgresql·架构·开源
aWty_1 小时前
机器学习--K-Means
人工智能·机器学习·kmeans
草莓屁屁我不吃1 小时前
AI大语言模型的全面解读
人工智能·语言模型·自然语言处理·chatgpt
农民小飞侠1 小时前
python AutoGen接入开源模型xLAM-7b-fc-r,测试function calling的功能
开发语言·python
战神刘玉栋1 小时前
《程序猿之设计模式实战 · 观察者模式》
python·观察者模式·设计模式
敲代码不忘补水1 小时前
Python 项目实践:简单的计算器
开发语言·python·json·项目实践
WPG大大通1 小时前
有奖直播 | onsemi IPM 助力汽车电气革命及电子化时代冷热管理
大数据·人工智能·汽车·方案·电气·大大通·研讨会