参考资料:
李航《统计学习方法》
Peter Harrington《机器学习实战》
yshujuan 博客:https://blog.csdn.net/yshujuan/article/details/72991212
一、KNN算法原理、优缺点
1.原理
k近邻法(k-nearest neighbor)是一种基本分类与回归方法。它的工作原理是:存在一个训练样本集,样本集中的每个数据都存在标签,即我们知道每个数据的对应的分类,输入没有标签的新数据后,在训练数据集中找到与该实例最邻近的k个实例,选择这k个实例中出现次数最多的分类,作为新数据的分类。
2.算法模型及三要素
k近邻法的模型实际上对应的是利用训练数据集对特征向量空间进行的一个划分,模型由三个基本要素组成:距离度量、k值的选择及分类决策规则。常用的距离度量是欧氏距离及更一般的L距离。k值小,只有与输入实例较近的训练实例才会对预测结果起作用,近似误差小,但是预测结果会对近邻的实例点非常敏感,如果近邻实例点恰巧是噪声,预测就会出错,估计误差增大。k值大,则相反,近似误差大,估计误差小。k值的选择反映了对近似误差与估计误差之间的权衡,通常由交叉验证选择最优的k。常用的分类决策规则是多数表决。
3.如何快速搜索k个最近邻点?
kd树是一种便于对k维空间中的数据进行快速检索的数据结构,本质是二叉树。表示对k维空间的一个划分,每个结点对应与k维空间划分中的一个超矩形区域,根结点对应包含所有实例的区域。利用kd树搜索的平均时间复杂度是O(logN),N指的是训练实例数,适用于训练实例数远大于空间维数的情况。
kd树算法详解:
https://blog.csdn.net/yshujuan/article/details/72991212
4.优缺点
优点:精度高,对异常值不敏感,无数据输入假定.
缺点:计算复杂度高,空间复杂度高。KNN算法是基于实例的学习,使用算法时我们必须有接近实际数据的训练样本数据,需要保存全部 数据集,如果训练数据集很大,必须使用大量的存储空间。此外,由于必须对数据集中的每个数据计算距离值,实际使用时可能会非常耗时。
二、使用KNN算法改进网站配对效果
https://github.com/Xu-Yuan-ws/MachineLearningInAction/blob/master/knn/KNN.ipynb
三、KNN算法优化手写识别系统
https://github.com/Xu-Yuan-ws/MachineLearningInAction/blob/master/knn/KNNHandwriting.ipynb