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

一个简单的机器学习实战例程,使用Scikit-Learn库来完成一个常见的分类任务——**鸢尾花数据集(Iris Dataset)**的分类

机器学习实战通常是将理论与实践结合,通过实际的项目或案例,帮助你理解并应用各种机器学习算法。下面是一个简单的机器学习实战例程,使用Scikit-Learn库来完成一个常见的分类任务——**鸢尾花数据集(Iris Dataset)**的分类。我们将通过该数据集来演示数据预处理、模型训练、评估和预测的全过程。

 访问更多内容来源 https://ai.tmqcjr.com

1. 安装所需库

首先,确保你已安装了scikit-learnmatplotlib等库,如果没有,请通过以下命令安装:

 

bash

复制代码

pip install scikit-learn matplotlib

2. 机器学习实战例程

导入必要的库
 

python

复制代码

import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier from sklearn.svm import SVC from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import classification_report, confusion_matrix, accuracy_score

加载数据集

我们使用Scikit-Learn自带的鸢尾花数据集,这是一个经典的机器学习数据集。

 

python

复制代码

# 加载鸢尾花数据集 iris = load_iris() X = iris.data # 特征数据(花瓣和萼片的长度和宽度) y = iris.target # 标签数据(花的种类)

数据探索

在开始训练模型之前,我们可以对数据进行简单的探索,比如查看数据的维度和前几行。

 

python

复制代码

# 查看数据集的结构 print(f"数据集的特征名称: {iris.feature_names}") print(f"数据集的标签名称: {iris.target_names}") print(f"数据集的特征形状: {X.shape}") print(f"数据集的标签形状: {y.shape}") # 查看前5行数据 print(f"特征数据:\n{X[:5]}") print(f"标签数据:\n{y[:5]}")

数据划分

我们将数据集划分为训练集和测试集,通常使用70%训练,30%测试的比例。

 

python

复制代码

# 划分数据集为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) print(f"训练集的样本数量: {X_train.shape[0]}") print(f"测试集的样本数量: {X_test.shape[0]}")

数据预处理

在使用机器学习模型之前,通常需要对数据进行标准化处理,以便提高模型的性能。

 

python

复制代码

# 数据标准化:将特征缩放至均值为0,方差为1的标准正态分布 scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test)

训练模型

我们将训练多个机器学习模型进行比较。这里使用常见的几种分类模型:K近邻(KNN)、支持向量机(SVM)、决策树和随机森林。

1. K近邻(KNN)
 

python

复制代码

# 初始化KNN模型并训练 knn = KNeighborsClassifier(n_neighbors=3) knn.fit(X_train, y_train) # 在测试集上评估模型 y_pred_knn = knn.predict(X_test) print("KNN分类报告:") print(classification_report(y_test, y_pred_knn)) print(f"KNN的准确率: {accuracy_score(y_test, y_pred_knn)}")

2. 支持向量机(SVM)
 

python

复制代码

# 初始化SVM模型并训练 svm = SVC(kernel='linear') svm.fit(X_train, y_train) # 在测试集上评估模型 y_pred_svm = svm.predict(X_test) print("SVM分类报告:") print(classification_report(y_test, y_pred_svm)) print(f"SVM的准确率: {accuracy_score(y_test, y_pred_svm)}")

3. 决策树(Decision Tree)
 

python

复制代码

# 初始化决策树模型并训练 dt = DecisionTreeClassifier(random_state=42) dt.fit(X_train, y_train) # 在测试集上评估模型 y_pred_dt = dt.predict(X_test) print("决策树分类报告:") print(classification_report(y_test, y_pred_dt)) print(f"决策树的准确率: {accuracy_score(y_test, y_pred_dt)}")

4. 随机森林(Random Forest)
 

python

复制代码

# 初始化随机森林模型并训练 rf = RandomForestClassifier(n_estimators=100, random_state=42) rf.fit(X_train, y_train) # 在测试集上评估模型 y_pred_rf = rf.predict(X_test) print("随机森林分类报告:") print(classification_report(y_test, y_pred_rf)) print(f"随机森林的准确率: {accuracy_score(y_test, y_pred_rf)}")

评估模型

使用classification_report来评估模型的性能,显示精确度(Precision)、召回率(Recall)和F1-score。accuracy_score则显示整体的分类准确率。

 

python

复制代码

# 显示每个模型的准确率 models = ['KNN', 'SVM', '决策树', '随机森林'] accuracies = [ accuracy_score(y_test, y_pred_knn), accuracy_score(y_test, y_pred_svm), accuracy_score(y_test, y_pred_dt), accuracy_score(y_test, y_pred_rf) ] for model, accuracy in zip(models, accuracies): print(f"{model}的准确率: {accuracy}")

混淆矩阵

为了进一步分析模型的分类效果,可以绘制混淆矩阵。

 

python

复制代码

