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

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


一、任务描述

鸢尾花分类任务是一个经典的机器学习问题,通常用于演示和测试分类算法的性能。该任务的目标是根据鸢尾花的特征将其分为三个不同的品种,即山鸢尾(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.查看数据集基本情况

使用pandas数据处理库来导入文件,注意这里的文件地址要改成你自己的,不然运行不了

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

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

2.特征工程

我们可以绘制图像来观察数据特征的关系,使用matplotlib绘图库,分别绘制花萼长宽图,与花瓣长宽图,来挖掘特征与种类之间的关系

# 导入必要的库
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分类模型来训练,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)模型预测与性能评估

评估模型的性能,我们使用metrics库来评估模型的性能,它的预测指标是准确率

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))
 
 

四、本章总结

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

当然,也可以自己处理特征,自己选择模型,调整参数,看看会不会获得更好的结果

感谢阅读,觉得有用的话就订阅下本专栏吧

相关文章
|
6月前
|
机器学习/深度学习 存储 运维
机器学习异常检测实战:用Isolation Forest快速构建无标签异常检测系统
本研究通过实验演示了异常标记如何逐步完善异常检测方案和主要分类模型在欺诈检测中的应用。实验结果表明,Isolation Forest作为一个强大的异常检测模型,无需显式建模正常模式即可有效工作,在处理未见风险事件方面具有显著优势。
534 46
|
5月前
|
机器学习/深度学习 分布式计算 Java
Java 大视界 -- Java 大数据机器学习模型在遥感图像土地利用分类中的优化与应用(199)
本文探讨了Java大数据与机器学习模型在遥感图像土地利用分类中的优化与应用。面对传统方法效率低、精度差的问题,结合Hadoop、Spark与深度学习框架,实现了高效、精准的分类。通过实际案例展示了Java在数据处理、模型融合与参数调优中的强大能力,推动遥感图像分类迈向新高度。
|
7月前
|
PyTorch 调度 算法框架/工具
阿里云PAI-DLC任务Pytorch launch_agent Socket Timeout问题源码分析
DLC任务Pytorch launch_agent Socket Timeout问题源码分析与解决方案
404 18
阿里云PAI-DLC任务Pytorch launch_agent Socket Timeout问题源码分析
|
9月前
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
9月前
|
机器学习/深度学习 人工智能 Java
Java机器学习实战:基于DJL框架的手写数字识别全解析
在人工智能蓬勃发展的今天,Python凭借丰富的生态库(如TensorFlow、PyTorch)成为AI开发的首选语言。但Java作为企业级应用的基石,其在生产环境部署、性能优化和工程化方面的优势不容忽视。DJL(Deep Java Library)的出现完美填补了Java在深度学习领域的空白,它提供了一套统一的API,允许开发者无缝对接主流深度学习框架,将AI模型高效部署到Java生态中。本文将通过手写数字识别的完整流程,深入解析DJL框架的核心机制与应用实践。
596 3
|
9月前
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
10月前
|
数据可视化 API 开发者
R1类模型推理能力评测手把手实战
R1类模型推理能力评测手把手实战
301 2
|
10月前
|
人工智能 自然语言处理 网络安全
基于阿里云 Milvus + DeepSeek + PAI LangStudio 的低成本高精度 RAG 实战
阿里云向量检索服务Milvus版是一款全托管向量检索引擎,并确保与开源Milvus的完全兼容性,支持无缝迁移。它在开源版本的基础上增强了可扩展性,能提供大规模AI向量数据的相似性检索服务。凭借其开箱即用的特性、灵活的扩展能力和全链路监控告警,Milvus云服务成为多样化AI应用场景的理想选择,包括多模态搜索、检索增强生成(RAG)、搜索推荐、内容风险识别等。您还可以利用开源的Attu工具进行可视化操作,进一步促进应用的快速开发和部署。
|
2月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习算法篇】K-近邻算法
K近邻(KNN)是一种基于“物以类聚”思想的监督学习算法,通过计算样本间距离,选取最近K个邻居投票决定类别。支持多种距离度量,如欧式、曼哈顿、余弦相似度等,适用于分类与回归任务。结合Scikit-learn可高效实现,需合理选择K值并进行数据预处理,常用于鸢尾花分类等经典案例。(238字)
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
1295 6