实验一:鸢尾花数据集分类「建议收藏」

实验一:鸢尾花数据集分类一、问题描述二、数据集分析Iris鸢尾花数据集内包含3种类别,分别为山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica)。 数据集共150条记录,每类各50个数据,每条记录有花萼长度、花萼宽度、花瓣长度、花瓣宽度4项特征,通过这4个特征预测鸢尾花卉属于哪一品种。 iris数据集包含在sklearn库当中,具体在sklearn\datasets\data文件夹下,文件名为iris.c.

大家好,又见面了,我是你们的朋友全栈君。

实验一:鸢尾花数据集分类

一、问题描述

利用机器学习算法构建模型,根据鸢尾花的花萼和花瓣大小,区分鸢尾花的品种。实现一个基础的三分类问题。

实验一:鸢尾花数据集分类「建议收藏」实验一:鸢尾花数据集分类「建议收藏」

二、数据集分析

  • Iris 鸢尾花数据集内包含 3 种类别,分别为山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica)。
  • 数据集共 150 条记录,每类各 50 个数据,每条记录有花萼长度、花萼宽度、花瓣长度、花瓣宽度4项特征,通过这4个特征预测鸢尾花卉属于哪一品种。
  • iris数据集包含在sklearn库当中,具体在sklearn\datasets\data文件夹下,文件名为iris.csv。
  • 通常数据文件存储在\Python36\Lib\site-packages\sklearn\datasets\data\iris.csv。
  • 打开iris.csv,数据格式如下:
  • 实验一:鸢尾花数据集分类「建议收藏」
  • 第一行数据意义为:
    150:数据集中数据的总条数
    4:特征值的类别数,即花萼长度、花萼宽度、花瓣长度、花瓣宽度。
    setosa、versicolor、virginica:三种鸢尾花名
  • 从第二行及以下数据的意义为:
    第一列为花萼长度值
    第二列为花萼宽度值
    第三列为花瓣长度值
    第四列为花瓣宽度值
    第五列对应是种类(三类鸢尾花分别用0,1,2表示)

三、代码实现

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

iris_data = load_iris()
# 该函数返回一个Bunch对象,它直接继承自Dict类,与字典类似,由键值对组成。
# 可以使用bunch.keys(),bunch.values(),bunch.items()等方法。
print(type(iris_data)) 
# data里面是花萼长度、花萼宽度、花瓣长度、花瓣宽度的测量数据,格式为 NumPy数组
print(iris_data['data'])    # 花的样本数据
print("花的样本数量:{}".format(iris_data['data'].shape))   
print("花的前5个样本数据:{}".format(iris_data['data'][:5])) 

# 0 代表 setosa, 1 代表 versicolor,2 代表 virginica
print(iris_data['target'])  # 类别
print(iris_data['target_names'])   # 花的品种

# 构造训练数据和测试数据
X_train,X_test,y_train,y_test = train_test_split(\
    iris_data['data'],iris_data['target'],random_state=0)
print("训练样本数据的大小:{}".format(X_train.shape))
print("训练样本标签的大小:{}".format(y_train.shape))
print("测试样本数据的大小:{}".format(X_test.shape))
print("测试样本标签的大小:{}".format(y_test.shape))

# 构造KNN模型
knn = KNeighborsClassifier(n_neighbors=1)
# knn = KNeighborsClassifier(n_neighbors=3)

# 训练模型
knn.fit(X_train,y_train)
y_pred = knn.predict(X_test)

# 评估模型
print("模型精度:{:.2f}".format(np.mean(y_pred==y_test)))
print("模型精度:{:.2f}".format(knn.score(X_test,y_test)))

# 做出预测
X_new = np.array([[1.1,5.9,1.4,2.2]])
prediction = knn.predict(X_new)
print("预测的目标类别是:{}".format(prediction))
print("预测的目标类别花名是:{}".format(iris_data['target_names'][prediction]))

补充说明:

  • 样本和特征:机器学习中每个个体叫做样本,其属性叫做特征。在本例中,每朵鸢尾花就是一个样本,每朵鸢尾花的花萼长度、宽度、花瓣长度、宽带就是特征。
  • 训练数据和测试数据
    • 训练数据:用于构建模型。

    • 测试数据:用于评估模型性能。
    • 利用scikit-learn中的train_test_split函数将原始数据集分为训练数据和测试数据,75%的数据用作训练集,25%用作测试集。
    • scikit-learn中的数据通常用大写的X表示,标签用小写的y表示,f(X)= y, X是函数的输入,是一个二维矩阵,小写的y是输出的一维数组。
    • 该函数需要设置random_state,给其赋一个值,当多次运行此段代码能够得到完全一样的结果。若不设置此参数则会随机选择一个种子,执行结果也会因此而不同了。虽然可以对random_state进行调参,但是调参后在训练集上表现好的模型未必在陌生训练集上表现好,所以一般会随便选取一个random_state的值作为参数。
    • predict方法进行预测的时候,该函数的输入数据必须是二维数组,因此首先将建立的一维数组转换为二维数组的一行。
    • KNN对象的score方法用于计算测试集的精度。

