KNN算法是比较简单的机器学习算法。
其优点有:
精度高、对异常值不敏感、无数据输入假定
缺点是:
计算复杂度高、空间复杂度高
(来一条数据扫一遍数据集,还要排序,当然高了。。)
用于分类。
思想是找K个近似的数据点,统计决定分类结果
相似性(距离)算法一般有曼哈顿距离、欧式距离和余弦相似度三种。
数据一般要做个归一化处理,很简单。(值-最小值)/(最大值-最小值)
欧式距离python简单实现代码
def KNN(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]