机器学习 鸢尾花分类的原理和实现(一)

本文介绍了鸢尾花数据集在机器学习中的应用,特别是使用逻辑回归进行分类。内容包括数据预处理、模型训练、测试与评估。通过Python的sklearn库加载数据,讨论数据集的获取、描述和可视化,并展示了如何使用Seaborn进行数据可视化。此外,还提及了数据预处理、Pandas和Pyplot在数据分析中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器学习 鸢尾花分类的原理和实现(一)

前言: 鸢尾花数据集是机器学习中的经典小规模数据集。通过查阅资料和视频进行学习,将整个实验的学习心得和实验过程分享,希望对喜爱机器学习并入门的新手提供帮助,同时也鞭策自己稳步向前。本文主要分为“实验前期的知识储备,实验过程的重要实现,实验结束的学习总结”三部分,限于文章篇幅,后两部分内容将在后边的博文中更新…


实验要求:利用逻辑回归进行鸢尾花的分类

实验目的

  1. 遵循并理解完整的机器学习过程
  2. 对机器学习原理和相关术语有基本的了解
  3. 了解评估机器学习模型的基本过程

实验步骤

  1. 数据预处理:原始数据集中标签为字符串,需将其装换成数字。
  2. 设置学习率:利用训练集训练相关模型。
  3. 在测试集上进行测试:计算模型准确度。

工具/平台
工具:python、java等语言。
建议:可使用TensorFlow(或Pytorch)等框架。

要求
1)可运行代码+运行结果;
2)成功率计算方式:性别预测正确的鸢尾花数量/所有测试集的数据数量,要求预测成功率在70%以上;

参考资源
代码:logistic_regression.py
数据集:数据包括花萼长度、花萼宽度、花瓣长度和花瓣宽度等5个属性。
训练集:iris_train.data
测试集:iris_test.data


一、实验前期的知识储备

鸢尾花数据集介绍

lris 数据集是常用的分类实验数据集,由Fisher在1936年收集整理,包含四个特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度,特征值都为正浮点数,单位为厘米。目标值为鸢尾花的三个分类:山鸢尾、杂色鸢尾,维吉尼亚鸢尾。

scikit-learn数据集API的使用

sklearn 包不仅有很多机器学习的算法,也自带了许多经典的数据集,鸢尾花数据集就是其中之一
sklearn.database:加载流行数据集:
datasets.load_():获取小规模数据集,数据包含在datasets里
datasets.fetch_
(data.home=None):获取大规模数据集,需要从网络上下载,函数的第一个参数是data_done,表示数据集下载的目录,默认是-/scikit_learn_data/

sklearn提供的常用数据集

a. 自带的小规模数据集:鸢尾花数据集,手写数字数据集等
b. 可在线下载的数据集(一般规模较大)
c. 计算机生成的数据集
d. svmlight/libsvm格式的数据集:sklearn.datasets.load_svmlight_file(…)
e. data.org在线下载获取的数据集:sklearn.datasets.fetch_mldata(…)
更多详细的介绍请点击这里查阅了解

sklearn小规模数据集的获取

from sklearn.datasets.load._iris():加载并返回鸢尾花数据集:
在这里插入图片描述
在pip3 install那个命令时,已经安装好,选择即可,可点击参考我的上一篇分享
请添加图片描述
在这里插入图片描述

array里边的四列分别对应的是花瓣的长度、宽度、花萼的长度、宽度

sklearn大规模数据集的获取

sklearn提供了该数据的接口:sklearn.datasets.fetch_20newsgroups
根据sklearn文档的描述,此方法的参数设置如下:

 fetch_20newsgroups(data_home=None, # 文件下载的路径
                   subset='train', # 加载哪一部分数据集 train/test,表示获取到的数据集类型
                   categories=None, # 选取哪一类数据集[类别列表],默认20类
                   shuffle=True,  # 将数据集随机排序
                   random_state=42, # 随机数生成器
                   remove=(), # ('headers','footers','quotes') 去除部分文本
                   download_if_missing=True # 如果没有下载过,重新下载
                   )

下边是获取新闻数据集合的演示:

在这里插入图片描述

sklearn数据集返回值

load 和 fetch 返回的数据类型 datasets.base.Bunch (字典格式)
(Bunch 虽然是字典格式,但可以通过 ‘点’ 的形式把属性点出来)
data:特征数据数组(特征值输入),是【n_samples*n_feature】的二维数组
target:标签数组(目标输出),是n_samples的以为数组
feature_names:特征名称
target_names:标签名称
DESCR:数据描述

