【机器学习之 sklearn 基础教程】

文章目录

  • 机器学习之 sklearn 基础教程
    • 1. 引言
    • 2. 安装 sklearn
    • 3. 数据集
      • 3.1 加载数据集
      • 3.2 数据集划分
    • 4. 数据预处理
      • 4.1 特征缩放
      • 4.2 编码分类特征
    • 5. 模型训练与评估
      • 5.1 模型训练
      • 5.2 模型评估
      • 5.3 交叉验证
    • 6. 模型调参
    • 7. 模型调参(续)
      • 7.1 GridSearchCV
        • 7.1.1 使用 GridSearchCV
        • 7.1.2 解读结果
        • 7.1.3 预测和评估
      • 7.2 RandomizedSearchCV
        • 7.2.1 使用 RandomizedSearchCV
        • 7.2.2 解读结果
      • 7.3 管道(Pipeline)
        • 7.3.1 创建管道
        • 7.3.2 使用管道进行参数搜索
    • 8. 模型持久化
        • 8.1 保存模型
        • 8.2 加载模型
    • 9. 总结
      • 9.1 模型评估与选择
      • 9.2 交叉验证
      • 9.3 模型调参技巧
      • 9.4 模型持久化工具
      • 9.5 部署与监控
      • 10. 展望

机器学习之 sklearn 基础教程

本文章由文心一言生成,由arjunna整合编辑

1. 引言

scikit-learn(通常简写为 sklearn)是 Python 中最受欢迎的机器学习库之一。它提供了各种用于数据预处理、模型训练、评估以及模型选择的工具。本教程将详细介绍 sklearn 的基础用法,帮助你快速上手机器学习。
在这里插入图片描述

在这里插入图片描述

2. 安装 sklearn

你可以使用 pip 或 conda 来安装 sklearn。以下是使用 pip 安装的命令:

pip install scikit-learn

3. 数据集

3.1 加载数据集

sklearn 自带了一些用于示例和测试的数据集,如鸢尾花数据集(Iris dataset)、波士顿房价数据集(Boston housing dataset)等。以下是如何加载鸢尾花数据集的示例:

from sklearn.datasets import load_irisiris = load_iris()
X = iris.data  # 特征数据
y = iris.target  # 目标标签

3.2 数据集划分

在训练模型之前,通常需要将数据集划分为训练集和测试集。sklearn 提供了 train_test_split 函数来实现这一功能:

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)

4. 数据预处理

4.1 特征缩放

某些机器学习算法(如支持向量机、K近邻等)对特征的尺度敏感。因此,在进行模型训练之前,通常需要对特征进行缩放。sklearn 提供了 StandardScalerMinMaxScaler 等工具来实现特征缩放。

from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

4.2 编码分类特征

如果数据集中包含分类特征(即非数值型特征),则需要将其转换为数值型特征。sklearn 提供了 LabelEncoder(用于单个分类特征)和 OneHotEncoder(用于多个分类特征)等工具来实现这一功能。

5. 模型训练与评估

5.1 模型训练

sklearn 提供了许多内置的机器学习算法,如逻辑回归、支持向量机、决策树等。以下是如何使用 LogisticRegression 算法训练模型的示例:

from sklearn.linear_model import LogisticRegressionmodel = LogisticRegression()
model.fit(X_train_scaled, y_train)

5.2 模型评估

训练好模型后,我们需要评估其在测试集上的性能。sklearn 提供了各种评估指标,如准确率、精确率、召回率、F1 分数等。以下是如何计算模型准确率的示例:

from sklearn.metrics import accuracy_scorey_pred = model.predict(X_test_scaled)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

5.3 交叉验证

为了更准确地评估模型的性能,可以使用交叉验证(Cross-Validation)。sklearn 提供了 cross_val_score 函数来实现这一功能:

from sklearn.model_selection import cross_val_scorescores = cross_val_score(model, X_train_scaled, y_train, cv=5)
print("Cross-validation scores:", scores)
print("Mean cross-validation score:", scores.mean())

6. 模型调参

sklearn 提供了 GridSearchCVRandomizedSearchCV 等工具来自动搜索模型的最佳参数。以下是如何使用 GridSearchCV 进行参数搜索的示例:

from sklearn.model_selection import GridSearchCVparam_grid = {'C': [0.1, 1, 10, 100],'gamma': [1, 0.1, 0.01, 0.001],'kernel': ['rbf', 'linear']
}grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5)
grid_search.fit(X_train_scaled, y_train)print("Best parameters:", grid_search.best_params_)

