热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:在python中使用KNN算法实现鸢尾花数据集分类

篇首语:本文由编程笔记#小编为大家整理,主要介绍了在python中使用KNN算法实现鸢尾花数据集分类相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了在python中使用 KNN算法实现鸢尾花数据集分类相关的知识,希望对你有一定的参考价值。








在python中使用 KNN算法实现鸢尾花数据集分类


  • 作者介绍
  • 数据集介绍
  • KNN算法介绍
  • 用KNN实现鸢尾花分类



作者介绍

乔冠华,女,西安工程大学电子信息学院,2020级硕士研究生,张宏伟人工智能课题组。
研究方向:机器视觉与人工智能。
电子邮件:1078914066@qq.com


数据集介绍

在这里插入图片描述

Iris鸢尾花数据集: 包含 3 类分别为山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica),共 150 条数据,每类各 50 个数据,每条记录都有 4 项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度,通常可以通过这4个特征预测鸢尾花卉属于哪一品种。

数据集获取:
首先要在自己的Python环境中下载sklearn(进入个人虚拟环境并输入):

pip install sklearn

接着就可以输入下面代码,下载数据集

from sklearn.datasets import load_iris
iris_dataset = load_iris()

Iris数据集包含在sklearn库当中,具体在sklearn\\datasets\\data文件夹下,文件名为iris.csv。其数据格式如下:
在这里插入图片描述
图中第一行数据的意义是:150(数据集中数据的总条数);4(特征值的类别数),即花萼长度、花萼宽度、花瓣长度、花瓣宽度;setosa、versicolor、virginica:三种鸢尾花名。
从第二行开始各列数据的意义:第一列为花萼长度值;第二列为花萼宽度值;第三列为花瓣长度值;第四列为花瓣宽度值;第五列对应是种类(三类鸢尾花分别用0,1,2表示)。


KNN算法介绍

算法介绍:
KNN算法也称K最近邻算法,是有监督学习中最常用的分类算法之一。其算法原理是:给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例, 这K个实例的多数属于某个类,就把该输入实例分类到这个类中。

一句话形容 KNN 算法的思想:物以类聚,人以群分



在 KNN 算法中新样本到邻近样本的距离一般采用的是欧式距离(常用)或者曼哈顿距离


在这里插入图片描述
根据KNN算法的原理,该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待测样本所属的类别,因此,选取合适的邻近样本数K就十分重要了。
K值的影响:
当我们要确定图中绿色待测样本属于红色类别还是蓝色类别时,我们可以通过不同的K值大小得出不同的预测结果。
K=1时,距离绿色样本最近的一个类型是红色,因此判定绿色样本属于红色类。

在这里插入图片描述

K=3时,距离绿色样本最近的3个实例中(圆圈内),有两个是蓝色、一个是红色。则绿色样本属于蓝色类。
在这里插入图片描述
K=5时,距离绿色样本最近的5个实例中(圆圈内),有三个是红色、两个是蓝色。则绿色样本属于红色类。

在这里插入图片描述
K值的选取:



K 值一般是通过交叉验证来确定的(经验规则来说,一般 k 是低于训练样本数的平方根)


交叉验证:本例中通过将原始数据按照一定的比例,如 4:1 ,拆分成训练数据集和测试数据集,K 值从一个较小的值开始选取,逐渐增大,然后计算整个集合的方差,从而确定一个合适的 K 值。
代码参考:链接: https://zhuanlan.zhihu.com/p/61996479.


用KNN实现鸢尾花分类

实现过程:
1)利用slearn库中的load_iris()导入iris数据集 ;
2)使用train_test_split()对数据集进行划分,并进行数据集的随机分割;
3)KNeighborsClassifier()设置邻居数;
4)利用fit()构建基于训练集的模型;
5)使用predict()进行预测;
6)使用score()进行模型评估。

代码实现:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split#用于模型划分
from sklearn.neighbors import KNeighborsClassifier##KNN算法包
import numpy as np
# 载入数据集
iris_dataset = load_iris()
X = iris_dataset['data']#特征
Y = iris_dataset['target']#类别
# 数据划分
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)
#训练阶段
knn = KNeighborsClassifier(n_neighbors=5)#设置邻居数K
knn.fit(X_train, Y_train)#构建基于训练集的模型
#测试评估模型
Y_pred=knn.predict(X_test)
print("Test set score:{:.2f}".format(knn.score(X_test, Y_test)))
# 做出预测,预测花萼长5cm宽2.9cm,花瓣长1cm宽0.2cm的花型
X_new = np.array([[5, 2.9, 1, 0.2]])
prediction = knn.predict(X_new)
print("Prediction:{}".format(prediction))
print("Predicted target name:{}".format(iris_dataset['target_names'][prediction]))

运行结果:
在这里插入图片描述
此外,KNN算法适合对稀有事件进行分类,特别适合于对象具有多个类别标签的多分类问题。但是,当样本不平衡时,如一个类的样本容量很大,而其他样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数,少数类容易分错;需要存储全部训练样本,计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。

参考链接:
深入浅出KNN算法:https://zhuanlan.zhihu.com/p/61341071.
用鸢尾花数据集实现knn分类算法: https://blog.csdn.net/qq_43407321/article/details/102531080.
原生Python实现KNN分类算法: https://www.huaweicloud.com/articles/f162bc2162a6052a787bf912f64d01fb.html.






推荐阅读
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 服务器上的操作系统有哪些,如何选择适合的操作系统?
    本文介绍了服务器上常见的操作系统,包括系统盘镜像、数据盘镜像和整机镜像的数量。同时,还介绍了共享镜像的限制和使用方法。此外,还提供了关于华为云服务的帮助中心,其中包括产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题和视频帮助等技术文档。对于裸金属服务器的远程登录,本文介绍了使用密钥对登录的方法,并提供了部分操作系统配置示例。最后,还提到了SUSE云耀云服务器的特点和快速搭建方法。 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了SpringCloudRibbon部分源码相关的知识,希望对你有一定的参考价值。1:ribbon是提供通过servi ... [详细]
author-avatar
气质未央若
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有