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。

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_bostonboston = load_boston()
X = boston.data
y = boston.target

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

from sklearn.model_selection import train_test_splitX_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 Pipelinepreprocessing_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 LinearRegressionmodel = LinearRegression()

步骤5:拟合预估器

model.fit(X_train_scaled, y_train)

步骤6:预测

y_pred = model.predict(X_test_scaled)

步骤7:评估

from sklearn.metrics import mean_squared_errormse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse}')

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/21671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java--学生管理系统

本案例基于Java语言中的ArrayList集合来储存数据,并建立两个类——学生类和用户类存储在集合中,通过用户交互,搭建简单的学生管理系统。 1、学生类 学生类利用set函数进行获取学生单个信息,show函数负责获取全部信息。 package …

LCD驱动芯片VK1024B兼容HT系列驱动芯片,体积更小

产品型号:VK1024B 产品:VINKA/永嘉微电 封装形式:SOP16 产品年份:新年份 工程服务,技术支持,用芯服务 VK1024概述: VK1024B 是 24 点、 内存映象和多功能的 LCD 驱动, VK1024B …

Nginx实现反向代理和负载均衡

Nginx安装 本文章主要介绍下,如何使用Nginx来实现反向代理和负载均衡,Nginx安装和基础知识,可参考我的这篇文章 Nginx安装。 Nginx实现反向代理 实现反向代理需要准备两台Nginx服务器。一台Nginx服务器A,ip为 192.168.206.140&…

MySQL主从复制入门指南:基础概念和配置步骤

文章目录 前言一、问题分析二、Mysql主从复制1. 介绍2. 配置3. 测试 三、读写分离案例1. 背景2. shardingDBC介绍3. 入门案例4. 功能测试 总结 前言 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮…

基于freertos的温湿度蓝牙系统

前言:本项目主要是基于freertos的小项目,目的是为了巩固近期学习的知识,功能较简单,可自行扩充。 一、项目基本架构 项目基本功能:通过STM32单片机的freertos操作系统,将温湿度数据显示在oled屏幕上&#…

节流函数(执行最后一次)

节流函数的主要目的是限制一个函数在一定时间内只能执行一次。以下是一个使用JavaScript编写的基本节流函数&#xff1a; function throttle(func, delay) {let lastCall 0;return function() {const now new Date().getTime();if (now - lastCall < delay) {return;}las…

vue响应数据为二维码如何渲染到页面

在postman测试请求后发现响应数据为一个二维码图片,不是链接,如何解决? 然后如果在vue中使用请求还会报Uncaught (in promise) SyntaxError: Unexpected token o in JSON at position 1的错误。这个就是使用了JSON.parse导致的响应格式不对)&#xff0c;使用JSON.stringify解决…

Spring Boot集成单元测试调用dao,service

文章目录 Spring Boot集成单元测试调用dao&#xff0c;service1 添加相关依赖2 新建测试类 Spring Boot集成单元测试调用dao&#xff0c;service 1 添加相关依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-st…

入门NLTK:Python自然语言处理库初级教程

NLTK&#xff08;Natural Language Toolkit&#xff09;是一个Python库&#xff0c;用于实现自然语言处理&#xff08;NLP&#xff09;的许多任务。NLTK包括一些有用的工具和资源&#xff0c;如文本语料库、词性标注器、语法分析器等。在这篇初级教程中&#xff0c;我们将了解N…

奥威BI—数字化转型首选,以数据驱动企业发展

奥威BI系统BI方案可以迅速构建企业级大数据分析平台&#xff0c;可以将大量数据转化为直观、易于理解的图表和图形&#xff0c;推动和促进数字化转型的进程&#xff0c;帮助企业更好地了解自身的运营状况&#xff0c;及时发现问题并采取相应的措施&#xff0c;提高运营效率和质…

程序员的帝路应该是肉身成圣

标题听着贼中二&#xff0c;没办法哥们实在想不到啥好的标题&#xff0c;只是看到这个讨论程序员身体健康的话题啊情不自禁想到中学时期看过的一本修仙小说《遮天》小说内容忘记的差不多了&#xff0c;印象最深的就是各种体质&#xff0c;荒古圣体、先天霸体、混沌体等等&#…

【无公网IP】在公网环境下Windows远程桌面Ubuntu 18.04

【无公网IP】在公网环境下Windows远程桌面Ubuntu 18.04 文章目录 *【无*公网IP】在公网环境下Windows远程桌面Ubuntu 18.04一、 同个局域网内远程桌面Ubuntu1. 更新软件仓库2. 安装支持包3. 安装XFCE4桌面环境4. 安装XRDP5. 环境设置5.1 XFCE桌面配置5.2 在配置文件中&#xff…

[JAVAee]锁策略

目录 乐观锁与悲观锁 乐观锁 乐观锁的冲突检测 悲观锁 读锁与写锁 重量级锁与轻量级锁 重量级锁 轻量级锁 自旋锁 公平锁与非公平锁 可重入锁与不可重入锁 乐观锁与悲观锁 乐观锁 在乐观锁中,假设数据并不会发生冲突,在正式提交数据时会对数据进行冲突检测,如果发…

高并发下的Java项目解决方案

高并发下的Java项目解决方案 在当今的互联网时代&#xff0c;高并发是Java项目在设计和开发过程中必须要考虑的重要因素之一。本文将详细介绍如何在Java项目中处理高并发的问题&#xff0c;并提供具体的解决方案。我们将主要讨论四个主要的主题&#xff1a;服务器扩展&#xf…

小白入门Java第一天

当你对 Java语言有了一些了解后&#xff0c;你就可以开始着手学习Java了。 作为你的Java 学习第一天&#xff0c;所需掌握内容如下述目录&#xff1a; 文章目录 1. 注释1. 三种注释1.1 单行注释1.2 多行注释1.3 文档注释 2. 标识符和关键字2.1 标识符的组成&#xff1a;2.2 那…

Smarty

一.知识 1.PHP Smarty模版注入 二.实例 {{system(ls /)}}{{system(cat /flag)}}

从零搭建一个react + electron项目

最近打算搭建一个react electron的项目&#xff0c;发现并不是那么傻瓜式 于是记录一下自己的实践步骤 通过create-react-app 创建react项目 npx create-react-app my-app 安装electron依赖 npm i electron -D暴露react项目的配置文件&#xff08;这一步看自己需求&#xff0c…

《Flask Web 开发指南 pt.2》

在编写 Flask 程序的时候&#xff0c;你需要注意你的程序文件不要命名为 flask.py&#xff0c;建议命名为 app.py 或者 wsgi.py 但如果你的程序不是叫 app.py 或者 wsgi.py&#xff0c;那么你就需要设置环境变量 FLASK_APP 的值为程序名字 设置环境变量有两种方法&#xff0c;在…

url重定向

不安全的url跳转 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方。 如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话 就可能发生"跳错对象"的问题。 url跳转比较直接的危害是…

SpringBoot整合邮件服务

SpringBoot整合邮件服务 发送邮件应该是网站的必备功能之一&#xff0c;什么注册验证&#xff0c;忘记密码或者是给用户发送营销信息。最早期的时候我们会 使用 JavaMail 相关 api 来写发送邮件的相关代码&#xff0c;后来 Spring 推出了 JavaMailSender 更加简化了邮件发送的…