7. 模型调参(续)

7.1 GridSearchCV

在上一节中,我们介绍了如何使用GridSearchCV进行参数搜索。现在,我们将进一步讨论其用法和结果解读。

7.1.1 使用 GridSearchCV
from sklearn.model_selection import GridSearchCV# 假设我们已经定义了param_grid和LogisticRegression模型
grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5, scoring='accuracy')
grid_search.fit(X_train_scaled, y_train)
7.1.2 解读结果

GridSearchCV训练完成后,我们可以使用以下属性来查看结果:

  • best_params_:返回最佳参数组合。
  • best_score_:返回最佳参数组合对应的平均交叉验证得分。
  • best_estimator_:返回使用最佳参数组合训练的模型。
print("Best parameters:", grid_search.best_params_)
print("Best cross-validation score:", grid_search.best_score_)
best_model = grid_search.best_estimator_
7.1.3 预测和评估

现在,我们可以使用最佳模型进行预测,并评估其在测试集上的性能:

y_pred = best_model.predict(X_test_scaled)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy on test set:", accuracy)

7.2 RandomizedSearchCV

RandomizedSearchCVGridSearchCV类似,但它在参数网格中随机选择参数组合进行搜索,而不是像GridSearchCV那样遍历所有可能的组合。这可以在参数空间非常大时提高效率。

7.2.1 使用 RandomizedSearchCV
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint as sp_randint# 定义随机搜索的参数分布
param_distributions = {'C': sp_randint(low=0, high=20),'gamma': sp_randint(low=3, high=0.00001),'kernel': ['rbf', 'linear'],'n_estimators': sp_randint(low=100, high=500),  # 假设这是某个树集成模型的参数
}random_search = RandomizedSearchCV(LogisticRegression(), param_distributions, n_iter=10, cv=5, scoring='accuracy')
random_search.fit(X_train_scaled, y_train)
7.2.2 解读结果

GridSearchCV类似,我们可以使用best_params_best_score_best_estimator_等属性来查看结果。

7.3 管道(Pipeline)

当数据预处理和模型训练需要多个步骤时,可以使用Pipeline来组织这些步骤。Pipeline可以将多个步骤组合成一个单一的估计器,从而简化工作流程并减少代码冗余。

7.3.1 创建管道
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScalersteps = [('scaler', StandardScaler()),('classifier', LogisticRegression())]pipeline = Pipeline(steps)# 现在,你可以像平常一样使用pipeline进行训练和预测
pipeline.fit(X_train, y_train)
y_pred = pipeline.predict(X_test)
7.3.2 使用管道进行参数搜索

你还可以将管道与GridSearchCVRandomizedSearchCV结合使用,以搜索包括预处理步骤在内的最佳参数组合。

8. 模型持久化

训练好的模型可以保存下来,以便在将来使用。sklearn提供了joblib模块来保存和加载模型。

8.1 保存模型
from sklearn.externals import joblib  # 在较新版本的sklearn中,joblib已被独立出来,需要单独安装joblib.dump(best_model, 'best_model.pkl')
8.2 加载模型
loaded_model = joblib.load('best_model.pkl')

加载后的模型可以像之前一样进行预测。

9. 总结

本教程详细介绍了sklearn的基础用法,包括数据加载、预处理、模型训练
在机器学习模型的训练、调参和保存过程中,还有一些其他值得探讨的内容。

9.1 模型评估与选择

在模型训练完成后,我们需要对模型进行评估以了解其性能。评估通常涉及将模型应用于一个独立的测试集,并计算各种性能指标,如准确率、召回率、F1分数、AUC-ROC等。这些指标可以帮助我们了解模型在不同场景下的表现,并据此选择最合适的模型。

9.2 交叉验证

交叉验证是一种评估模型性能的技术,它通过将数据集分成多个子集(通常是k个子集),然后多次使用不同的子集组合进行训练和测试,以得到更准确的性能估计。常见的交叉验证方法包括k折交叉验证、留一交叉验证等。交叉验证可以帮助我们更好地评估模型的泛化能力,避免过拟合或欠拟合的问题。

9.3 模型调参技巧

