MO

发现意外,创造可能

MO Blog


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

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

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

KNN 算法既可以处理分类问题,测试数据的类型由所有 K 个最近邻点投票决定,也可以处理回归问题,测试数据的值是所有 K 个最近邻点的值的均值或众数.

KNN 的算法非常简单.

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

对需要预测的每个数据依次执行以下操作:

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

需要注意的是,要对数据进行特征缩放.下面两张图很好的阐释了缩放的重要性.

image image

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

它的优点有:

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

它的缺点是

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

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

  1. k 近邻的类别出现了平局的情况. 例如在二分类中,正负类型的近邻数相同,使用奇数个近邻可以解决此问题,但是无法解决多分类的问题.这个时候可以
    • 随机决定属于哪个类别
    • 对某些类别设置优先级
    • 使用最近邻来做最终的决定

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

最后附上实现代码,登录之后就能查看了。 [查看源码](http://www.momodel.cn:8899/#/explore/5c2e06041afd9465bbd90686?&tab=1&type=app)

参考资料

  1. https://medium.com/@adi.bronshtein/a-quick-introduction-to-k-nearest-neighbors-algorithm-62214cea29c7
  2. https://www.youtube.com/watch?v=DRIoyIR8pA4
  3. https://www.datacamp.com/community/tutorials/k-nearest-neighbor-classification-scikit-learn
  4. https://stats.stackexchange.com/questions/287425/why-do-you-need-to-scale-data-in-knn

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

最近的文章

版本1.11

新功能: 为高阶用户提供“模块开发”专区,通过流程介绍和文档指导用户进行全流程开发。 概念合并:删除模型(model)和工具(toolkit)的概念,用户通过工作台可以创建的作品类型为项目(部署之后被称为应用)、模块和数据集。 工作台复制项目和模块的功能。 新增“关于我们”页面,入口在页脚处。改进: 将官方博客移至“关于我们”页面中,删除导航栏入口。 新用户默认进入聊天室,可以接收消息。 “训练营”实战教程内容优化。 数据集与模块创建流程优化。修复: 新手任务部分问题。 ...…

继续阅读
更早的文章

使用LSTM智能作诗送新年祝福

LSTM介绍序列化数据即每个样本和它之前的样本存在关联,前一数据和后一个数据有顺序关系。深度学习中有一个重要的分支是专门用来处理这样的数据的——循环神经网络。循环神经网络广泛应用在自然语言处理领域(NLP),今天我们带你从一个实际的例子出发,介绍循环神经网络一个重要的改进算法模型-LSTM。本文章不对LSTM的原理进行深入,想详细了解LSTM可以参考这篇 [译] 理解 LSTM 网络。本文重点从古诗词自动生成的实例出发,一步一步带你从数据处理到模型搭建,再到训练出古诗词生成模型,最后实现从...…

继续阅读