机器学习实战第1天:鸢尾花分类任务

专栏介绍

欢迎订阅专栏——机器学习实战

机器学习实战_Nowl的博客-CSDN博客

纸上得来终觉浅

本专栏项目将着重于解决各类实际机器学习问题,带你上手各种场景的实际问题

数据集可以在我的资源中找到,也可以自行搜索

文中导入数据集的路径要改成自己的哦!!!

不了解机器学习基础的可以阅读专栏

机器学习_Nowl的博客-CSDN博客

文章目录

一、任务描述

二、数据集描述

三、主要代码

主要代码库的说明与导入方法

数据预处理

模型训练

模型预测与性能评估

除数据预处理外的完整代码

四、本章总结


 一、任务描述

鸢尾花分类任务是一个经典的机器学习问题,通常用于演示和测试分类算法的性能。该任务的目标是根据鸢尾花的特征将其分为三个不同的品种,即山鸢尾(Setosa)、变色鸢尾(Versicolor)和维吉尼亚鸢尾(Virginica)。这个任务是一个多类别分类问题,其中每个样本都属于三个可能的类别之一。


二、数据集描述

鸢尾花分类任务使用的数据集通常是著名的鸢尾花数据集(Iris dataset)。该数据集包含了150个鸢尾花样本,每个样本有四个特征:萼片长度(Sepal Length)、萼片宽度(Sepal Width)、花瓣长度(Petal Length)和花瓣宽度(Petal Width)。每个样本还标有其所属的品种。


三、主要代码

(1)主要代码库的说明与导入方法

  1. pandas (import pandas as pd):

    Pandas是一个用于数据处理和分析的强大库,提供了数据结构(如DataFrame和Series)和数据操作工具,使得在Python中进行数据清理、转换和分析变得更加方便。
  2. matplotlib.pyplot (import matplotlib.pyplot as plt):

    Matplotlib是一个用于绘制图表和可视化数据的2D绘图库。pyplot是Matplotlib的子模块,提供了类似于MATLAB的绘图接口,用于创建图表、直方图、散点图等。
  3. sklearn.model_selection (from sklearn.model_selection import train_test_split):

    train_test_split是scikit-learn中用于划分数据集为训练集和测试集的函数。它能够随机将数据划分为两个子集,是机器学习中常用的数据准备步骤之一。
  4. sklearn.svm (from sklearn import svm):

    Scikit-learn中的svm模块提供了支持向量机(SVM)算法的实现,包括用于分类和回归的支持向量分类器(SVC)和支持向量回归器(SVR)等。
  5. sklearn.metrics (from sklearn import metrics):

    metrics模块包含了许多用于评估模型性能的指标,例如准确性、精确度、召回率、F1分数等。这些指标可用于评估分类、回归和聚类等任务的模型性能。

(2)数据预处理

1.查看数据集基本情况

# 导入必要的库
import pandas as pd# 从CSV文件读取鸢尾花数据集
iris = pd.read_csv("datasets/iris.csv")# 查看数据集大小
print(iris.shape)

可以看到数据集为150行,6列的数据集

2.特征工程

我们可以绘制图像来观察数据特征的关系

# 导入必要的库
import pandas as pd
import matplotlib.pyplot as plt# 从CSV文件读取鸢尾花数据集
iris = pd.read_csv("datasets/iris.csv")# 绘制散点图,显示鸢尾花的萼片长度与萼片宽度,根据不同的品种用不同的颜色标识
plt.scatter(iris[iris.Species == 'Iris-setosa']["SepalLengthCm"], iris[iris.Species == 'Iris-setosa']["SepalWidthCm"], color="red", label="Setosa")
plt.scatter(iris[iris.Species == 'Iris-versicolor']["SepalLengthCm"], iris[iris.Species == 'Iris-versicolor']["SepalWidthCm"], color="green", label="Versicolor")
plt.scatter(iris[iris.Species == 'Iris-virginica']["SepalLengthCm"], iris[iris.Species == 'Iris-virginica']["SepalWidthCm"], color="blue", label="Virginica")# 显示图例
plt.legend()# 设置图表标题和轴标签
plt.title('Scatter Plot of Sepal Length vs Sepal Width for Iris Flowers')
plt.xlabel('Sepal Length (cm)')
plt.ylabel('Sepal Width (cm)')# 显示图形
plt.show()