四、KNN算法

实验一:鸢尾花数据集分类「建议收藏」KNN,全称为K Nearest Neighbors,又叫K最近邻算法,是机器学习算法中最简单的分类算法之一。其核心思想是,如果一个样本在特征空间中的K个最相邻的样本中的大多数属于某一类别,则该样本也属于这个类别,并具有这个类别上样本的特性。K就是最近的样本的个数,其取值至关重要,关系最终的分类结果。

实验一:鸢尾花数据集分类「建议收藏」实验一:鸢尾花数据集分类「建议收藏」

如上图所示,绿色的点为要进行分类的点。如果K=3,与之最近的三个点中,蓝色三角形多,那么绿色的点被归为蓝色三角形一类;如果K=5,与之最近的五个点中,红色圆形多,那么绿色的点被归为红色圆形一类。从此可以得出,K值的选取将影响分类结果。

另外一个重要的因素是点距离的计算。常见的距离度量方式有曼哈顿距离、欧式距离等等。通常KNN采用欧式距离。以二维平面为例,二维空间中两个点的欧式距离计算公示如下:

实验一:鸢尾花数据集分类「建议收藏」

将其拓展到多维空间,公示则变为如下:

实验一:鸢尾花数据集分类「建议收藏」

KNN简单的将预测点与所有点距离进行计算后排序,选出前面K个值查看类别,类别多的自然归类。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125624.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • nginx开源_NGINX反向代理

    nginx开源_NGINX反向代理Nginx源码分析-初探Nginx的架构 Nginx源码分析-基础数据结构篇-内存池ngx_palloc.c Nginx源码分析-基础数据结构篇-数组结构ngx_array.c Nginx源码分析-基础数据结构篇-缓冲区结构ngx_buf.c Nginx源码分析-基础数据结构篇-双向链表结构ngx_queue.c Nginx源码分析……

    2022年8月13日
    5
  • 小波变换原理_小波变换的缺点

    小波变换原理_小波变换的缺点https://www.cnblogs.com/warmbeast/p/7809286.html从傅里叶变换到小波变换,并不是一个完全抽象的东西,可以讲得很形象。小波变换有着明确的物理意义,如果我们从它的提出时所面对的问题看起,可以整理出非常清晰的思路。下面就按照傅里叶–>短时傅里叶变换–>小波变换的顺序,讲一下为什么会出现小波这个东西、小波究竟是怎样的思路。傅里叶变换关于傅…

    2025年6月21日
    3
  • 微软modern.IE网站,多版本IE免费测试工具集建议收藏

    微软今天发布了modern.IE,这是一系列免费的、针对Web开发者的测试工具和资源集合网站,微软希望以此来帮助开发者更轻松地实现跨IE和其他现代浏览器、跨设备的兼容性,其他还有代码检测工具、标

    2021年12月21日
    45
  • 图像特征点匹配算法_bf模式匹配算法

    图像特征点匹配算法_bf模式匹配算法现阶段,基于特征点匹配的算法,如SIFT,SURF等著名匹配算法,都是基于一个尺度空间来进行描述的,那么了解尺度空间是什么将是全面了解特征点匹配的关键性基础知识。网上基于尺度空间的基础知识有很少的介绍,所以本章将主要介绍尺度空间,我们将从最底层了解怎么提取特征点,为啥用这种特征点具有较强的鲁棒性。

    2022年10月14日
    4
  • php开发在线客服系统_app内在线客服

    php开发在线客服系统_app内在线客服  在本节中,我们将简要讨论通过PHP在线客服系统源码传输数据的数据传输方法。我们可以发送普通消息或基于时间表的消息。我们将逐一介绍这两种基本类型的消息传递。  完整源码:zxkfym.top  Azure服务总线:MicrosoftAzure服务总线是一种完全托管的云上企业集成消息传递服务,用于将云中运行的任何应用程序、设备和服务连接到任何其他应用程序或服务。该平台充当云上和任何设备上的应用程序的消息传递骨干。  它是如何工作的?使用消息在不同的应用程序和服务之间传输数据。消息为二进制格

    2025年11月30日
    13
  • WiFi(6)和5G的区别及比对[通俗易懂]

    WiFi(6)和5G的区别及比对[通俗易懂]5G是蜂窝数字移动通信技术,既可用于广域高速移动通信,又可用于室内无线上网,具有传输速率高、时延小、并发能力强等优点,但系统复杂、成本高。WiFi6是无线接入技术,主要用于室内无线终端上网,具有传输速率高、系统简单、成本低等优点,但不适用于高速移动通信。5G和WiFi6具有以下特点:(1)5G上行峰值传输速率达10Gbit/s,下行峰值传输速率达20Gbit/s。WIFI6在80MHz带宽下,单条空间流的峰值速率为600Mbit/s,在带宽为160MHz、8条空间流的情况下,峰值速率达9.

    2022年7月20日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号