机器学习分享——KNN算法及numpy实现

KNN 是一种非参数的懒惰的监督学习算法.算法

非参数的意思是,模型不会对基础数据分布作出任何假设。换句话说,模型的结构是根据数据肯定的。懒惰的意思是没有或者只有不多的训练过程.app

KNN 算法既能够处理分类问题,测试数据的类型由全部 K 个最近邻点投票决定,也能够处理回归问题,测试数据的值是全部 K 个最近邻点的值的均值或众数.学习

KNN 的算法很是简单.测试

例如,对于分类问题,算法流程以下,ui

对须要预测的每一个数据依次执行如下操做:人工智能

  1. 计算已知训练数据集中的点与当前点之间的距离;
  2. 按照距离递增次序排序;
  3. 选取与当前点距离最小的k个点;
  4. 肯定前k个点所在类别的出现频率;
  5. 返回前k个点出现频率最高的类别做为当前点的预测分类。

在这里插入图片描述
须要注意的是,要对数据进行特征缩放.下面两张图很好的阐释了缩放的重要性.spa

image
image

那么KNN在实际使用中有哪些优势和缺点呢?3d

它的优势有:rest

  • 能够处理线性和非线性数据
  • 直观上易于理解
  • 具备较高的准确率
  • 既能够用做回归问题,也能够用做分类问题

它的缺点是blog

  • 计算代价大
  • 内存要求高
  • 数据量大时预测较慢
  • 对无关的特征以及特征缩放敏感

在实际的使用过程当中,可能会遇到以下的问题.

  1. k 近邻的类别出现了平局的状况. 例如在二分类中,正负类型的近邻数相同,使用奇数个近邻能够解决此问题,可是没法解决多分类的问题.这个时候能够

    • 随机决定属于哪一个类别
    • 对某些类别设置优先级
    • 使用最近邻来作最终的决定

2.训练数据的缺失值如何处理.若是不处理缺失值,则没法计算距离.对于缺失值的处理的核心原则是,尽量小的影响距离的计算.一个合理的解决办法是,使用训练数据的平均值来填充缺失值.

最后附上实现代码,登陆以后就能查看了。
电脑端查看源码

参考资料

  1. https://medium.com/@adi.brons...
  2. https://www.youtube.com/watch...
  3. https://www.datacamp.com/comm...
  4. https://stats.stackexchange.c...

————————————————————————————————————Mo (网址:momodel.cn )是一个支持 Python 的人工智能建模平台,能帮助你快速开发训练并部署 AI 应用。

相关文章
相关标签/搜索