Python实现KNN算法附源码视

2022/7/9 来源:不详

本篇我们将讨论一种广泛使用的分类技术,称为k邻近算法,或者说K最近邻(KNN,k-NearestNeighbor)。所谓K最近邻,是k个最近的邻居的意思,即每个样本都可以用它最接近的k个邻居来代表。

01

KNN算法思想

如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。KNN方法在类别决策时,只与极少量的相邻样本有关。

由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。

02

KNN算法的决策过程

下图中有两种类型的样本数据,一类是蓝色的正方形,另一类是红色的三角形,中间那个绿色的圆形是待分类数据:

▍近邻分类图

如果K=3,那么离绿色点最近的有2个红色的三角形和1个蓝色的正方形,这三个点进行投票,于是绿色的待分类点就属于红色的三角形。而如果K=5,那么离绿色点最近的有2个红色的三角形和3个蓝色的正方形,这五个点进行投票,于是绿色的待分类点就属于蓝色的正方形。

KNN算法不仅可以用于分类,还可以用于回归。通过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。更有用的方法是将不同距离的邻居对该样本产生的影响给予不同的权值(weight),如权值与距离成反比。

下面用代码来实现KNN算法的应用。本次用到的数据是经典的Iris数据集。该数据集有条鸢尾花数据样本,并且均匀分布在3个不同的亚种:每个数据样本被4个不同的花瓣、花萼的形状特征所描述。

#读取数据fromsklearn.datasetsimportload_irisdata=load_iris()#查看数据大小data.data.shape(,4)#查看数据说明print(data.DESCR)Notes-----DataSetCharacteristics::NumberofInstances:(50ineachofthreeclasses):NumberofAttributes:4numeric,predictiveattributesandtheclass:AttributeInformation:-sepallengthincm-sepalwidthincm-petallengthincm-petalwidthincm-class:-Iris-Setosa-Iris-Versicolour-Iris-Virginica:SummaryStatistics:======================================================MinMaxMeanSDClassCorrelation======================================================sepallength:4.37.95...sepalwidth:2.04.43..43-0.petallength:1.06.93...(high!)petalwidth:0.12.51...(high!)======================================================:MissingAttributeValues:None:ClassDistribution:33.3%foreachof3classes.:Creator:R.A.Fisher:Donor:MichaelMarshall(MARSHALL%PLU

io.arc.nasa.gov):Date:July,ThisisacopyofUCIMLirisdatasets.

转载请注明:
http://www.3g-city.net/gjyyf/734.html
  • 上一篇文章:

  • 下一篇文章:
    • 没有热点文章
    • 没有推荐文章
    网站首页 版权信息 发布优势 合作伙伴 隐私保护 服务条款 网站地图 网站简介

    温馨提示:本站信息不能作为诊断和医疗依据
    版权所有2014-2024 冀ICP备19027023号-6
    今天是: