1. 程式人生 > >k-近鄰演算法程式碼註釋(一)

k-近鄰演算法程式碼註釋(一)

from numpy import *
import operator

def createDataSet():
         group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
         labels = ['A','A','B','B']
         return group,labels
def classify0(inX,dataSet,labels,k):
         dataSetSize = dataSet.shape[0]
         diffMat = tile(inX(dataSetSize,1)) - dataSet       //將inX複製為4
行,使inX成為與dataSet //一樣的4行一列矩陣,並減去dataSet,形 //成(Xa-Xb),(Ya-Yb)的形式 //平方(Xa-Xb),(Ya-Yb) sqDiffMat = diffMat**2 //(Xa-Xb)^2+(Ya-Yb)^2,axis=1為矩陣元素在列方向上相加 sqDistances = sqDiffMat.sum(axis=1) //對上一步結果開平方,得到歐氏距離 distances = sqDistances**0.5
//對元素從小到大排序,該方法返回的是元素的下角標 sortedDistIndicies = distances.argsort() //定義空字典 classCount = {} //在前k個元素內操作 for i in range(k): //取每個元素對應的類別 voteIlabel = labels[sortedDistIndicies[i]] //字典中每個item為[key:value]形式,統計key出現的次數,即value的值,每出現一次value+1
classCount[voteIlabel] = classCount.get(voteIlabel,0)+1 //將字典中的item按第二個元素的大小對元組進行排序,此處為從大到小 sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True) //取最大值即為程式認為最可能正確的分類結果 return sortedClassCount[0][0]