knn代码实现

二、knn

def calssify(inx,dataSet,labels,k):
    dataSetSize=dataSet.shape[0]

    diffMat = np.tile(inx,(dataSetSize,1))-dataSet
    print(diffMat.shape)
    sqDiffMat = diffMat**2
    #横着计算
    sqDictance =  sqDiffMat.sum(axis=1)
    print(sqDictance.shape)

    distance = sqDictance ** 0.5
    #排序 返回原数组的下标
    sortedDistanceIndicies = distance.argsort()

    classCount = {}
    for i in range(k):
        voteLabel = labels[sortedDistanceIndicies[i]]
        classCount[voteLabel]=classCount.get(voteLabel,0)+1
    #key表示排序的关键字 itemgetter(1)表示按着第二个参数排序

    sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
    return sortedClassCount[0][0]
dataSet,labels = createDataset()
testX=np.array([1.2,1])
k=2
outPutLabel = calssify(testX,dataSet,labels,k)
print(outPutLabel)

猜你喜欢

转载自blog.csdn.net/weixin_40642306/article/details/83346841