歐式距離
給定一個訓練數(shù)據(jù)集中姜,對新的輸入實例,計算兩者之間的距離薯演,與k個最小距離的標簽進行分類撞芍。通俗來說即是點到直線的衍生,點即實例跨扮;直線即分類器序无。
import numpy as np
class knn:
def knn(inX, dataSet, labels, k):
'''
:param inX: <numpy.ndarray> 輸入向量
:param dataSet: <numpy.ndarray> 數(shù)據(jù)集的向量
:param labels: <list> 輸入實例的標簽
:param k: <str> 輸出預測的標簽
:return sortedClassCount[0][0] <str>輸出預測的標簽
'''
#inX - dataSet
a = dataSet.shape[0]
b = np.tile(inX, (a, 1)) - dataSet
c = b ** 2
d = c.sum(axis=1)
e = d ** 0.5
classCount = {}
for i in range(k):
f = labels[e[i]]
classCount[f]= classCount.get(f, 0) + 1
sortedClassCount = sorted(classCount.iteritems(), key = operater.itemgetter(1), reverse = True)
return sortedClassCount[0][0]