简单几步,教你使用scikit-learn做分类和回归预测

前言

scikit-learn是基于Python的一个机器学习库,你可以在scikit-learn库中选择合适的模型,使用它训练数据集并对新数据集作出预测。

对于初学者来说,有一个共同的困惑:
怎么使用scikit-learn库中的模型做预测?
本文的目的就是解答这个困惑,手把手地教你使用机器学习模型。

分以下三点内容:

  • 针对特定的预测如何选择合适的模型
  • 什么是分类预测
  • 什么是回归预测

废话不多说,让我们开始吧!

一、选择模型

模型选择是机器学习的第一步。

你可以使用K折交叉验证或者分割训练集/测试集的方法处理数据集,并用来训练模型。这样做为了能够让训练出来的模型对新数据集做出预测。

还要判断该问题是分类问题还是回归问题。

分类问题预测的是类别、标签,一般来说是二分类即(0,1),比如是否下雨。

回归问题预测的是连续的数值,比如股票的价格。

二、如何使用分类模型

分类问题是指模型学习输入特征和输出标签之间的映射关系,然后对新的输入预测标签。

拿识别垃圾邮件举例,输入的是邮件的文本、时间、标题等等特征,而输出的则是垃圾邮件和非垃圾邮件两个标签。

模型通过训练数据集,学习特征与标签的关系,才能做出预测。

下面给出一个简单的,针对二进制分类问题的LogisticRegression(逻辑回归)模型代码示例。

虽然我们用的是LogisticRegression(逻辑回归)分类模型解决问题,但scikit-learn中的其它分类模型同样适用。

# 导入LogisticRegression方法
from sklearn.linear_model import LogisticRegression
# 导入数据生成器
from sklearn.datasets.samples_generator import make_blobs
# 生成2维数据,类别是2类
X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1)
# 训练模型
model = LogisticRegression()
model.fit(X, y)

注:make_blobs为聚类数据生成器

这里特别介绍两种分类预测的模型,类别预测和概率预测。

1、类别预测

类别预测:给定模型并训练数据实例后,通过scikit-learn的predict()函数预测新数据实例的类别。

比如,Xnew数组中有一个或多个数据实例,这个数组可以传递给predict()函数,用来预测每个实例的类别。

Xnew = [[...], [...]]
ynew = model.predict(Xnew)

输入代码:

# 类别预测案例
from sklearn.linear_model import LogisticRegression
from sklearn.datasets.samples_generator import make_blobs
# 生成数据集,有100个实列即100行,目标类别有2个:(0,1)
X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1)
# 拟合模型
model = LogisticRegression()
model.fit(X, y)# 生成新的预测数据集,有3个实例。这里的新实例可以为1个或多个
Xnew, _ = make_blobs(n_samples=3, centers=2, n_features=2, random_state=1)
# 开始预测
ynew = model.predict(Xnew)
# 展示类别的预测结果
print('预测类别:')
for i in range(len(Xnew)):print("X=%s, Predicted=%s" % (Xnew[i], ynew[i]))
# 展示数据集真实类别
print('真实类别:')
for i in range(len(Xnew)):print("X=%s, Predicted=%s" % (Xnew[i], _[i]))

输出结果:

可以看到,预测值和真实值一样,说明准确率100%。

  • 关于字符串类别标签的小提示

有时候,数据集的类别可能是字符串,比如(是,否)、(热,冷)等,但模型并不接受字符串输入输出,必须将字符串类别转化为整数的形式,比如(1,0)对应(是,否)。

scikit-learn提供LabelEncoder函数,用以将字符串转换为整数。

2、概率预测

另一种分类模型是预测数据实例属于每个类别的概率,如果有2个类别(0,1),则预测输出值为0的概率和1概率。

比如,Xnew数组中有一个或多个数据实例,这个数组可以传递给predict_proba()函数,用来预测每个实例的类别。

Xnew = [[...], [...]]
ynew = model.predict_proba(Xnew)

概率预测只适用于能够进行概率预测的模型,大多数(不是全部)模型可以做到。

下面的例子,通过训练好的模型对Xnew数组中的每个实例进行概率预测。

输入代码:

# 概率预测案例
from sklearn.linear_model import LogisticRegression
from sklearn.datasets.samples_generator import make_blobs
# 生成数据集,有100个实列即100行,目标类别有2个:(0,1)
X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1)
# 训练模型
model = LogisticRegression()
model.fit(X, y)# 生成新的预测集,有3个实例即3行
Xnew, _ = make_blobs(n_samples=3, centers=2, n_features=2, random_state=1)
# 开始预测
ynew = model.predict_proba(Xnew)
# 展示预测的类别概率,分别生成为0的概率和为1的概率
print('预测的类别概率:')
for i in range(len(Xnew)):print("X=%s, Predicted=%s" % (Xnew[i], ynew[i]))
print('真实类别:')
for i in range(len(Xnew)):print("X=%s, Predicted=%s" % (Xnew[i], _[i]))

