(1) KNN算法解决什么问题?
KNN是一种机器学习算法,可以解决下面问题:
- 分类问题
- 回归问题
- 离群点检测
(2) KNN算法流程
- 计算测试数据与每个训练数据之间的距离;
- 按照距离的由小到大进行排序;
- 选取距离最小的K个点;
- 确定前K个点所在类别的出现频率;(回归问题求K个点的均值)
- 返回前K个点中出现频率最高的类别作为测试数据的预测分类。

(3) KNN算法实现
网络上有很多种的实现方式。
参考:https://www.cnblogs.com/ybjourney/p/4702562.html
(4) KNN拓展点
- 如何选K值
- 距离度量方式
- 如何快速检索向量
(5) 距离度量
下面是几种常见的距离度量公式:

参考:KNN算法中常用的距离计算公式 https://blog.csdn.net/sanqima/article/details/51276640
(6) 如何快速检索向量?
6.1 KNN优化-KD Tree

参考:kd-tree : k近邻查询和范围查询 https://blog.csdn.net/dylan_frank/article/details/77934272
6.2 KNN优化-Ball Tree
为何引入?
为了改进KDtree的二叉树树形结构,并且沿着笛卡尔坐标进行划分的低效率,ball tree将在一系列嵌套的超球体上分割数据。也就是说:使用超球面而不是超矩形划分区域。虽然在构建数据结构的花费上大过于KDtree,但是在高维甚至很高维的数据上都表现的很高效。

参考:https://en.wikipedia.org/wiki/Ball_tree
(7) 如何选择K
依赖数据,可以通过参数调优进行K值选择。一般来说,较大的k会抑制噪声的影响,但会使分类边界变得不那么明显。
参考:https://www.quora.com/How-can-I-choose-the-best-K-in-KNN-K-nearest-neighbour-classification
友情推荐:ABC技术研习社
为技术人打造的专属A(AI),B(Big Data),C(Cloud)技术公众号和技术交流社群。