除了之前提到的网格搜索、随机搜索和贝叶斯优化等调参方法外,还有一些其他的调参技巧可以帮助我们更有效地找到最优参数。例如,我们可以使用贪心算法逐步增加进入模型的最佳参数,或者使用遗传算法等启发式搜索算法来探索参数空间。此外,了解模型的原理和实现细节也可以帮助我们更好地理解参数对模型性能的影响,从而更有效地进行调参。

9.4 模型持久化工具

除了joblib外,还有其他一些工具可以用于保存和加载机器学习模型。例如,对于使用TensorFlow或PyTorch等深度学习框架训练的模型,我们可以使用这些框架提供的保存和加载功能。此外,还有一些通用的序列化库(如Pickle)也可以用于保存和加载Python对象,包括机器学习模型。然而,需要注意的是,不同的保存和加载工具可能具有不同的优缺点,我们需要根据具体的应用场景和需求来选择最合适的工具。

9.5 部署与监控

当我们将训练好的模型部署到实际应用中时,需要确保模型能够稳定地运行并产生准确的结果。为此,我们需要对模型进行监控和维护,包括定期检查模型的性能、更新数据集和重新训练模型等。此外,我们还需要考虑如何将模型的预测结果集成到现有的业务流程中,并确保模型与业务需求的匹配性。

10. 展望

随着机器学习技术的不断发展,我们将面临更多的挑战和机遇。未来,我们可以期待更先进的算法、更强大的计算能力和更丰富的数据集来推动机器学习技术的发展。同时,我们也需要关注如何更好地将机器学习技术应用于实际场景中,并解决实际应用中遇到的问题和挑战。

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

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

相关文章

【C++后端项目】负载均衡OJ服务器

文章目录 一、演示项目二、所用技术与开发环境所用技术开发环境 三、项目宏观结构I. 风格:仿leetcodeII. 结构:Browser-Server模式III. 编写思路:编译服务 -> OJ服务 -> 前端设计 四、关于Git分支管理✨4.1 Git 分支结构4.2 Git 分支命…

mac电脑如何安装java

