Knn算法实现鸢尾花分类

如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 看下面这幅图:
在这里插入图片描述

KNN的算法过程是是这样的: 从上图中我们可以看到,图中的数据集是良好的数据,即都打好了label,一类是蓝色的正方形,一类是红色的三角形,那个绿色的圆形是我们待分类的数据。 如果K=3,那么离绿色点最近的有2个红色三角形和1个蓝色的正方形,这3个点投票,于是绿色的这个待分类点属于红色的三角形 如果K=5,那么离绿色点最近的有2个红色三角形和3个蓝色的正方形,这5个点投票,于是绿色的这个待分类点属于蓝色的正方形 我们可以看到,KNN本质是基于一种数据统计的方法!其实很多机器学习算法也是基于数据统计的。 KNN是一种memory-based learning,也叫instance-based learning,属于lazy learning。即它没有明显的前期训练过程,而是程序开始运行时,把数据集加载到内存后,不需要进行训练,就可以开始分类了。 具体是每次来一个未知的样本点,就在附近找K个最近的点进行投票。

鸢尾花实验我们要是需要根据上述原理来实现,首先给定一定的数据进行分类,然后我们给给定我们需要分类的数据,通过欧式距离帮助我们算得需要分类的数据属于哪一类别,Knn算法中的K是指离需要测试数据最近的选取已经被分类的数据(听起来可能有点拗口哈),根据上述图来书就是这样的当我的K=3时就是选取小的实线圆里的被分好类的数据,因此来分类绿色的1点,这样分类绿色的点属于红色三角形,当K=5时则是虚线圆,则绿色点背分为蓝色正方形。因此K的选取是特别重要的。

#导入numpy库,并构造训练数据X 和y。
import numpy as np
import matplotlib.pyplot as plt
#鸢尾花数据集
X=np.array([[5.1,3.5,1.4,0.2],[-4.9,3.0,1.4,0.2],[4.7,3.2,1.3,0.2],[5.4,3.9,1.7,0.4],[4.6,3.4,1.4,0.3],[1.9,3.1,1.5,0.1],[4.3,3.0,1.1,0.1],
            [4.8,3.0,1.4,0.1],[5.7,4.4,1.5,0.4],[5.7,3.8,1.7,0.3],[7.0,3.2,4.7,1.4],[5.5,2.3,4.0,1.3],[5.9,3.0,4.2,1.5],[6.3,2.5,4.9,1.5],
            [5.6,3.0,4.2,1.5],[5.4,3.0,4.5,1.5],[6.1,2.9,4.6,1.4],[5.1,2.5,3.0,1.1],[6.7,3.1,4.7,1.5],[6.2,2.2,4.5,1.5],[6.3,3.3,6.0,2.5],
            [7.3,2.9,6.3,1.8],[7.7,3.8,6.7,2.2],[6.1,3.0,4.9,1.8],[5.6,2.8,6.7,2.0],[6.4,3.2,5.3,1.9],[6.3,3.3,6.0,2.5],[7.2,3.2,6.0,1.8],
            [6.4,2.7,5.3,1.9],[7.7,2.6,6.9,2.3]])  
y=np.array(['Iris_Setosa','Iris_Setosa','Iris_Setosa','Iris_Setosa','Iris_Setosa','Iris_Setosa','Iris_Setosa','Iris_Setosa','Iris_Setosa',
            'Iris_Setosa','Iris_Versicolour','Iris_Versicolour','Iris_Versicolour','Iris_Versicolour','Iris_Versicolour','Iris_Versicolour',
            'Iris_Versicolour','Iris_Versicolour','Iris_Versicolour','Iris_Versicolour','Iris_Virginica','Iris_Virginica','Iris_Virginica',
            'Iris_Virginica','Iris_Virginica','Iris_Virginica','Iris_Virginica','Iris_Virginica','Iris_Virginica','Iris_Virginica'])
#使用import 语句导入K 近邻分类器。
from sklearn.neighbors import KNeighborsClassifier
#参数n_neighbors设置为3,即使用最近的3个邻居作为分类的依据,也就是k的值选取,其他参数保持默认值,并将创建好的实例赋给变量ngb。
knn=KNeighborsClassifier(n_neighbors=3)
#调用fit() 函数,将训练数据X 和标签y 送入分类器进行学习。
knn.fit(X,y)
#调用predict() 函数,对未知分类样本[1.1] 分类,可以直接并将需要分类的数据构造为数组形式作为参数传入,得到分类标签作为返回值。
print(knn.predict([[4.9,2.5,5.8,1.8],[4.8,3.1,1.6,0.2],[6.4,2.8,5.6,2.1]]))  #待测数据
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值