# 绘制混淆矩阵 def plot_confusion_matrix(cm, classes): plt.figure(figsize=(6, 6)) plt.imshow(cm, interpolation='nearest', cmap=plt.cm.Blues) plt.title('Confusion Matrix') plt.colorbar() tick_marks = np.arange(len(classes)) plt.xticks(tick_marks, classes, rotation=45) plt.yticks(tick_marks, classes) plt.xlabel('Predicted label') plt.ylabel('True label') plt.tight_layout() # KNN模型的混淆矩阵 cm_knn = confusion_matrix(y_test, y_pred_knn) plot_confusion_matrix(cm_knn, iris.target_names) # 显示图形 plt.show()

预测新数据

最后,我们可以使用训练好的模型对新的数据进行预测。

 

python

复制代码

# 使用KNN模型对新样本进行预测 new_data = np.array([[5.1, 3.5, 1.4, 0.2]]) # 一个新的样本(鸢尾花特征) new_data = scaler.transform(new_data) # 标准化 prediction = knn.predict(new_data) print(f"预测的花种类: {iris.target_names[prediction]}")

3. 模型总结

通过上述步骤,我们完成了以下内容:

  1. 数据加载与预处理:加载鸢尾花数据集并进行标准化处理。
  2. 模型训练与评估:训练了4个常见的机器学习模型(KNN、SVM、决策树和随机森林),并通过classification_reportaccuracy_score评估了各个模型的性能。
  3. 模型预测:使用训练好的模型对新数据进行了预测。

4. 总结

  • KNN:适合用于小型数据集,计算复杂度较高。
  • SVM:对于中小型数据集效果不错,但训练时间较长。
  • 决策树:易于理解和解释,但容易过拟合。
  • 随机森林:通过集成多棵决策树,通常表现良好,减少了过拟合的风险。

在实际的机器学习项目中,你可以根据任务的特点选择合适的模型,并不断调整参数以优化模型的表现。

相关文章:

一个简单的机器学习实战例程,使用Scikit-Learn库来完成一个常见的分类任务——**鸢尾花数据集(Iris Dataset)**的分类

机器学习实战通常是将理论与实践结合,通过实际的项目或案例,帮助你理解并应用各种机器学习算法。下面是一个简单的机器学习实战例程,使用Scikit-Learn库来完成一个常见的分类任务——**鸢尾花数据集(Iris Dataset)**的…...

攻防世界web第二题unseping

这是题目 <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function __destruct(){if (in_array($this->method, array("ping"))) {cal…...

动手学深度学习-深度学习计算-3延后初始化

目录 实例化网络 小结 到目前为止&#xff0c;我们忽略了建立网络时需要做的以下这些事情&#xff1a; 我们定义了网络架构&#xff0c;但没有指定输入维度。 我们添加层时没有指定前一层的输出维度。 我们在初始化参数时&#xff0c;甚至没有足够的信息来确定模型应该包含…...

Linux | 零基础Ubuntu搭建JDK

目录 软件简介 在线文档 压缩包安装 下载地址 补:传输软件 传输等待 目录结构 解压安装 配置环境 更新环境 测试JDK结果 APT安装 软件简介 Java Development Kit (JDK) 是 Sun 公司&#xff08;已被 Oracle 收购&#xff09;针对 Java 开发员的软件开发工具包。自…...

Android `android.graphics` 包深度解析:架构与设计模式

Android android.graphics 包深度解析:架构与设计模式 目录 引言android.graphics 包概述核心类与架构 CanvasPaintBitmapColorPathShaderMatrix设计模式在 android.graphics 中的应用 工厂模式装饰者模式策略模式享元模式高级图形处理技术 硬件加速离屏渲染自定义 View 中的…...

WPF使用OpenCvSharp4

WPF使用OpenCvSharp4 创建项目安装OpenCvSharp4 创建项目 安装OpenCvSharp4 在解决方案资源管理器中&#xff0c;右键单击项目名称&#xff0c;选择“管理 NuGet 包”。搜索并安装以下包&#xff1a; OpenCvSharp4OpenCvSharp4.ExtensionsOpenCvSharp4.runtime.winSystem.Man…...

你不需要对其他成年人的情绪负责

在这个纷繁复杂的世界里&#xff0c;每个人都是独一无二的个体&#xff0c;背负着各自的故事、梦想与烦恼。在人际交往的广阔舞台上&#xff0c;我们时常会遇到这样的情境&#xff1a;朋友、同事、家人&#xff0c;甚至是陌生人&#xff0c;他们的情绪似乎总能不经意间影响到我…...

25秋招面试总结

秋招从八月底开始&#xff0c;陆陆续续面试了不少&#xff0c;现在也是已经尘埃落定&#xff0c;在这里做一些总结一些我个人的面试经历 腾讯 腾讯是我最早面试的一家&#xff0c;一开始捞我面试的是数字人民币&#xff0c;安全方向的岗位&#xff0c;属于腾讯金融科技这块。…...

高斯核函数(深入浅出)

目录 定义及数学形式主要特点应用示例小结 高斯核函数&#xff08;Gaussian Kernel&#xff09;&#xff0c;又称径向基核&#xff08;Radial Basis Function Kernel&#xff0c;RBF Kernel&#xff09;&#xff0c;是机器学习与模式识别中最常用的核函数之一。它通过在高维空间…...

支付宝百宝箱 工具,快速上手制作一个agent

作品&#xff1a;历史上的今天-作文素材积累 Datawhale 动手学AI Agent 关键词&#xff1a;AI助手开发、LangGPT框架 链接&#xff1a;百宝箱百宝箱平台是一款可以提供一站式 AI 原生应用的开发平台&#xff0c;您无需具有任何代码基础&#xff0c;只需通过自然语言即可三步完…...

六十:HTTP/2与gRPC框架

随着互联网技术的发展&#xff0c;应用程序之间的通信需求日益复杂和多样化。传统的HTTP/1.x协议虽然广泛应用&#xff0c;但在性能和功能方面已经难以满足现代应用的需求。为了解决这些问题&#xff0c;HTTP/2协议和基于其之上的gRPC框架应运而生。本文将介绍HTTP/2协议的特点…...

1.RPC基本原理

文章目录 RPC1.定义2.概念3.优缺点4.RPC结构5.RPC消息协议5.1 消息边界5.2 内容5.3 压缩 6.RPC的实现6.1 divide_protocol.py6.2 server.py6.3 client.py RPC 1.定义 远程过程调用(remote procedure call) 2.概念 广义:所有通过网络进行通讯,的调用统称为RPC调用 狭义:不采…...

vue2/3,Spring Boot以及生产环境跨域解决方案

vue2和vue3跨域解决方案 Vue 2 (基于 Webpack) 的跨域解决方案 1. 创建或编辑 vue.config.js 文件 Vue CLI为Webpack项目提供了简单的代理配置方式。你可以通过创建或编辑项目的根目录下的 vue.config.js 文件来设置开发服务器的代理规则&#xff1a; // vue.config.js mod…...

【centos8 镜像修改】centos8 镜像修改阿里云

要将 CentOS 8 的镜像源修改为阿里云镜像&#xff0c;你需要编辑 /etc/yum.repos.d/ 目录下的 .repo 文件。以下是具体的步骤&#xff1a; 备份原始的 .repo 文件&#xff1a; 在编辑之前&#xff0c;建议备份原始的 .repo 文件&#xff0c;以便在出现问题时可以恢复。 sudo cp…...

多线程编程初探:掌握基本概念与核心原理

目录 1 初识线程 1.1 线程的由来 1.2 线程的产生 1.3 进程 VS 线程 1.4 关于系统内部关于线程和进程的资源调度问题 2 页表、虚拟地址和物理地址 2.1 对物理地址的描述 2.2 对于页表设计的解析 3 线程的控制 3.1 进程创建 3.1.1 pthread_create 3.2 线程退出 3.2.1 主…...

【信息系统项目管理师】第13章:项目资源管理过程详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 一、规划资源管理1、输入2、工具与技术3、输出二、估算活动资源1、输入2、工具与技术3、输出三、获取资源1、输入2、工具与技术3、输出四、建设团队1、输入2、工具与技术3、输出五、管理团队1、输入2、工具与技…...

vue3封装而成的APP ,在版本更新后,页面显示空白

一、问题展示 更新之后页面空白&#xff0c;打不开 &#xff0c;主要是由于缓存造成的 二、解决办法 1、随机数代码实现 使用随机数来动态的生成静态资源目录名可以避免浏览器缓存&#xff0c;但同时每次也会导致浏览器每次都下载最新的资源。如果静态资源过大&#xff0c;可…...

GEE云计算、多源遥感、高光谱遥感技术蓝碳储量估算;红树林植被指数计算及提取

大气温室气体浓度不断增加&#xff0c;导致气候变暖加剧&#xff0c;随之会引发一系列气象、生态和环境灾害。如何降低温室气体浓度和应对气候变化已成为全球关注的焦点。海洋是地球上最大的“碳库”,“蓝碳”即海洋活动以及海洋生物&#xff08;特别是红树林、盐沼和海草&…...

【知识】cuda检测GPU是否支持P2P通信及一些注意事项

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 代码流程 先检查所有GPU之间是否支持P2P通信&#xff1b;然后尝试启用GPU之间的P2P通信&#xff1b;再次检查所有GPU之间是否支持P2P通信。 test.cu&…...

用 Python 生成功能强大的二维码工具(支持自定义颜色与 Logo)

在很多项目中&#xff0c;二维码作为一种便捷的方式传递信息越来越常见。今天&#xff0c;我们将介绍如何用 Python 编写一个功能更全的二维码生成工具&#xff0c;它不仅支持自定义二维码的颜色&#xff0c;还能在二维码中间添加 logo。 1. 环境准备 首先&#xff0c;我们需…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...