from sklearn.datasets import load_iris,fetch_20newsgroups
# 数据集的获取
# 小数据集的获取
iris=load_iris()
# 鸢尾花数据集的返回值
print(iris)
# 鸢尾花的特征值:
print("数据集中特征值是:\n",iris["data"])
# 鸢尾花的目标值:
print("数据集中目标值是:\n",iris.target)
# 鸢尾花特征的名字:
print("数据集中特征值名字是:\n",iris.feature_names)
# 鸢尾花目标值的名字:
print("数据集中目标值名字是:\n",iris.target_names)
# 鸢尾花数据集的描述:
print("数据集的描述:\n",iris.DESCR)

如下图所示

在这里插入图片描述

鸢尾花数据可视化

通过创建一些图,以查看不同类别是如何通过特征进行区分的。在理想情况下,标签类将由一个或多个特征对完美分割,在现实世界中,这种理想情况会很少发生。

seaborn介绍

Seaborn是基于matplotlib的图形可视化python包,它在matplotlib的基础上进行了更高级的API封装,能高度兼容numpy与pandas数据结构以及scipy与statsmodels等统计模式。它提供了一种高度交互式界面,同时对于配色上也更加舒服,图标元素的样式也更加细腻,便于用户能够更容易做出各种有吸引力的统计图表。
与matplotlib的关系:使用matplotlib能制作具有更多特色的图,应该把Seaborn视为matplotlib的补充,而不是替代物。

seaborn安装:

pip3 install seaborn,大家也可点击此处进入文章参考,我的可能anaconda\lib已经有了,截图如下:
在这里插入图片描述
seaborn.Implot()是一个非常有用的方法,它会在绘制二进制散点图时,自动完成回归拟合,里边参数x,y分别代表横纵坐标的列名示例如下:

sns.lmplot(x='total_bill', y='tip', #分别代表横纵坐标的列名
           hue='species',#按照花的类别分类显示
           data=tips, #关联到数据集
           palette='Set1',
           ci=70,  # 误差值
           size=5,  # 图表大小
           markers=['+', 'o']  # 点样式
           )

关于seaborn可视化的相关技巧还有很多,详细请查看知乎上一位博主写的这个系列,我举一例进行演示,代码和截图如下:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
iris = pd.read_csv('iris.csv') #读取iris数据集
sns.pairplot(iris, hue="species") #绘图
plt.show() #显示图片

在这里插入图片描述
在这里插入图片描述
可能因为网络的问题访问不了数据集,会导致报错。建议直接下载好了用,我的iris.csv数据集也会在文末分享


下边再通过另一绘制实例进一步描述

在这里插入图片描述
在这里插入图片描述

补充说明:

核心代码:

from sklearn.datasets import load_iris,fetch_20newsgroups
#库的导入
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
iris=load_iris()
# 数据可视化
# 数据类型转化,把数据用DataFrame存储
iris_data=pd.DataFrame(data=iris.data,columns=['Sepal_Length','Sepal_Width','Petal_Length','Petal_Width'])
iris_data["target"]=iris.target
def iris_plot(data,col1,col2):
    sns.lmplot(x=col1,y=col2,data=data,hue="target")
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    plt.title("鸢尾花数据展示")
    plt.xlabel(col1)
    plt.ylabel(col2)
    plt.show()
iris_plot(iris_data,'Sepal_Length','Petal_Width')

什么是Pandas

(详细了解请点击查看博客)
Pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
Pandas纳入了大量库和一些标准的数据模型,提供了大量能使我们快速便捷地处理数据的函数和方法。
主要包含两种数据类型:Series和DataFrame:

  1. Series可以理解为dict的升级版本,主数组存放numpy数据类型,index数据存放索引
  2. DataFrame相当于多维的Series,有两个索引数组,分别是行索引和列索引,可以理解成Series组成的字典

什么是Pyplot

详细参考博文Python深度学习入门之plt画图工具基础使用

plt.title(“鸢尾花数据展示”)无法显示中文的解决办法

#在 plt.title("鸢尾花数据展示")前边加代码:
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False

不加fit_reg=False的话,显示时自动绘制直线,即默认为True,线性拟合,如下图所示

在这里插入图片描述


本文资源可通过以下链接免费下载【 2022.10 更新 】

https://download.youkuaiyun.com/download/qq_40506723/27333865

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白白净净吃了没病

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值