sklearn 转换器和预估器

2023-11-11

        刚学习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。

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:训练模型(使用预估器)

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

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:加载数据

from sklearn.datasets import load_boston

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

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

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:创建预处理

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:选择和配置预估器

from sklearn.linear_model import LinearRegression

model = LinearRegression()

步骤5:拟合预估器

model.fit(X_train_scaled, y_train)

步骤6:预测

y_pred = model.predict(X_test_scaled)

步骤7:评估

from sklearn.metrics import mean_squared_error

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sklearn 转换器和预估器 的相关文章

随机推荐

  • HCIPR&S222-V2.5一些总结

    1 IP Precedence取值中 代表immediate的是2 2 VRRP中路由器已经为Master设备 不会被更高优先级的Backup设备抢占 如果出现故障的情况会被Backup设备抢占 故障恢复后重新抢占为Master设备 默认为
  • java jmf视频播放器无法播放视频问题

    初学java 谢了一个参照网上代码写了个java jmf视频播放器 运行调试代码没问题 可是被这个avi视频格式纠结的要死 换了n多个avi格式视频依然不行 经过查阅资料发现现在网上流行的avi格式并不是真正的avi格式 大都是其他格式转化
  • 原生AJAX 的基本使用

    1 准备工作 1 1 安装node js Node js 中文网 1 2 安装express 服务端框架 Express 基于 Node js 平台的 web 应用开发框架 Express 中文文档 Express 中文网 1 2 1 初始
  • MYSQL多表连查

    前言 多表查询 也称为关联查询 指两个或更多个表一起完成查询操作 前提条件 这些一起查询的表之间是有关系的 一对一 一对多 它们之间一定是有关联字段 这个关联字段可能建立了外键 也可能没有建立外键 比如 员工表和部门表 这两个表依靠 部门编
  • 诚邀您参加Go+1.0发布会!与大咖共同探索行业生态!

    你想参与iPhone13抽奖吗 你想和大咖面对面交流吗 你想收获最前沿的行业动态吗 10 月15 日 Go Together Go 1 0发布会暨Go 开发者基金会启动仪式重磅来袭 活动中除七牛云 CEO Go 语言发明人许式伟以及Go 开
  • 传奇私服游戏支付接口申请(已解决)

    传奇游戏是一款经典打怪升级 PK游戏 盛大游戏公司于2001年9月发布 随后出现了众多传奇私服游戏版本 到现在依然受很多人喜爱 经历了多次升级换代 现已转变为游戏体验更加细腻的页游和手游 成为了小成本高收益的热门游戏 受到各游戏服务商和玩家
  • IO流基础总结

    IO流 File 1 File类概述和构造方法 File 它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对象的 对于File而言 其封装的并不是一个真正存在的文件 仅仅是一个路径名 而已 它可以是存在的 也可以是不存在的
  • Allegro PCB设计中:结构文件DXF导入、更新、PCB板框更改

    1 将结构工程师输出的DXF文件导入到Allegro PCB设计中 文章来源地址https www yii666 com blog 453846 html action onAll 2 结构文件DXF多次更改导致PCB板框尺寸涉及的修改 1
  • C++STL:vector

    C STL中的vector是一种动态分配的数组 可以在运行时动态增加和删除元素 它也是C 中最常用的容器之一 以下是vector的使用介绍 引入头文件 在使用vector之前 需要添加头文件 include
  • nrm 源管理

    什么是nrm nrm 是一个 npm 源管理器 你可以快速地在 npm源间切换 大家在开发中可能会经常切换 npm 源 我们会使用命令切换 如 npm set registry https registry npm taobao org 或
  • Vue style中的 scoped 属性

    Vue 中存在 scoped 属性 HTML5中也存在一个 scoped 属性 而且 这两者都是针对 css 样式处理的属性 所以很多文章在 解释 Vue scoped 的时候 都会把两者混为一谈 直接进把 HTML5 scoped 的定义
  • Login控件用法,用自己的数据库提供login控件的数据源

    一 在配置web config文件 web config 文件
  • 基于SuperSocket 1.6版本的自定义帧过滤的源码分析(实现MODBUS通信)

    一 SuperSocket 1 6 自定义帧过滤的官方文档地址 http docs supersocket net v1 6 zh CN Implement Your Own Communication Protocol with IReq
  • QT信号槽机制

    信号槽 信号槽是QT中用于对象间通信的一种机制 也是QT的核心机制 在GUI编程中 我们经常需要在改变一个组件的同时 通知另一个组件做出响应 例如 一开始我们的Find按钮是未激活的 用户输入要查找的内容后 查找按钮就被激活 这就是输入框与
  • 细线表格 border-collapse:collapse;/*细线表格,合并边框*/

  • vue3获取reactive代理的target原数组

    使用toRaw获取 可从vue引入toRaw const t3 reactive age name 3 console log toRaw t3 age 官方示例
  • MySQL-SQL全部锁详解(下)

    作者 小刘在C站 个人主页 小刘主页 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 学习两年总结出的运维经验 以及思科模拟器全套网络实验教程 专栏 云计算技术 小刘私信可以随便问 只要会绝不吝啬 感谢CSDN让你我相遇 前言
  • R︱并行计算以及提高运算效率的方式(parallel包、clusterExport函数、SupR包简介)

    终于开始攻克并行这一块了 有点小兴奋 来看看网络上R语言并行办法有哪些 赵鹏老师 R与并行计算 做的总结已经很到位 现在并行可以分为 隐式并行 隐式计算对用户隐藏了大部分细节 用户不需要知道具体数据分配方式 算法的实现或者底层的硬件资源分配
  • 关于ISP下载中 编译后自动下载代码不能执行完成的一点问题 补充keil未破解下载超范围问题

    在STC的ISP下载过程中 偶尔发现一点问题 首先在建立工程的时候没有按照自己的芯片选择 而是选择的通用型号 我在ISP中选择芯片型号后 打开串口和工程 没有提示问题 由于习惯 勾选了编译后自动下载工程 在后面的编写过程中 起初是没有问题的
  • sklearn 转换器和预估器

    刚学习sklearn时 没分清转换器的fit 和模型训练的fit 还以为是一个 结果学完了回过头来 才发现这些差异 再此记录一下 一 sklearn 转换器和预估器 转换器 Transformers 定义 转换器是一种可以对数据进行某种转换