KNN算法的核心思想就像是一句古语:近朱者赤近墨者黑。核心就是根据样本临近的其他样本来判断它属于哪一类,判断标准就是距离,它跟哪一类隔得近(玩的好,关系好)他就归属于哪一类。所以在KNN算法中主要的三个步骤就是:算距离,找邻居,分类。KNN与K-means有些相像,但后者是无监督学习,而KNN属于监督学习。
在计算距离时常用的距离公式有:欧式距离和曼哈顿距离
注意K代表的含义:类别数,所以K的取值非常重要,K太小时会造成过拟合:假如就只有2个类别,那么样本之间都没有什么区别,预测结果的误差也很小,会把噪声也放进去,所以它的泛化能力就很小。反之K值过大会造成欠拟合。K的取值一般不超过20。
算法一般步骤:
1)计算测试数据与各个训练数据之间的距离;
2)按照距离的递增关系进行排序;
3)选取距离最小的K个点;
4)确定前K个点所在类别的出现频率;
5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。
从KNN算法的步骤看,当数据特征数量特别多时,这种“蛮力法”一般的算法会显得十分笨拙,就是在重复计算距离,此时选择采用KD树来解决这一问题:KD树主要的三个步骤为:建树、搜索最邻近,预测
KD树具体构建可查看这一篇笔记:https://www.cnblogs.com/pinard/p/6061661.html
在python环境下使用KNN算法时,用import导入Knn算法模型 。fit训练数据,socre进行评分,predict进行预测。
from sklearn.neighbors import KNeighborsClassifier #k邻近算法模型
#实例k邻近模型,指定k值=3
knn = KNeighborsClassifier(n_neighbors=3)
#训练数据
knn.fit(feature,target)
#模型评分
knn.score(feature,target)
#预测
print(knn.predict(np.array([[176,71,38]])))