Question about kNN Algorithm

Posted 赵大寳Note

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Question about kNN Algorithm相关的知识,希望对你有一定的参考价值。

kNN算法中K表示最接近自己的K个数据样本

例如下图绿色的圆形是我们待分类的数据。根据kNN算法:

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

 技术分享

 

当遇到下列这种情况:

  • 如果K=3,那么离绿色点最近的有2个红色三角形和1个蓝色的正方形,这3个点投票,于是绿色的这个待分类点属于红色的三角形。
  • 如果K=4,那么离绿色点最近的有2个红色三角形和2个蓝色的正方形,这4个点投票,那么绿色的这个待分类点应该属于哪一个类型呢?

 技术分享

 

Python代码试验:构造四个四个点A(1,1.1)、B(1,1)、C(0,0)、D(0,0.1)

def createDataSet():

    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])

    labels = [‘A‘,‘B‘,‘C‘,‘D‘]

return group, labels

 技术分享

kNN待分类数据点(0.5,0.5),与各邻近数据点的欧氏距离的平方分别为:

Distan(A)=0.25+0.36=0.61

Distan(B)=0.5

Distan(C)=0.5

Distan(D)=0.25+0.16=0.41

当k=1,最邻一点只有D,预计推荐结果为D

 技术分享

当k=2,待测点与B、C点距离相等,实际kNN推荐结果为B

 技术分享

当k=3,相邻3点有B、C、D,最近为D,实际kNN推荐结果为C

 技术分享

当k=4,相邻4点有A、B、C、D,最近为D,最远为A,实际kNN推荐结果为A

 技术分享

 问题总结:

在kNN算法中,当k取值为类别组数的偶数时,如何得出推荐结果?

kNN分类算法:

def classify0(inX, dataSet, labels, k):

    dataSetSize = dataSet.shape[0]

    diffMat = tile(inX, (dataSetSize,1)) - dataSet

    sqDiffMat = diffMat**2

    sqDistances = sqDiffMat.sum(axis=1)

    distances = sqDistances**0.5

    sortedDistIndicies = distances.argsort()    

    classCount={}         

    for i in range(k):

        voteIlabel = labels[sortedDistIndicies[i]]

        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1

    sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)

    return sortedClassCount[0][0]

以上是关于Question about kNN Algorithm的主要内容,如果未能解决你的问题,请参考以下文章

如何解读「量子计算应对大数据挑战:中国科大首次实现量子机器学习算法」?——是KNN算法吗?

KNN分类器最近邻分类KD树KNN分类的最佳K值基于半径的最近邻分类器KNN多分类KNN多标签分类KNN多输出分类KNN分类的优缺点

KNN算法及KNN的优化算法-加权KNN

分类预测 | MATLAB实现KNN分类预测(SA-KNNGOA-KNN对比)

knn是啥意思

knn算法如何选择一个最佳k值