KNN原理及python实现(kd树)

来源:互联网 发布:linux nagios 编辑:程序博客网 时间:2024/04/28 03:51
  • 前面说的话

觉得自己完全看懂和做出来是两回事,希望自己可以坚持将机器学习算法基本都复现出来,并有时间进行时间空间复杂度的优化,用matlab梳理完思路后有时间再用python写一遍,毕竟我是一个厉害的小女子哈哈哈。
如果你阅读我的文章有什么疑问,或是任何学术讨论,欢迎和我交流:shitianqi1994@163.com


  • k近邻法原理

训练集是很多有特征有label的数据,当送进来一个没有label的数据需要判断时,选训练集中k个和这个数据最相似的数据,再将这k个数据的label以某种规则赋值给这个测试数据(比如规则为出现最多的label)。

这里的“相似“就是用距离进行度量。(欧式距离,曼哈顿距离等等)使用不同的距离确定的最近邻点是不同的,最后得到的label肯定也是不同的。

所以我们可以总结出,knn算法的三个基本要素是:

  1. k值的选取
  2. 距离的度量方式
  3. 分类决策规则

当这三个要素确定之后,模型完全确定,对于任何一个新的输入实例,它所属的类唯一确定。

k值的选择
k值的选取对knn的结果造成了较大的影响,如果k取的很小,那么只有和测试数据非常近的数据才能对结果产生影响,对近邻数据点非常敏感,但是如果此时近邻数据是噪声,那么就会造成过拟合。
也就是说,k值越小,建立的模型越复杂,越容易发生过拟合,k值越大,建立的模型越简单,即会选择性地丢掉一些信息,k值最大就是选取整个训练数据集中数据个数N,这时不管测试数据是什么都会被判定为训练数据集中最多label 的那个(假设决策规则是少数服从多数原则),这时的模型过于简单,完全没有考虑到值得考虑的因素。

在实际中,k一般取一个比较小的数值,通常采用交叉验证法来选取最优的k值。


  • k近邻法的实现:kd树

kd树的构建和搜索
这篇博文写的非常清楚。

  • 使用kd树结构完成knn算法matlab实现
原创粉丝点击