K近邻算法(K-nearest Neighbor,简称KNN)
KNN是种最简单的机器学习算法了,结合书本定义和自我理解,K近邻算法的原理是:
对于新的测试数据集,使用某种距离度量找出在训练集中最为接近的K个训练样本。
- 在分类任务中,使用“投票法”:选择K个样本实际值中出现最多次数的值作为预测结果。
- 在回归任务中,使用“平均法”:选择K个样本实际值的平均值作为预测结果。
实际上K近邻学习是懒惰学习(lazy learning)的一种,在训练阶段仅保存样本数据,训练开销时间为0,有了测试样本数据后再进行学习处理。与之对应的是在训练阶段就要处理数据的方法,称为急切学习(eager learning)
通过一个简单对比示例来说明吧,show me the code~.
#近邻选择K=1
mglearn.plots.plot_knn_classification(n_neighbors=1)
plt.title("K=1")
#近邻选择K=3
mglearn.plots.plot_knn_classification(n_neighbors=3)
plt.title("K=3")
mglearn.plots.plot_knn_classification(n_neighbors=4)
plt.title("K=4")
通过对比以上K取值(1,3,4)时,对应测试数据(三个五角星)的颜色取值即可发现KNN的算法效果。
即:对于分类任务,使用投票法选择测试数据的K个近邻数据中出现频数最大的值作为预测值。
写此文的时候发现,开始掉头发了,果然这玩意很烧脑。o(╥﹏╥)o