sklearn基础教程:从入门到精通

文章目录

  • sklearn基础教程:从入门到精通
    • 一、sklearn简介
    • 二、安装与配置
    • 三、数据预处理
      • 数据导入
      • 数据清洗
      • 特征选择
      • 数据标准化与归一化
    • 四、常用模型介绍与应用
      • 线性回归
      • 逻辑回归
      • 决策树
      • 支持向量机
      • K近邻算法
      • 随机森林
      • 集成学习
    • 五、模型评估与调优
      • 交叉验证
      • 网格搜索
      • 模型评估指标
    • 六、实战案例
      • 波士顿房价预测
      • 手写数字识别
      • 客户流失预测
    • 七、测试接口与详细解释
      • 单元测试
      • 接口测试
    • 八、总结

👍 个人博客【 洛秋小站】洛秋资源小站【洛秋资源小站】

sklearn基础教程:从入门到精通

Scikit-learn(简称sklearn)是Python中一个强大且易于使用的机器学习库。它提供了丰富的工具集,包括数据预处理、特征选择、模型训练、评估和预测。本文将带领读者从零开始,详细讲解sklearn的基本用法,并通过多个实例帮助读者掌握如何在实际项目中应用这款工具。

一、sklearn简介

Scikit-learn是一个开源的机器学习库,基于NumPy、SciPy和matplotlib构建。它为机器学习提供了简单而高效的工具,并且具有以下特点:

  • 丰富的算法支持:包含了回归、分类、聚类、降维等多种机器学习算法。
  • 易用性:提供了简洁的API接口,便于快速上手和使用。
  • 良好的文档支持:详细的文档和大量的示例代码,便于学习和参考。

二、安装与配置

安装scikit-learn非常简单,只需使用pip命令即可。

pip install scikit-learn

安装完成后,可以通过以下命令检查安装是否成功:

import sklearn
print(sklearn.__version__)

三、数据预处理

数据预处理是机器学习的第一步,也是非常关键的一步。良好的数据预处理可以显著提高模型的性能。下面我们将介绍数据预处理的几项重要操作。

数据导入

首先,我们需要导入数据。sklearn提供了一些内置的数据集,方便我们进行学习和测试。以下示例展示了如何加载波士顿房价数据集。

from sklearn.datasets import load_boston
import pandas as pd# 加载数据集
boston = load_boston()
data = pd.DataFrame(boston.data, columns=boston.feature_names)
data['PRICE'] = boston.target# 查看数据集前几行
print(data.head())

数据清洗

数据清洗包括处理缺失值、重复值和异常值。

# 检查缺失值
print(data.isnull().sum())# 删除含有缺失值的行
data = data.dropna()# 检查重复值
print(data.duplicated().sum())# 删除重复值
data = data.drop_duplicates()

特征选择

特征选择是通过选择最有用的特征来提高模型的性能和可解释性。

from sklearn.feature_selection import SelectKBest, f_regression# 选择最有用的5个特征
selector = SelectKBest(f_regression, k=5)
X_new = selector.fit_transform(data.drop('PRICE', axis=1), data['PRICE'])# 查看选择的特征
print(X_new[:5])

数据标准化与归一化

数据标准化和归一化是为了将数据缩放到相同的尺度上,从而提高模型的训练效果。

from sklearn.preprocessing import StandardScaler, MinMaxScaler# 标准化
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data.drop('PRICE', axis=1))# 归一化
scaler = MinMaxScaler()
data_normalized = scaler.fit_transform(data.drop('PRICE', axis=1))

四、常用模型介绍与应用

线性回归

线性回归是一种最简单的回归模型,用于预测连续型目标变量。

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(data.drop('PRICE', axis=1), data['PRICE'], test_size=0.2, random_state=42)# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
mse = mean_squared_error(y_test, y_pred)
print("Mean Squared Error:", mse)

逻辑回归

逻辑回归常用于分类问题,尤其是二分类问题。

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score# 加载数据集(以鸢尾花数据集为例)
from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型
model = LogisticRegression()
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

决策树