绘制花萼长与宽的关系图,我们发现蓝色和绿色的点混在一起,这就代表着这两个特征不能很好地区别鸢尾花的种类


# 绘制散点图,显示鸢尾花的花瓣长度与花瓣宽度,根据不同的品种用不同的颜色标识
plt.scatter(iris[iris.Species == 'Iris-setosa']["PetalLengthCm"], iris[iris.Species == 'Iris-setosa']["PetalWidthCm"], color="red", label="Setosa")
plt.scatter(iris[iris.Species == 'Iris-versicolor']["PetalLengthCm"], iris[iris.Species == 'Iris-versicolor']["PetalWidthCm"], color="green", label="Versicolor")
plt.scatter(iris[iris.Species == 'Iris-virginica']["PetalLengthCm"], iris[iris.Species == 'Iris-virginica']["PetalWidthCm"], color="blue", label="Virginica")

绘制花瓣长与宽的关系图,我们发现不同颜色的点基本上被区分在了不同的区域,这很好,让我们用这两个特征来进行模型训练吧。


(3)模型训练

在这里我们使用svm分类模型来训练

# 导入必要的库
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn import svm# 从CSV文件读取鸢尾花数据集
iris = pd.read_csv("datasets/iris.csv")# 将数据集划分为训练集和测试集,测试集占总数据的20%
train, test = train_test_split(iris, test_size=0.2)# 提取训练集和测试集的特征和标签
train_x = train[['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm']]
train_y = train.Species
test_x = test[['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm']]
test_y = test.Species# 创建支持向量机(SVM)分类器模型
model = svm.SVC()# 在训练集上拟合SVM模型
model.fit(train_x, train_y)

(4)模型预测与性能评估

评估模型的性能

from sklearn import metrics# 使用训练好的模型对测试集进行预测
prediction = model.predict(test_x)# 打印SVM模型的准确性
print('The accuracy of the SVM is:', metrics.accuracy_score(prediction, test_y))

结果是1.0,这代表在测试集上的预测百分百正确,这是由于数据集较小,并且特征较少的原因,我们将在之后遇到更加复杂的情况


(5)除数据预处理外的完整代码

# 导入必要的库
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn import metrics# 从CSV文件读取鸢尾花数据集
iris = pd.read_csv("datasets/iris.csv")# 将数据集划分为训练集和测试集,测试集占总数据的20%
train, test = train_test_split(iris, test_size=0.2)# 提取训练集和测试集的特征和标签
train_x = train[['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm']]
train_y = train.Species
test_x = test[['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm']]
test_y = test.Species# 创建支持向量机(SVM)分类器模型
model = svm.SVC()# 在训练集上拟合SVM模型
model.fit(train_x, train_y)# 使用训练好的模型对测试集进行预测
prediction = model.predict(test_x)# 打印SVM模型的准确性
print('The accuracy of the SVM is:', metrics.accuracy_score(prediction, test_y))

四、本章总结

  • 如何查看数据集的大小
  • 基本的探索数据之间关系的方法
  • 对数据集进行划分的方法
  • 基本的模型训练
  • 基本的模型评估方法

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

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

相关文章

Vue2系列 — 渲染函数 (render + createElement)

官网文档&#xff1a;https://v2.cn.vuejs.org/v2/guide/render-function.html 1 render 函数 render 函数 不使用模板&#xff0c;使用 js 生成虚拟 dom 2 createElement() 接受的参数&#xff1a; 参数1 节点类型参数2 attribute参数3 子节点 3 DEMO <template>&…

采用connector-c++ 8.0操作数据库

