机器学习分享——KNN算法及numpy实现
KNN 是一种非参数的懒惰的监督学习算法.
非参数的意思是,模型不会对基础数据分布做出任何假设。换句话说,模型的结构是根据数据确定的。懒惰的意思是没有或者只有很少的训练过程.
KNN 算法既可以处理分类问题,测试数据的类型由所有 K 个最近邻点投票决定,也可以处理回归问题,测试数据的值是所有 K 个最近邻点的值的均值或众数.
KNN 的算法非常简单.
例如,对于分类问题,算法流程如下,
对需要预测的每个数据依次执行以下操作:
- 计算已知训练数据集中的点与当前点之间的距离;
- 按照距离递增次序排序;
- 选取与当前点距离最小的k个点;
- 确定前k个点所在类别的出现频率;
- 返回前k个点出现频率最高的类别作为当前点的预测分类。
需要注意的是,要对数据进行特征缩放.下面两张图很好的阐释了缩放的重要性.
那么KNN在实际使用中有哪些优点和缺点呢?
它的优点有:
- 可以处理线性和非线性数据
- 直观上易于理解
- 具有较高的准确率
- 既可以用作回归问题,也可以用作分类问题
它的缺点是
- 计算代价大
- 内存要求高
- 数据量大时预测较慢
- 对无关的特征以及特征缩放敏感
在实际的使用过程中,可能会遇到如下的问题.
k 近邻的类别出现了平局的情况. 例如在二分类中,正负类型的近邻数相同,使用奇数个近邻可以解决此问题,但是无法解决多分类的问题.这个时候可以
- 随机决定属于哪个类别
- 对某些类别设置优先级
- 使用最近邻来做最终的决定
2.训练数据的缺失值如何处理.如果不处理缺失值,则无法计算距离.对于缺失值的处理的核心原则是,尽可能小的影响距离的计算.一个合理的解决办法是,使用训练数据的平均值来填充缺失值.
最后附上实现代码,登录之后就能查看了。
电脑端查看源码
参考资料
- https://medium.com/@adi.brons...
- https://www.youtube.com/watch...
- https://www.datacamp.com/comm...
- https://stats.stackexchange.c...
————————————————————————————————————
Mo (网址:momodel.cn )是一个支持 Python 的人工智能建模平台,能帮助你快速开发训练并部署 AI 应用。
相关推荐
scuyxi 2020-10-25
tulensa 2020-05-30
wuxiaosi0 2020-02-03
BigCowPeking 2020-01-18
PeterHuang0 2019-12-11
蜗牛慢爬的李成广 2019-11-30
卖小孩的咖啡 2019-11-09
卖小孩的咖啡 2019-11-08
Happyunlimited 2019-11-03
tuonioooo 2019-07-22
卖小孩的咖啡 2019-10-28
bush 2019-04-25
gotea 2015-12-17
gotea 2011-04-18
seedcup 2019-07-01
SongLynn 2019-07-01
算法改变人生 2019-06-30
wandaxiao 2019-06-28