决策树是一种非参数的监督学习方法,可以用于分类和回归。

from sklearn.tree import DecisionTreeClassifier# 训练模型
model = DecisionTreeClassifier()
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

支持向量机

支持向量机(SVM)是一种用于分类和回归的监督学习模型。

from sklearn.svm import SVC# 训练模型
model = SVC()
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

K近邻算法

K近邻算法(KNN)是一种简单的非参数分类和回归方法。

from sklearn.neighbors import KNeighborsClassifier# 训练模型
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

随机森林

随机森林是一种集成学习方法,通过构建多个决策树来提高模型的准确性和稳定性。

from sklearn.ensemble import RandomForestClassifier# 训练模型
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

集成学习

集成学习通过组合多个模型来提高预测性能。常见的集成学习方法包括Bagging、Boosting和Stacking。

from sklearn.ensemble import GradientBoostingClassifier# 训练模型
model = GradientBoostingClassifier(n_estimators=100)
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

五、模型评估与调优

交叉验证

交叉验证是一种评估模型性能的方法,通过多次分割数据集来获取模型的稳定性和泛化能力。

from sklearn.model_selection import cross_val_score# 使用交叉验证评估模型
scores = cross_val_score(model, X, y, cv=5)
print("Cross-Validation Scores:", scores)
print("Mean Score:", scores.mean())

网格搜索

网格搜索是一种超参数调优方法,通过遍历所有可能的参数组合来找到最佳参数。

from sklearn.model_selection import GridSearchCV# 定义参数网格
param_grid = {'n_estimators': [50, 100, 200],'max_depth': [None, 10, 20, 30]
}# 进行网格搜索
grid_search = GridSearchCV(RandomForestClassifier(), param_grid, cv=5)
grid_search.fit(X_train, y_train)# 输出最佳参数
print("Best Parameters:", grid_search.best_params_)

模型评估指标

常见的模型评估指标包括准确率、精确率、召回率、F1分数等。

from sklearn.metrics import precision_score, recall_score, f1_score# 计算精确率
precision = precision_score(y_test, y_pred, average='macro')
print("Precision:", precision)# 计算召回率
recall = recall_score(y_test, y_pred, average='macro')
print("Recall:", recall)# 计算F1分数
f1 = f1_score(y_test, y_pred, average='macro')
print("F1 Score:", f1)

六、实战案例

波士顿房价预测

以下示例展示了如何使用线性回归模型预测波士顿房价。

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error# 加载数据集
boston = load_boston()
X, y = boston.data, boston.target# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
mse = mean_squared_error(y_test, y_pred)
print("Mean Squared Error:", mse)

手写数字识别

以下示例展示了如何使用支持向量机模型进行手写数字识别。

from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score# 加载数据集
digits = load_digits()
X, y = digits.data, digits.target# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型
model = SVC()
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

客户流失预测

以下示例展示了如何使用随机森林模型预测客户流失。

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score# 加载数据集
data = pd.read_csv('customer_churn.csv')
X = data.drop('Churn', axis=1)
y = data['Churn']# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 训练模型
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

七、测试接口与详细解释

在实际开发中,测试是保证代码质量和模型性能的重要环节。sklearn中没有直接的测试模块,但我们可以使用Python的unittest库来进行模型和接口的测试。

单元测试

以下示例展示了如何使用unittest进行模型的单元测试。

import unittest
from sklearn.linear_model import LinearRegressionclass TestLinearRegression(unittest.TestCase):def setUp(self):self.model = LinearRegression()self.X_train = [[1, 2], [2, 3], [3, 4], [4, 5]]self.y_train = [2, 3, 4, 5]def test_fit(self):self.model.fit(self.X_train, self.y_train)self.assertTrue(hasattr(self.model, 'coef_'), "Model should have coefficients after fitting")def test_predict(self):self.model.fit(self.X_train, self.y_train)y_pred = self.model.predict([[5, 6]])self.assertEqual(len(y_pred), 1, "Prediction should return one value")if __name__ == '__main__':unittest.main()

