Python 如何使用 scikit-learn 进行模型训练

news2024/11/25 7:13:59

如何使用 scikit-learn 进行模型训练

一、简介

在现代的数据科学和机器学习领域,Python 已经成为最流行的编程语言之一。而其中最流行的机器学习库之一就是 scikit-learn。scikit-learn 提供了许多方便的工具和函数来实现常见的机器学习任务,包括数据预处理、模型选择、模型评估和模型训练等。无论你是新手还是经验丰富的开发者,scikit-learn 都是一个极具价值的工具。

在这篇文章中,我们将介绍如何使用 scikit-learn 进行模型训练,从数据准备、模型选择、模型评估再到模型的保存和使用。通过简单明了的代码示例,帮助你理解如何通过 scikit-learn 完成一个标准的机器学习流程。

在这里插入图片描述

二、Scikit-learn 简介

scikit-learn 是一个开源的机器学习库,它基于其他强大的 Python 库如 NumPySciPymatplotlib 构建,提供了许多用于数据挖掘和数据分析的算法和工具。它非常适合初学者学习和快速构建机器学习模型,同时也能满足一些复杂项目的需求。

Scikit-learn 的主要功能包括:

  • 数据预处理:包括特征缩放、特征选择、数据归一化等。
  • 分类:如逻辑回归、支持向量机、k近邻等。
  • 回归:线性回归、岭回归等。
  • 聚类:如 k-means、层次聚类等。
  • 模型选择:交叉验证、网格搜索等。
  • 模型评估:多种评分指标,如准确率、F1 值等。

三、使用 scikit-learn 进行模型训练的基本流程

在机器学习项目中,通常会遵循一个标准的流程来构建和评估模型。下面,我们将按照这个流程一步步展示如何使用 scikit-learn 进行模型训练。

3.1 数据准备

无论是哪种机器学习任务,首先要准备好训练数据。scikit-learn 提供了一些内置的数据集,也支持从文件中加载数据。在数据准备过程中,通常需要进行数据清理、特征缩放等预处理操作。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 加载数据集
iris = load_iris()
X = iris.data  # 特征矩阵
y = iris.target  # 标签

# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

在这里,我们使用了 scikit-learn 的 load_iris 函数加载了鸢尾花数据集,这是一个非常常见的分类任务数据集。接着我们使用 train_test_split 函数将数据集分为训练集和测试集,测试集占总数据的 20%。

3.2 数据预处理

在训练模型之前,我们通常需要对数据进行预处理。scikit-learn 提供了很多方便的工具来进行特征缩放、归一化、缺失值填补等操作。以特征缩放为例,下面的代码展示了如何对数据进行标准化处理。

from sklearn.preprocessing import StandardScaler

# 标准化处理
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

在这里,我们使用 StandardScaler 对数据进行标准化处理,即将每个特征的值调整为零均值和单位方差。这是为了防止某些特征对模型产生过大的影响,尤其是在距离度量或梯度下降等算法中。

3.3 选择模型并进行训练

接下来是选择合适的模型。scikit-learn 提供了很多常见的分类、回归和聚类模型。在本例中,我们将使用支持向量机(SVM)模型进行分类任务。

from sklearn.svm import SVC

# 初始化支持向量机模型
model = SVC(kernel='linear')

# 训练模型
model.fit(X_train, y_train)

在这段代码中,我们初始化了一个线性核的 SVM 模型,并用训练集 X_trainy_train 来训练模型。fit 函数是模型训练的核心步骤。

3.4 模型评估

训练完成后,我们需要评估模型的性能。我们可以使用测试集来验证模型的效果,并计算一些常用的性能指标,如准确率、精确率、召回率和 F1 值等。

from sklearn.metrics import accuracy_score, classification_report

# 使用模型进行预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.2f}")

# 打印详细分类报告
print(classification_report(y_test, y_pred))

predict 函数用于对测试数据进行预测,accuracy_score 用来计算模型的准确率。classification_report 可以输出精确率、召回率和 F1 值等详细的评估报告。

3.5 模型保存和加载

如果模型训练效果良好,我们可以将其保存下来,方便后续使用或部署。scikit-learn 提供了 joblib 模块来进行模型的序列化和反序列化。

import joblib

# 保存模型
joblib.dump(model, 'svm_model.pkl')

# 加载模型
loaded_model = joblib.load('svm_model.pkl')

# 使用加载的模型进行预测
y_pred_loaded = loaded_model.predict(X_test)

在这里,我们使用 joblib.dump 将模型保存为 .pkl 文件。然后,通过 joblib.load 可以重新加载这个模型,并直接使用它进行预测。

