【学习笔记】K近邻归类算法
#-*-coding:utf-8-*-__author__='Ghostviper'"""K近邻归类算法"""fromnumpyimport*importoperatordefcreateDataset():group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])labels=['A','A','B','B']returngroup,labelsdefclassify0(inX,dataSet,labels,k):#shape获得数据集中数组的大小dataSetSize=dataSet.shape[0]#根据输入的元素复制矩阵并与已知数据集矩阵做差diffMat=tile(inX,(dataSetSize,1))-dataSetsqDiffMat=diffMat**2sqDistances=sqDiffMat.sum(axis=1)distances=sqDistances**0.5sortedDistIndicies=distances.argsort()classCount={}foriinrange(k):voteIlabel=labels[sortedDistIndicies[i]]classCount[voteIlabel]=classCount.get(voteIlabel,0)+1sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)returnsortedClassCount[0][0]if__name__=="__main__":group,labels=createDataset()printclassify0([1,1],group,labels,3)
注:计算两个向量点xA和xB之间的距离利用欧式距离公式:
算法步骤:
计算已知类别数据集中点与当前点之间的距离
按照距离递增排序
选取与当前点距离最小的k个点
确定前k个点所在类别的出现频率
返回前k个点出现的频率最高的类别作为当前点的预测分类
算法适用范围:数值型和标称型
优点:精度高、对异常值不敏感、无数据输入假定
缺点:计算复杂度高、空间复杂度高
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。