输出结果:

概率预测的输出可以理解为:输出每个类别的概率,有多少个类别就有多少个概率值。

三、如何使用回归模型

回归预测和分类预测一样,都是一种监督学习。通过训练给定的示例即训练集,模型学习到输入特征和输出值之间的映射关系,如输出值为0.1,0.4,0.8…

下面代码用的最常见的LinearRegression线性回归预测模型,当然你也可以用其它所有回归模型来实践它。

输入代码:

# 线性回归预测案例
# 导入相关方法
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
# 生成随机回归训练数据集,有100个实列即100行
X, y = make_regression(n_samples=100, n_features=2, noise=0.1, random_state=1)
# 拟合模型
model = LinearRegression()
model.fit(X, y)# 生成新的预测集,有3个实例即3行
Xnew, _ = make_regression(n_samples=3, n_features=2, noise=0.1, random_state=1)
# 开始预测
ynew = model.predict(Xnew)
# 展示预测的值
print('预测值:')
for i in range(len(Xnew)):print("X=%s, Predicted=%s" % (Xnew[i], ynew[i]))
# 展示真实的值
print('真实值:')
for i in range(len(Xnew)):print("X=%s, Real=%s" % (Xnew[i], _[i]))

注:make_regression函数为随机回归数据集生成器

输出结果:

四、总结

本文分别用scikit-learn库中的分类模型和回归模型做了预测,并解释了这两种预测模型的区别,你也可以探索其它相关函数并实现文中的案例。

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

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

相关文章

IOS微软语音转文本,lame压缩音频

在IOS开发中,用微软进行语音转文本操作,并将录音文件压缩后返回 项目中遇到了利用微软SDK进行实时录音转文本操作,如果操作失败,那么就利用原始音频文件通过网络请求操作,最终这份文件上传到阿里云保存,考…

MongoDB教程(十五):MongoDB原子操作

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、MongoD…

11 深度推荐模型演化中的“范式替换“灵活组合

上一课时,我们介绍了 DIEN 模型添加了 RNN中 的 GRU,使模型获得了对序列数据的建模能力;而 DSIN 模型不仅使用了 RNN 中的 bi-LSTM,还使用了 Transformer 组件。 由此可见,在新的演化模型中,根据场景和数据…

Lua脚本简单理解

目录 1.安装 2.语法 2.1Lua数据类型 2.2变量 2.3lua循环 2.4流程控制 2.5函数 2.6运算符 2.7关系运算符 3.lua脚本在redis中的使用 3.1lua脚本再redis简单编写 3.2普通锁Lua脚本 3.3可重入锁lua脚本 1.安装 centos安装 安装指令: yum -y update yum i…

本地部署VMware ESXi服务实现无公网IP远程访问管理服务器

文章目录 前言1. 下载安装ESXi2. 安装Cpolar工具3. 配置ESXi公网地址4. 远程访问ESXi5. 固定ESXi公网地址 前言 在虚拟化技术日益成熟的今天,VMware ESXi以其卓越的性能和稳定性,成为了众多企业构建虚拟化环境的首选。然而,随着远程办公和跨…

CCS光源的高输出TH2系列平面光源

光源在机器视觉系统中起着重要作用,不同环境、场景及应用合适光源都不一样,今天我们来看看高输出TH2系列平面光源。它可以对应高速化的生产线,为提高生产效率做出贡献。 TH2系列光源的特点: 1、实现了更高一级的高亮度 实现了更…

谷粒商城实战笔记-56~57-商品服务-API-三级分类-修改-拖拽功能完成

文章目录 一,56-商品服务-API-三级分类-修改-拖拽功能完成二,57-商品服务-API-三级分类-修改-批量拖拽效果1,增加按钮2,多次拖拽一次保存完整代码 在构建商品服务API中的三级分类修改功能时,拖拽排序是一个直观且高效的…

Java | Leetcode Java题解之第260题只出现一次的数字III