1.下载最新的Connector https://dev.mysql.com/downloads/connector/cpp/&#xff0c;下载带debug的库。 解压缩到本地&#xff0c;本次使用的是带debug模式的connector库&#xff1a; 注&#xff1a;其中mysqlcppconn与mysqlcppconn8的区别是&#xff1a; 2.在cmakelist…

并发编程:共享模型之管程

目录 管程 临界区 竞态条件 案例 通过synchronized阻塞解决 synchronized添加位置 设计模式之保护性暂停 Join原理 修改线程状态的几种方法 单向改变不可返回的状态 双向可改变的状态 多把锁 线程活跃性 死锁 定位死锁 活锁 饥饿 ReentrantLock 可重入 可打…

安卓隐私指示器学习笔记

最近了解到Google 在Android12上新增了权限指示器&#xff0c;可以在信号栏的右侧显示当前访问录音机和Camera的应用&#xff0c;点击后可以跳转到相应应用的权限界面&#xff0c;消费者可以控制权限的开启和关闭。国内手机厂商最近几年都在增加隐私看板供能&#xff0c;消费者…

【endnote】如何将参考文献放到想放的位置

1. 方式 直接将生成的文献全选拖到想放的位置 注意&#xff1a;不要使用ctrlx这种操作。 2.具体操作 2.1 新建测试文档 如下图&#xff1a; 2.2 引用两篇文献】 如下图&#xff1a; 2.3 测试 如下图&#xff0c;选中所有已经引用的文献。 拖拽到想要防止的位置。 新…

详解Python中哈希表的使用。站在开发者角度,与大家一起探究哈希的世界。

文章目录 1. 前言2. 哈希表2.1 哈希函数2.2 哈希算法2.3 常见哈希算法2.4 哈希冲突 3.总结关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面…

ELF header

1. ELF header定义 ELF header的定义可以在 /usr/include/elf.h 中找到。Elf32_Ehdr是32位 ELF header的结构体。Elf64_Ehdr是64位ELF header的结构体。 所以&#xff0c;ELF header在ELF文件中的大小与位置是确定的&#xff0c;位置位于文件头部&#xff0c;大小则是Elf_Ehdr…

​极氪,中国传统汽车品牌电动化的样板间

这篇文章早就想写了&#xff0c;因为太忙的原因就一直跳票&#xff0c;正好最近两件事的出现&#xff0c;又触发了想写这篇文章的冲动。 两件事主要是&#xff1a; 一&#xff0c;10 月份各家陆续公布了单月销量以及累计销量&#xff1b; 二&#xff0c;极氪在北京正式发布了 …

jmeter中调用python代码

1、安装pyinstaller pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller 2、将py脚本打包 pyinstaller -F venv/get_image/OCR_jmeter_api.py 3、jmeter中添加OS Process Sampler并调用dist下的程序 4、执行jmeter

【高级网络程序设计】Week2-1 Sockets

一、The Basics 1. Sockets 定义An abstraction of a network interface应用 use the Socket API to create connections to remote computers send data(bytes) receive data(bytes) 2. Java network programming the java network libraryimport java.net.*;similar to…

网络安全之渗透测试入门准备

渗透测试入门所需知识 操作系统基础&#xff1a;Windows&#xff0c;Linux 网络基础&#xff1a;基础协议与简单原理 编程语言&#xff1a;PHP&#xff0c;python web安全基础 渗透测试入门 渗透测试学习&#xff1a; 1.工具环境准备&#xff1a;①VMware安装及使用&#xff1b…

OSG文字-HUD显示汉字示例(3)

显示文字是一种非常实用的技术&#xff0c;可以用来把一些重要的文字始终显示在屏幕上。HUD的全称是HeadsUpDisplay&#xff0c;即抬头显示&#xff0c;这种技术最早应用在军事战斗机上。 创建HUD显示的基本步骤如下: <1> 创建一个osg::Camera对象&#xff0c;设置视图、…