机器学习算法之——KNN、Kmeans
一、Kmeans算法
kmeans算法又名k均值算法。其算法思想大致为:先从样本集中随机选取 kk 个样本作为簇中心,并计算所有样本与这 kk 个“簇中心”的距离,对于每一个样本,将其划分到与其距离最近的“簇中心”所在的簇中,对于新的簇计算各个簇的新的“簇中心”。
根据以上描述,我们大致可以猜测到实现kmeans算法的主要三点:
(1)簇个数 kk 的选择
(2)各个样本点到“簇中心”的距离
(3)根据新划分的簇,更新“簇中心”
算法过程如下:
参考资料:Kmeans算法理解及代码实现
二、KNN算法
邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。Cover和Hart在1968年提出了最初的邻近算法。KNN是一种分类(classification)算法,它输入基于实例的学习(instance-based learning)。
KNN是通过测量不同特征值之间的距离进行分类。
思路是:如果一个样本在特征空间中的k个最邻近的样本中的大多数属于某一个类别,则该样本也划分为这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
总结:
KNN算法是最简单有效的分类算法,简单且容易实现。当训练数据集很大时,需要大量的存储空间,而且需要计算待测样本和训练数据集中所有样本的距离,所以非常耗时
KNN对于随机分布的数据集分类效果较差,对于类内间距小,类间间距大的数据集分类效果好,而且对于边界不规则的数据效果好于线性分类器。
KNN对于样本不均衡的数据效果不好,需要进行改进。改进的方法时对k个近邻数据赋予权重,比如距离测试样本越近,权重越大。
KNN很耗时,时间复杂度为O(n),一般适用于样本数较少的数据集,当数据量大时,可以将数据以树的形式呈现,能提高速度,常用的有kd-tree和ball-tree。
参考资料:KNN分类算法
最新文章
- SQL Server 2008中的数据压缩
- js的一些冷门的用法
- wampserver---------如何让局域网其他电脑访问我的apache
- SPSS数据分析—非参数检验
- IE点击tif,tiff文件,提示打开而不是查找
- 【javascript】复制到剪贴板功能(支持目前各种浏览器)
- 与我一起extjs5(09--其定义菜单2)
- js操作符总结
- 2017-2018-1 1623 bug终结者 冲刺002
- layui.table图片显示不全和404问题
- Linux交换分区使用过多的处理办法
- Ubuntu16.04环境下搭建基于三台主机的mysql galera cluster集群(实测有效)
- iOS 多语言的实现(本地化和国际化)
- 如何解决selenium打开chrome提示chromedriver.exe已停止工作
- 2019年Java未来的发展方向
- D09——C语言基础学PYTHON
- (转)Python rsplit() 方法
- [ 转载 ] Java基础11--Java总结篇系列:Java泛型
- eclipse JRE(unbound)问题
- Android中asset文件夹与raw文件夹的区别深入解析(转)
热门文章
- 吴裕雄--天生自然MySQL学习笔记:MySQL 创建数据表
- 吴裕雄--天生自然 JAVASCRIPT开发学习: 变量提升
- 吴裕雄--天生自然 JAVASCRIPT开发学习:prototype(原型对象)
- 2020/1/29 PHP代码审计之XSS漏洞
- Python—程序设计:观察者模式
- Python笔记_第四篇_高阶编程_反射_(getattr,setattr,deattr,hasattr)
- java -jar 和 java -cp 的区别
- PAT Basic 1013 数素数 (20) [数学问题-素数]
- java和数据库中所有的锁都在这了
- python-变量及其数据类型-01