首页 > 编程语言 >Python实战—基于KNN算法尾鸢花数据集分类

Python实战—基于KNN算法尾鸢花数据集分类

时间:2022-10-14 15:36:20浏览次数:52  
标签:KNN index Python 数据 元组 鸢花 label data


Python实战—基于KNN算法尾鸢花数据集分类_元组


Python实战—基于KNN算法尾鸢花数据集分类_元组_02

KNN模型理论


K最近邻分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。

KNN方法虽然从原理上依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。


Python实战—基于KNN算法尾鸢花数据集分类_元组_02

KNN算法流程


1. 准备数据,对数据进行预处理;

2. 选用合适的数据结构存储训练数据和测试元组;

3. 设定参数;

4.维护一个大小为k的的按距离由大到小的优先级队列,用于存储最近邻训练元组。随机从训练元组中选取k个元组作为初始的最近邻元组,分别计算测试元组到这k个元组的距离,将训练元组标号和距离存入优先级队列;

5. 遍历训练元组集,计算当前训练元组与测试元组的距离,将所得距离L 与优先级队列中的最大距离Lmax;

6. 进行比较。若L>=Lmax,则舍弃该元组,遍历下一个元组。若L < Lmax,删除优先级队列中最大距离的元组,将当前训练元组存入优先级队列;

7. 遍历完毕,计算优先级队列中k 个元组的多数类,并将其作为测试元组的类别;

8. 测试元组集测试完毕后计算误差率,继续设定不同的k值重新进行训练,最后取误差率最小的k 值。


Python实战—基于KNN算法尾鸢花数据集分类_元组_02

数据集准备


Iris(鸢尾花)数据集是多重变量分析的数据集。数据集包含150行数据,分为3类,每类50行数据。每行数据包含4个属性:Sepal Length(花萼长度)、Sepal Width(花萼宽度)、Petal Length(花瓣长度)和Petal Width(花瓣宽度)。可通过这4个属性预测鸢尾花卉属于三个种类(Setosa,Versicolour,Virginica)中的哪一类。


Python实战—基于KNN算法尾鸢花数据集分类_元组_02

数据预处理







​import pandas as​​​​df = pd.read_csv('iris.csv')# 读入数据​​​​df.columns = ['Sepal length', 'Sepal width', 'Petal length', 'Petal width', 'Species']​​​
​​​df.head()# 查看前5条数据​

数据集结果如下图所示:

Python实战—基于KNN算法尾鸢花数据集分类_数据_06


​df.describe()# 查看数据信息​

对于数据集做描述,结果如下所示:

Python实战—基于KNN算法尾鸢花数据集分类_数据集_07


Python实战—基于KNN算法尾鸢花数据集分类_元组_02

K-最近邻算法





​import numpy as np #使用K-近邻算法对鸢尾花数据进行交叉验证​​​​from sklearn.datasets import​​​​import matplotlib.pyplot as​



​#下载数据集​​​​iris = load_iris()​​​​data = iris.data[:,:2]​​​​target = iris.target​​​​print (data.shape)#(150,2)​​​​print (data[:10])​​​​print (target[:10])​​​​label = np.array(target)​​​​index_0 = np.where(label==0)​​​​plt.scatter(data[index_0,0],data[index_0,1],marker='x',color = 'b',label = '0',s = 15)​​​
​​​index_1 =np.where(label==1)​​​​plt.scatter(data[index_1,0],data[index_1,1],marker='o',color = 'r',label = '1',s = 15)​​​
​​​index_2 =np.where(label==2)​​​​plt.scatter(data[index_2,0],data[index_2,1],marker='s',color = 'g',label = '2',s = 15)​​​
​​​plt.xlabel('X1')​​​​plt.ylabel('X2')​​​​plt.legend(loc = 'upper left')​​​
​​​plt.show()​

Python实战—基于KNN算法尾鸢花数据集分类_数据_09

由图像可以看出,借助于KNN算法,可以将150个Iris(鸢尾花)数据样本分为3类,分类结果如上所示,分别分为0,1,2这3类,分类结果明显。

Python实战—基于KNN算法尾鸢花数据集分类_数据_10

标签:KNN,index,Python,数据,元组,鸢花,label,data
From: https://blog.51cto.com/u_15828536/5757008

相关文章

  • 使用Python同时读取和写入同一个文件
    前言在平时想要使用python修改文件部分内容的时候,常用的做法是使用open函数(默认模式为read)打开一个文件,然后关闭文件,然后再使用write模式去写入更新的内容,最后关闭。这......
  • Python实战—自行车租赁数据分析
    本节选取自行车的租赁数据,利用numpy、pandas、matplotlib三个库,数据清洗后,做数据分析,研究时间段与自行车租赁的关系。数据来源  本节以自行车的租赁数据为例,数据来源于网......
  • python实现批量下载配图王的美女图片
    importrequestsimportrefrombs4importBeautifulSoupimportrandom#生成随机数#foriinrange(5):#print(random.randrange(100000000))headers={......
  • 【python】准点跑路人必备小程序~ 不信你用不到
    前言嗨喽,大家好呀~这里是爱看美女的茜茜呐又到了学Python时刻~有时候下班~忙着跑路,忘记关电脑,逮到了会被老板扣工资!!怎么办?python带你制做一个小程序,到点自动关机~再......
  • Python实战—单词量评估
    今天,2019年上半年的四六级成绩出来了你过了吗?点击链接进行成绩查询​​http://cet.neea.edu.cn/cet/​​对于四六级的成绩总是几家欢乐几家愁如果这次没过下次一定要加油鸭!......
  • python pip下载包升级pip install --upgrade
    解决:如果使用pip下载命令, 下载失败 提示  根据提示:输入python-mpipinstall--upgradepip 升级本本,但是执行pipinstall--upgradepip还是报这个错误......
  • linux 安装python
    wgethttps://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgztarvxzfPython-2.7.18.tgzcdPython-2.7.18yuminstallgccg++make./configuremake&&......
  • Python 中isinstance的用法
    isinstance()函数用来判断一个对象是否是一个已知的类型.isinstance(object,classinfo)类似type().isinstance()与type()区别:type()不会认为子类是一种父类类型,不......
  • Python中用With open as 实现对文件的操作
    withopenasf在Python中用来读写文件(夹)。基本写法如下:withopen(文件名,模式)asf:f.write(内容)#写操作例:withopen('这个文章.txt,'w')asf:f.write('你好')with......
  • Python 函数为什么会默认返回 None?
    Python有一项默认的做法,很多编程语言都没有——它的所有函数都会有一个返回值,不管你有没有写return语句。本文出自“​​Python为什么​​​”系列,在正式开始之前,我们就......