题目: 题解: class Solution {public int[] singleNumber(int[] nums) {int xorsum 0;for (int num : nums) {xorsum ^ num;}// 防止溢出int lsb (xorsum Integer.MIN_VALUE ? xorsum : xorsum & (-xorsum));int type1 0, type2 0;for (int n…

Prometheus配置alertmanager告警

1、拉取镜像并运行 1、配置docker镜像源 [rootlocalhost ~]# vim /etc/docker/daemon.json {"registry-mirrors": ["https://dfaad.mirror.aliyuncs.com"] } [rootlocalhost ~]# systemctl daemon-reload [rootlocalhost ~]# systemctl restart docker2、…

刷题了: 151.翻转字符串里的单词 |卡码网:55.右旋转字符串

151.翻转字符串里的单词 题目链接:https://leetcode.cn/problems/reverse-words-in-a-string/description/ 文章讲解:https://programmercarl.com/0151.%E7%BF%BB%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%87%8C%E7%9A%84%E5%8D%95%E8%AF%8D.html 视频讲解:https://www.bilibi…

vue2之jessibuca视频插件使用教程

vue2之jessibuca视频插件使用教程 jessibuca简介前期准备下载相关jsvue index.html文件引入 组件封装使用小知识 引入iconfont jessibuca简介 Jessibuca是一款开源的纯H5直播流播放器,通过Emscripten将音视频解码库编译成Js(ams.js/wasm)运行于浏览器之中…

基于PyCharm在Windows系统上远程连接Linux服务器中Docker容器进行Python项目开发与部署

文章目录 摘要项目结构项目开发项目上线参考文章 摘要 本文介绍了如何在Windows 10系统上使用PyCharm专业版2024.1,通过Docker容器在阿里云CentOS 7.9服务器上进行Python项目的开发和生产部署。文章详细阐述了项目结构的搭建、PyCharm的使用技巧、以及如何将开发项…

12.Spring事务和事务传播机制

文章目录 1.为什么需要事务2.Spring 中事务的实现2.1 MySQL 中的事务使⽤2.2 Spring 编程式事务2.3 Spring 声明式事务(自动)2.3.1 Transactional 作⽤范围2.3.2 Transactional 参数说明2.3.3 注意事项2.3.4 Transactional ⼯作原理 3.事务隔离级别3.1 事…

vue+element的table合并单元格(竖着合并行)及合计行添加并计算

1 效果: 代码分析: 1 表格头配置: 2 懒得写的:自己复制吧 <el-table:data"tableData"style"width: 98%":height"height"v-loading"isLoading"stripe"false" :span-method"objectSpanMethod"show-summary:summ…

视图、存储过程、触发器

一、视图 视图是从一个或者几个基本表&#xff08;或视图&#xff09;导出的表。它与基 本表不同&#xff0c;是一个虚表&#xff0c;视图只能用来从查询&#xff0c;不能做增删改(虚拟的表) 1.创建视图 创建视图的语法&#xff1a; create view 视图名【view_xxx / v_xxx】 a…

深入理解MySQL锁机制与性能优化:详解记录锁、间隙锁、临键锁及慢SQL查询分析

1. 事务隔离和锁机制详解 记录锁 第一种情况,当我们对于唯一性的索引(包括唯一索引和主键索引)使用等值查询,精准匹配到一条记录的时候,这个时候使用的就是记录锁。 比如 where id = 1 4 7 10。 间隙锁 第二种情况,当我们查询的记录不存在,无论是用等值查询还是范围…

Thinkphp开发文档二次整理版

基础部分 安装 环境要求 ​ *php>7.1.0 命令下载 通过Composer进行下载&#xff0c;操作步骤下载软件 phpstudy --->点击软件管理 --->安装Composer --->再点击网站 --->点击管理 --->点击Composer --->复制如下命令代码&#xff1a; ​ 稳定版&…

国际化技术参考

一、概述 国际化就是用户可以选择对应的语言,页面展示成对应的语言; 一个系统的国际化按照信息的所在位置,可以分为三种国际化信息: 前端页面信息后端提示信息数据库的字典类信息二、前端页面国际化 使用i18n库实现国际化 i18n国际化库思路:通过jquery或者dom操作拿到需…

推荐4款简单高效的视频转文字工具。

最近我要将很多的以前的培训视频转换成笔记&#xff0c;觉得很麻烦&#xff0c;于是就搜索有没有什么工具可以帮助。结果就真的找到了很多将视频转换成文字的软件和网站。解决了一个大工程&#xff0c;后来发现其实很多人都会碰到像我这样的问题&#xff0c;于是在这里将我使用…

类和对象:完结

1.再深构造函数 • 之前我们实现构造函数时&#xff0c;初始化成员变量主要使⽤函数体内赋值&#xff0c;构造函数初始化还有⼀种⽅ 式&#xff0c;就是初始化列表&#xff0c;初始化列表的使⽤⽅式是以⼀个冒号开始&#xff0c;接着是⼀个以逗号分隔的数据成 员列表&#xf…