当前位置: 首页 > news >正文

【python】sklearn基础教程及示例

【python】sklearn基础教程及示例


Scikit-learn(简称sklearn)是一个非常流行的Python机器学习库,提供了许多常用的机器学习算法和工具。以下是一个基础教程的概述:


 1. 安装scikit-learn


首先,确保你已经安装了Python和pip,然后使用以下命令安装scikit-learn:

pip install -U scikit-learn

2. 导入库

在你的Python脚本或Jupyter Notebook中,首先导入scikit-learn库:

import sklearn

3. 加载数据

你可以加载各种数据集,包括样本数据集和真实世界数据集。例如,加载经典的鸢尾花数据集:

from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data  # 特征矩阵
y = iris.target  # 目标向量

4. 数据预处理

在应用机器学习算法之前,通常需要进行一些数据预处理,例如特征缩放、特征选择、数据清洗等。以下是一些常用的数据预处理方法:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

5. 数据拆分

将数据集拆分为训练集和测试集:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

6. 建立模型

使用各种机器学习算法来建立模型,例如逻辑回归:

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

7. 模型评估

在训练模型之后,评估模型的性能,例如使用准确度评估:

from sklearn.metrics import accuracy_score
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

8. 交叉验证

使用交叉验证来评估模型的稳定性和泛化能力:

from sklearn.model_selection import cross_validate
result = cross_validate(model, X, y, cv=5)
print(result['test_score'])

sklearn示例

1.简单例子:鸢尾花分类

这是一个经典的机器学习任务,用于分类鸢尾花的种类。

load_iris 是一个经典的机器学习数据集,通常用于分类和聚类任务。这个数据集包含了三种不同种类的鸢尾花(Iris Setosa、Iris Versicolour 和 Iris Virginica)的信息,每种鸢尾花有四个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。

具体来说,load_iris 数据集包含以下内容:

  • 150个样本:每种鸢尾花各50个样本。
  • 4个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。
  • 目标标签:每个样本的目标类别标签,分别为0(Setosa)、1(Versicolour)和2(Virginica)。
  • StandardScaler 是 scikit-learn 库中的一个类,用于对数据进行标准化处理。标准化的目的是将数据的特征缩放到相同的尺度,通常是均值为0,标准差为1。这对于许多机器学习算法来说是非常重要的,特别是那些基于距离的算法(如K-近邻、支持向量机等)和需要计算协方差矩阵的算法(如PCA、线性回归等)。

# 导入必要的库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target# 数据预处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, 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(f"Accuracy: {accuracy}")

2.复杂例子:手写数字识别

这个例子使用手写数字数据集,并应用支持向量机(SVM)进行分类。

load_digits 是 scikit-learn 提供的一个经典数据集,用于手写数字识别任务。这个数据集包含了 0 到 9 共 10 个数字的手写图像,每个图像是一个 8x8 的灰度图像。

  • 数据集内容 样本数量:1797 个手写数字图像。
  • 特征维度:每个图像有 64 个特征(8x8 像素)。
  • 特征值:每个特征值是一个整数,范围从 0 到 16,表示像素的灰度值。
  • 目标标签:每个样本对应一个目标标签,表示数字 0 到 9。

# 导入必要的库
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import classification_report# 加载数据集
digits = load_digits()
X = digits.data
y = digits.target# 数据预处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)# 使用网格搜索进行超参数调优
param_grid = {'C': [0.1, 1, 10, 100], 'gamma': [1, 0.1, 0.01, 0.001]}
grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=2)
grid.fit(X_train, y_train)# 最佳参数和模型评估
print(f"Best Parameters: {grid.best_params_}")
y_pred = grid.predict(X_test)
print(classification_report(y_test, y_pred))

在这个复杂的例子中,我们使用了网格搜索(GridSearchCV)来找到支持向量机(SVM)的最佳超参数,并使用分类报告(classification_report)来评估模型的性能。

  • param_grid:这是一个字典,定义了要搜索的参数范围。在这个例子中,我们要调整两个参数:
    • C:正则化参数,控制模型的复杂度。较小的 C 值会使模型更简单,但可能欠拟合;较大的 C 值会使模型更复杂,但可能过拟合。
    • gamma:核函数系数,控制单个训练样本的影响范围。较大的 gamma 值会使模型更复杂,但可能过拟合;较小的 gamma 值会使模型更简单,但可能欠拟合。
  • GridSearchCV:这是 scikit-learn 提供的一个工具,用于通过交叉验证来搜索最佳参数组合。
    • SVC():支持向量机分类器。
    • param_grid:要搜索的参数网格。
    • refit=True:在找到最佳参数组合后,使用整个训练集重新训练模型。
    • verbose=2:设置详细程度,输出更多的搜索过程信息。

http://www.lryc.cn/news/408595.html

相关文章:

  • Linux:传输层(2) -- TCP协议(2)
  • AcWing 802. 区间和
  • 实验2-2-1 温度转换
  • Spark实时(六):Output Sinks案例演示
  • 在SQL编程中DROP、DELETE和TRUNCATE的区别
  • 【AI大模型】Prompt 提示词工程使用详解
  • 学习记录day18——数据结构 算法
  • 一篇文章带你学完Java所有的时间与日期类
  • 利用GPT4o Captcha工具和AI技术全面识别验证码
  • 大学生算法高等数学学习平台设计方案 (第一版)
  • 机器学习算法与Python实战 | 两行代码即可应用 40 个机器学习模型--lazypredict 库!
  • 使用WebSocket协议调用群发方法将消息返回客户端页面
  • 【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十七章 Linux中断实验
  • 每日一题~961div2A+B+C(阅读题,思维,数学log)
  • Fireflyrk3288 ubuntu18.04添加Qt开发环境、安装mysql-server
  • 简化mybatis @Select IN条件的编写
  • Windows图形界面(GUI)-MFC-C/C++ - Control
  • SQL Server数据库安全:策略制定与实践指南
  • Spring Boot入门指南:留言板
  • Docker 中安装和配置带用户名和密码保护的 Elasticsearch
  • 面试官:说说JVM内存调优及内存结构
  • Ansible的脚本-----playbook剧本【下】
  • Mysql开启远程控制简化版,亲测有效
  • 【MQTT协议与IoT通信】MQTT协议的使用和管理
  • 根据题意写出完整的css,html和js代码【购物车模块页面及功能实现】
  • AWS免费层之后:了解和管理您的云服务成本
  • Linux定时同步系统时间到硬件时间
  • 网络编程——wireshark抓包、tcp粘包
  • el-table合计行更新问题
  • ChatGPT:数据库不符合第二范式示例