四、案例:使用 scikit-learn 进行线性回归

为了进一步展示 scikit-learn 的强大功能,我们再看一个回归任务的例子——使用线性回归模型来预测数据。

4.1 数据准备

首先,加载数据并将其分为训练集和测试集。

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split

# 加载波士顿房价数据集
boston = load_boston()
X = boston.data
y = boston.target

# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

4.2 数据预处理

和之前的分类任务类似,我们对数据进行标准化处理。

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

4.3 训练线性回归模型

我们使用线性回归模型进行训练。

from sklearn.linear_model import LinearRegression

# 初始化线性回归模型
regressor = LinearRegression()

# 训练模型
regressor.fit(X_train, y_train)

4.4 模型评估

我们使用均方误差(MSE)来评估模型的表现。

from sklearn.metrics import mean_squared_error

# 使用模型进行预测
y_pred = regressor.predict(X_test)

# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f"均方误差: {mse:.2f}")

4.5 模型保存和加载

最后,我们将模型保存并加载。

import joblib

# 保存模型
joblib.dump(regressor, 'linear_regressor.pkl')

# 加载模型
loaded_regressor = joblib.load('linear_regressor.pkl')

五、总结

通过这篇文章,我们学习了如何使用 scikit-learn 进行模型训练,包括数据预处理、模型选择、模型训练、评估以及模型保存等步骤。scikit-learn 提供了一个简洁而强大的 API,能够帮助我们快速构建和训练各种机器学习模型。

无论是分类任务还是回归任务,scikit-learn 都能帮助我们简化开发过程。如果你刚开始学习机器学习,scikit-learn 是一个非常好的选择,它能够帮助你理解机器学习的基本流程,并逐步掌握更加复杂的模型和算法。

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

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

相关文章

spi hal库 正点原子版

这个图 是了解一下 spi就是cs片选,clk时钟,miso主机输入从机输出,mosi主机输出从机输入,这四根线 spi最主要就是极性和相位的选择,spi是边沿采集,和iic的电平采集不一样,所以需要通过极性和相位…

SpringBoot 多元化配置(正则表达式,配置文件优先级)

1.配置绑定 所谓“配置绑定”就是把配置文件中的值与 JavaBean 中对应的属性进行绑定。通常,我们会把一些配置信息(例如,数据库配置)放在配置文件中,然后通过 Java 代码去读取该配置文件,并且把配置文件中…

【持续更新中】MMDetection3训练自己的数据集常见报错解决

博主近来跑自己数据集需要对比试验,故选择了MMDetection3这一算法整合详细的框架,遇到了较多问题在此处留作记录,若你也有相应的问题可以在评论区提出与解决方法。会持续更新,同时欢迎批评指正。 0.ModuleNotFoundError: No modu…

从博士到院士,国家级人才荣誉称号一览

在中国的科技界,两院院士代表着学术成就的巅峰荣誉,享有终身荣耀,并且是科研人员梦寐以求的最高职业荣誉。除了院士头衔之外,国家和各部委还设立了一系列针对不同年龄段学术人才的国家级荣誉称号体系,旨在表彰各类优秀…

8.9K Star,开源自托管离线翻译引擎

Hi,骚年,我是大 G,公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目,一分钟 get 一个优秀的开源项目,挖掘开源的价值,欢迎关注。 在全球化的今天,跨语言交流已成为日常需求,然…

U3D游戏开发之中剧情系统的制作

今天我们来揭秘带有人物选项的剧情系统该如何制作。 半年前我接到了一个剧情系统的需求,本着能抄代码绝不自己动手的想法在B站上面找现成系统,大概看了一些内容,发现比较繁琐就直接自己动手写了。 目录 1 需求分析 2 梳理代码逻辑 3 代码书…

k8s 中存储之 NFS 卷

目录 1 NFS 卷的介绍 2 NFS 卷的实践操作 2.1 部署一台 NFS 共享主机 2.2 在所有k8s节点中安装nfs-utils 2.3 部署nfs卷 2.3.1 生成 pod 清单文件 2.3.2 修改 pod 清单文件增加 实现 NFS卷 挂载的 参数 2.3.3 声明签单文件并查看是否创建成功 2.3.4 在 NFS 服务器 创建默认发布…

[c语言]一句话讲清循环中break和continue的作用与区别

1.两者的作用 break和contuinue都只能在循环中使用,都用来停止循环。 2.两者的区别 break 在循环中只要遇到break,就直接永久终止当前循环,开始执行当前循环之外的代码。 continue 在循环中只要遇到continue,就结束本次循环&…