1、检查当前系统的 Java 版本 打开终端,输入以下命令查看当前 Java 版本 /usr/bin/java -version 2、前往 Java 官网下载 Java JDK 打开 Java 官网 (https://www.java.com/zh-CN/download/) 并下载最新版本的 Java JDK。 3、安装 Java JDK 双击下载的 .dmg 文件启动安装程序…

Springboot集成Netflix-ribbon、Consul实现负载均衡调用-09

Consul简介 Consul是一个开源的服务发现和配置管理工具,具有跨平台、运行高效等特点。它由HashiCorp公司开发,并使用Go语言编写。Consul主要用于实现分布式系统中的服务发现、健康检查、键值存储等功能。 核心功能 服务发现:Consul通过DNS…

Node.js版本管理工具nvm安装

1.下载nvm https://github.com/coreybutler/nvm-windows/releaseshttps://github.com/coreybutler/nvm-windows/releases 2.安装nvm 双击打开下载好的压缩包解压出的文件 目录中不要有中文 这个是配置切换node版本后的存储位置 然后一路下一步就行了 3.安装并使用node 安装…

LPDDR5电路设计的新功能

最近因为需要使用到LPDDR5,快速地浏览了JEDEC标准文档,发现与前几代相比出现了一些新的电路设计功能,总结为如下三点: 1. CK/WCK/RDQS时钟方案; 2. 电源的PDN设计目标; 3. DQ, DMI和RDQS的Rx端DFE均衡技术。…

LLM大语言模型(十五):LangChain的Agent中使用自定义的ChatGLM,且底层调用的是remote的ChatGLM3-6B的HTTP服务

背景 本文搭建了一个完整的LangChain的Agent,调用本地启动的ChatGLM3-6B的HTTP server。 为后续的RAG做好了准备。 增加服务端role:observation ChatGLM3的官方demo:openai_api_demo目录 api_server.py文件 class ChatMessage(BaseModel…

Unity 性能优化之GPU Instancing(五)

提示:仅供参考,有误之处,麻烦大佬指出,不胜感激! 文章目录 前言一、GPU Instancing使用方法二、使用GPU Instancing的条件三、GPU Instancing弊端四、注意五、检查是否成功总结 前言 GPU Instancing也是一种Draw call…

AppImage 创建快捷方式

AppImage是什么? AppImage 是一个可下载的 Linux 文件,它内部包含一个应用程序和应用程序所需的一切(库、图标、字体等)。 官网 https://appimage.org/ 如何运行 AppImage 很简单,下载一个 AppImage,给…

PowerShell ⇒ Excel 批量创建Excel

New-Object -ComObject Excel.Application:创建Excel对象[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null 用来显式释放 Excel COM 对象的资源,以确保在脚本执行完成后,释放 Excel 进程和相关资源&#xff0…

揭秘:让代码更优雅的七大面向对象设计秘诀

软件项目中,需求是不断变化的,需求也是项目中最难把控的,需求的变更也是无法避免的。我们写的软件程序,如何能实现拥抱变化,使我们的软件达到可维护和可复用,这是一代代软件工程师不断追寻的真理。 导致一个…

接口数据脱敏实现方案

背景 敏感信息如手机号、身份证、邮箱等信息需要脱敏后展示给前台,如果需要查看,则需要申请权限,查询时需要记录操作日志。 方案 通过JsonSerializer和注解,在json序列化的时候做脱敏操作 此处使用redis存储了加密后的key和明…

认养小游戏功能介绍

认养小游戏通常模拟了真实的农业生产过程,让玩家能够在线上体验种植、养殖的乐趣。以下是一些常见的认养小游戏功能介绍: 选择认养的农产品:首先,玩家可以从游戏中提供的多种农产品中选择自己想要认养的种类,如蔬菜、…

【Java一些注解知识】

RequestMapping RequestMapping是Spring框架中的一个注解,用于将HTTP请求映射到特定的处理方法上。通过使用RequestMapping注解,我们可以指定处理方法应该处理的URL路径和HTTP请求方法。 下面是一个简单的示例: 假设我们有一个UserControl…

[wp]第一届 “帕鲁杯“ --应急响应

1.前言: 第一次做这么大规模的应急响应靶场,收获许多 2.拓补图: 3.资产清单 4.解题 1. 签到[堡垒机的flag标签的值] [BrYeaVj54009rDIZzu4O] 2. 提交攻击者第一次登录时间 2024/04/11/14:21:18 3. 提交攻击者源IP 192.168.1.4 4. 提交…

网络隔离状态下,如何可以安全高效地进行研发文件外发?

研发部门的数据传输通常需要保证数据的安全性、完整性和保密性,尤其是当涉及到公司的核心技术、产品设计、源代码等重要信息时。研发文件外发,即研发资料的外部传输,通常涉及到公司的核心技术和商业机密,因此需要采取严格的安全措…

LayaAir引擎全面支持淘宝小游戏、小程序、小部件的发布

在最新的3.1版本和2.13版本中,LayaAir引擎已经全面支持了淘宝小游戏、小程序和小部件的开发和发布。这一重大更新,标志着LayaAir引擎与电商巨头阿里巴巴旗下的淘宝平台形成生态合作,在为广大开发者提供更加强大、高效的跨平台开发工具和解决方…

c++11 标准模板(STL)本地化库 - 平面类别(std::money_get) - 从输入字符序列中解析并构造货币值

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 从输入字符序列中解析并构造货币值 std::money_get template<…

Unity-NGUI爆错以后-导致不能多次点击,UI假卡死问题解决方法

太久没用&#xff0c;忘了&#xff0c;NGUI好像易出错&#xff0c;就再次点击不了 导致打开了UI关闭不了&#xff0c;每次都要重启就比较烦&#xff08;说的就是那种美术团队&#xff0c;一个 UI 打开几十层&#xff09; 就好比【左上角&#xff0c;箭头】点第二次是退出不了了…

【Mac】Hype 4 Pro for Mac(HTML5动画制作软件)v4.1.17安装激活教程

软件介绍 Hype 4 Pro是一款专业的HTML5动画和交互式内容制作软件&#xff0c;适用于Mac平台。它的主要特点和功能包括&#xff1a; 1.HTML5动画制作&#xff1a; Hype 4 Pro提供了直观的界面和丰富的工具&#xff0c;帮助用户轻松创建各种复杂的HTML5动画效果&#xff0c;包括…

每天五分钟计算机视觉:使用极大值抑制来寻找最优的目标检测对象

本文重点 在目标检测领域,当模型预测出多个候选框(bounding boxes)时,我们需要一种方法来确定哪些候选框最有可能表示真实的目标。由于模型的不完美性和图像中目标的重叠性,往往会有多个候选框对应于同一个目标。此时,极大值抑制(Non-Maximum Suppression,NMS)技术就…