接口测试

接口测试用于确保系统各部分之间的交互正常。以下示例展示了如何使用unittest进行简单的接口测试。

import unittest
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegressionclass TestLogisticRegressionAPI(unittest.TestCase):def setUp(self):self.data = load_iris()self.X, self.y = self.data.data, self.data.targetself.model = LogisticRegression()self.model.fit(self.X, self.y)def test_predict(self):y_pred = self.model.predict(self.X)self.assertEqual(len(y_pred), len(self.y), "Prediction length should match input length")def test_predict_proba(self):proba = self.model.predict_proba(self.X)self.assertEqual(proba.shape, (len(self.y), 3), "Probability prediction should return correct shape")if __name__ == '__main__':unittest.main()

八、总结

我们探讨了sklearn的基础知识和常用操作。sklearn以其丰富的功能和简洁的API,广泛应用于机器学习领域。从数据预处理、模型训练到模型评估,sklearn提供了一站式的解决方案。

👉 最后,愿大家都可以解决工作中和生活中遇到的难题,剑锋所指,所向披靡~

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

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

相关文章

基于springboot和mybatis的RealWorld后端项目实战二之实现tag接口

修改pom.xml 新增tag数据表 SET FOREIGN_KEY_CHECKS0;-- ---------------------------- -- Table structure for tags -- ---------------------------- DROP TABLE IF EXISTS tags; CREATE TABLE tags (id bigint(20) NOT NULL AUTO_INCREMENT,name varchar(255) NOT NULL,PR…

一文认识21世纪商贸物流新格局

在21世纪的全球化浪潮中,商贸物流作为连接生产与消费的重要纽带,其地位日益凸显。随着信息技术的飞速发展,特别是大数据、云计算、物联网等技术的广泛应用,现代物流已远远超越了传统意义上的货物运输与仓储,向着智能化…

前端Canvas入门——用canvas写五子棋?

前言 五子棋的实现其实不难,因为本身就是一个很小的游戏。 至于画线什么的,其实很简单,都是lineTo(),moveTo()就行了。 难的在于——怎么让棋子落入到指定的格子上,怎么判断连子胜利。 当然啦,这部分是…

基于STC8H4K64TL单片机的触摸功能调试

基于STC8H4K64TL单片机的触摸功能调试 STC8H4K64TL单片机介绍STC8H4K64TL单片机管脚图(48个引脚)STC8H4K64TL单片机串口仿真与串口通信STC8H4K64TL单片机管脚图(32个引脚)STC8H4K64TL单片机管脚图(20个引脚)STC8H系列单片机管脚说明STC8H系列单片机I/O口STC8H系列单片机I…

关于Codigger之软件项目体检Software Project HealthCheck

为你的软件项目提供快速、可靠的体检 项目体检是Codigger推出的智能代码质量检查工具,可以系统地帮助您交付干净的代码。作为我们Codigger解决方案的重要元素 ,代码体检集成到您现有的工作流程中并检测代码中的问题,以帮助您对项目执行持续的…

django中日志模块logging的配置和使用

一、文件的配置 settings.py文件中添加LOGGING块的配置,配置如下 # 日志记录 LOGGING {"version": 1,"disable_existing_loggers": False, # 用于确定在应用新的日志配置时是否禁用之前配置的日志器# 格式器"formatters": {"v…

云监控(华为) | 实训学习day4(10)

SpringBoot增删改的细节研究 一、Spring boot增的安全性 1.开启数据库的事务 SpringBoot中Service层有事务(保证操作成功) 两个用户操作,同时增加同一条数据(用户名,密码一致) 验证内容,开启…

MySQL:基础操作(增删查改)

目录 一、库的操作 创建数据库 查看数据库 显示创建语句 修改数据库 删除数据库 备份和恢复 二、表的操作 创建表 查看表结构 修改表 删除表 三、表的增删查改 新增数据 插入否则更新 插入查询的结果 查找数据 为查询结果指定别名 结果去重 where 条件 结…

【Jmeter】记录一次Jmeter实战测试

Jmeter实战 1、需求2、实现2.1、新建线程组2.2、导入参数2.3、新建HTTP请求2.4、添加监听器2.5、结果 1、需求 查询某个接口在高并发场景下的响应时间(loadtime),需求需要响应在50ms以内,接下来用Jmeter测试一下 Jmeter安装见文章《Jemeter安装教程&am…

极狐GitLab Git LFS(大文件存储)如何管理?

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…

解决xshell连接不上ubuntu首次安装的虚拟机问题

首次安装完虚拟机,主机和虚拟机之间互ping都没问题,但是xshell登不上去,基本上原因就是虚拟机没有安装ssh服务。 1、关闭防火墙 sudo ufw disable 2、开发22端口 sudo ufw allow 22 3、最后安装ssh sudo apt-get install openssh-serve…

日文医学文献pdf怎么翻译

翻译日文医学文献的PDF可以通过以下几个步骤进行: 1、提取文本: 如果PDF文档是扫描版或者图片格式,可以使用OCR(光学字符识别)软件提取文本。常用的OCR工具有Adobe Acrobat、ABBYY FineReader等。 如果PDF文档已经是…

多层全连接神经网络(四)---简单的前向网络

神经网络神经元概念部分有需要会单独再讲 激活函数 1. Sigmoid Sigmoid 非线性激活函数的数学表达式是 σ(z) ,其图形如图 3.14所示。目前我们知道 Sigmoid 激活函数是将一个实数输入转化到 0~1 之间的输出,具体来说也就是将越大的负数转化到越靠近 0…

C/C++蓝屏整人代码

文章目录 📒程序效果 📒具体步骤 1.隐藏任务栏 2.调整cmd窗口大小 3.调整cmd窗口屏幕颜色 4.完整代码 📒代码详解 🚀欢迎互三👉:程序猿方梓燚 💎💎 🚀关注博主&a…

笔记 7 :linux 011 注释,函 bread () , get_hash_table () , find_buffer ()

(57)接着介绍另一个读盘块的函数 bread(): (58)因为 函数 get_blk()大量调用了其它函数,一版面列举不完,故对其调用的函数先行注释:ge…

【Linux】服务器安装SSH

【Linux】服务器安装SSH 【创作不易,求点赞关注收藏】😀 在Ubuntu服务器上安装并配置SSH非常简单。你可以按照以下步骤进行操作: 1、更新软件包列表 sudo apt-get update2、安装OpenSSH服务器: sudo apt-get install openssh-server3、启…

鲁大师2024半年报电动车智能排行:九号继续霸榜,极核本田乘胜追击

鲁大师2024年半年报正式发布,本次季报包含电动车智能排行,测试的车型为市面上主流品牌的主流车型,共计30款,全部按照评测维度更广、更专业的鲁大师电动车智慧评测2.0进行评分,测试的成绩均来自于鲁大师智慧硬件实验室。…

口袋奇兵游戏攻略:云手机辅助战锤入侵策略指南!

在《口袋奇兵》中,战锤入侵是一个重要的游戏环节,了解如何有效地参与战锤入侵能够帮助玩家获取更多的资源和提升自己的战力。本文将详细介绍战锤入侵的策略和技巧,帮助玩家在战锤入侵活动中取得更好的成绩。除了找到强力的游戏辅助&#xff0…

粉尘传感器助力面粉厂安全生产

在面粉加工行业中,粉尘问题一直是一个不容忽视的难题。从原料的破碎、研磨到成品的包装,整个生产流程中都会伴随着大量的粉尘产生。这些粉尘不仅影响生产环境,更对工作人员的健康、设备的安全运行以及环境保护构成严重威胁。因此,…

食堂采购系统开发:从需求分析到上线实施的完整指南

本篇文章,笔者将详细介绍食堂采购系统从需求分析到上线实施的完整过程,旨在为开发团队和管理者提供一个系统化的指南。 一、需求分析 1.用户需求 常见的需求包括: -采购计划管理 -供应商管理 -库存管理 -成本控制 -报表生成 2.系统功…