免费送源码:Java+ssm+JSP+Ajax SSM棕榈校园论坛的开发 计算机毕业设计原创定制

摘要 随着计算机科学技术的高速发展,计算机成了人们日常生活的必需品,从而也带动了一系列与此相关产业,是人们的生活发生了翻天覆地的变化,而网络化的出现也在改变着人们传统的生活方式,包括工作,学习,社交…

数据库软题6.1-关系模式-关系模式的各种键

关系模式的各种键 题1-由关系模式求候选键 1. 候选键唯一不冗余 对选项进行闭包运算,如果得到全部属性U,则为候选码 A:AC-ABC-ABCD B:AB-ABC-ABCD C:AE-ABE-ABCE -ABCDE-ABCDEH D:DE2. R的候选码可以从A1,A2,A3,A1A2,A1A3,A2A3,A1A2A3中选择&#xff…

Flutter String 按 ,。分割

在 Flutter 中,如果你想将一个字符串按特定的字符(例如中文逗号 , 和英文句号 .)进行分割,可以使用 Dart 语言的字符串处理功能。具体来说,你可以使用 split 方法,并传入一个正则表达式来匹配这…

CSS基础-常见属性(二)

6、CSS三大特性 6.1 层叠性 如果样式发生冲突,则按照优先级进行覆盖。 6.2 继承性 元素自动继承其父元素、祖先元素所设置的某些元素,优先继承较近的元素。 6.3 优先级 6.3.1 简单分级 1、内联样式2、ID选择器3、类选择器/属性选择器4、标签名选择器/…

数据结构之树(1)

课程:b站王道数据结构 5.1.1 树的定义和基本术语_哔哩哔哩_bilibili 写在前面:基础不牢,地动山摇。。 一、树 1、概念 树是n(n>0)个结点的有限集合,n0时,称为空树 非空树的特性 有且仅有一个根节点…

智能家居有哪些产品?生活中常见的人工智能有哪些?

智能家居有哪些产品? 1、智能照明设备类:智能开关、智能插座、灯控模块、智能空开、智能灯、无线开关。 2、家庭安防类:智能门锁、智能摄像机、智能猫眼、智能门铃。 3、智能传感器类:烟雾传感器、可燃气体传感器、水浸传感器、声光报警器…

CentOS7系统配置Yum环境

新安装完系统的服务器往往缺少我们常用的依赖包,故需要设置好yum源,方便软件安装,以下是CentOS7为例,系统安装后yum默认安装。 //备份之前的配置文件 mv /etc/yum.repos.d /etc/yum.repos.d.bak mkdir -p /etc/yum.repos.d 1…

鸿蒙开发之ArkUI 界面篇 十八 京东app登录界面实现

鸿蒙UI实现某东App登录界面,如下图鲜果,我们先分析整体架构是什么! 我们整体架构分析,分为区域1、2、3、4、5、6、7、8、9区域,下图: 8个区域的整体方向是垂直的,容器使用的是Column,区域1使用的是子容器Row,左边是Image,右边是Text,区域2是Image,区域3第一感觉是…

欧姆龙(Omron)协议解析

1. 协议概述    欧姆龙(Omron)是来自日本的知名电子和自控设备制造商,其中、小型PLC在国内市场有较高的占有率,有CJ、CM等系列。PLC可以支持Fins、Host link等协议进行通信。 支持以太网的欧姆龙PLC CPU、以太网通信模块根据型号的不同,一般…

dockertop提示Failed to fetch extensions

解决办法:重装dockertop 第一步:卸载当前的dockertop 如果卸载过程中存在AlibabaProtect的相关软件关不掉,那么参考这篇文章:卸载AlibabaProtect 第二步:删除C:\Program Files路径下的Docker文件夹 第三步&#xff1…

代码随想录Day 62|Floyd 算法精讲、A \* 算法精讲 (A star算法),题目:97. 小明逛公园、127. 骑士的攻击

提示:DDU,供自己复习使用。欢迎大家前来讨论~ 文章目录 图论part11Floyd 算法精讲题目:97. 小明逛公园解题思路: A \* 算法精讲 (A star算法)题目:127. 骑士的攻击问题描述算法选择解题思路C代…

什么是重卡充电桩?

有什么广告?没有广告,纯纯的介绍。 在政策与市场双重驱动下,充电桩市场已经开启加速模式,行业的火苗越烧越旺。同时,随着新能源重卡的广泛普及,重卡充电桩也迎来了新的发展机遇。 此种背景下 &#xff0c…