机器学习中 K近邻法(knn)与k-means的区别
简介
K近邻法(knn)是一种基本的分类与回归方法。k-means是一种简单而有效的聚类方法。虽然两者用途不同、解决的问题不同,但是在算法上有很多相似性,于是将二者放在一起,这样能够更好地对比二者的异同。
算法描述
knn
算法思路:
如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
k近邻模型的三个基本要素:
- k值的选择:k值的选择会对结果产生重大影响。较小的k值可以减少近似误差,但是会增加估计误差;较大的k值可以减小估计误差,但是会增加近似误差。一般而言,通常采用交叉验证法来选取最优的k值。
- 距离度量:距离反映了特征空间中两个实例的相似程度。可以采用欧氏距离、曼哈顿距离等。
- 分类决策规则:往往采用多数表决。
k-means
算法步骤:
1. 从n个数据中随机选择 k 个对象作为初始聚类中心;
2. 根据每个聚类对象的均值(中心对象),计算每个数据点与这些中心对象的距离;并根据最小距离准则,重新对数据进行划分;
3. 重新计算每个有变化的聚类簇的均值,选择与均值距离最小的数据作为中心对象;
4. 循环步骤2和3,直到每个聚类簇不再发生变化为止。
k-means方法的基本要素:
- k值的选择:也就是类别的确定,与K近邻中k值的确定方法类似。
- 距离度量:可以采用欧氏距离、曼哈顿距离等。
应用实例
问题描述
已知若干人的性别、身高和体重,给定身高和体重判断性别。考虑使用k近邻算法实现性别的分类,使用k-means实现性别的聚类。
数据
数据集合:https://github.com/shuaijiang/FemaleMaleDatabase
该数据集包含了训练数据集和测试数据集,考虑在该数据集上利用k近邻算法和k-means方法分别实现性别的分类和聚类。
将训练数据展示到图中,可以更加直观地观察到数据样本之间的联系和差异,以及不同性别之间的差异。
数据展示
KNN的分类结果
KNN算法中的基本设置
- k=5
- 距离度量:欧氏距离
- 分类决策规则:多数投票
- 测试集:https://github.com/shuaijiang/FemaleMaleDatabase/blob/master/test0.txt
利用KNN算法,在测试集上的结果如下混淆矩阵表所示。从表中可以看出,测试集中的男性全部分类正确,测试集中的女性有一个被错误分类,其他都分类正确。
混淆矩阵 Test:male Test:female Result:male 20 1 Result:female 0 14
(表注:Test:male、Test:female分别表示测试集中的男性和女性,Result:male和Result:female分别表示结果中的男性和女性。表格中第一个元素:即Test:male列、Result:male行,表示测试集中为男性、并且结果中也为男性的数目。表格中其他元素所代表的含义以此类推)
由上表可以计算分类的正确率:(20+14)/(20+14+1) = 97.14%
K-means的聚类结果
K-means算法的基本设置
- k=2
- 距离度量:欧氏距离
- 最大聚类次数:200
- 类别决策规则:根据每个聚类簇中的多数决定类别
- 测试集:https://github.com/shuaijiang/FemaleMaleDatabase/blob/master/test0.txt
混淆矩阵 Test:male Test:female Result:male 20 1 Result:female 0 14
(表注:该表与上表内容一致)
由于选择初始中心点是随机的,所以每次的聚类结果都不相同,最好的情况下能够完全聚类正确,最差的情况下两个聚类簇没有分开,根据多数投票决定类别时,被标记为同一个类别。
KNN VS K-means
二者的相同点:
- k的选择类似
- 思路类似:根据最近的样本来判断某个样本的属性
二者的不同点:
- 应用场景不同:前者是分类或者回归问题,后者是聚类问题;
- 算法复杂度: 前者O(n^2),后者O(kmn);(k是聚类类别数,m是聚类次数)
- 稳定性:前者稳定,后者不稳定。
总结
本文概括地描述了K近邻算法和K-means算法,具体比较了二者的算法步骤。在此基础上,通过将两种方法应用到实际问题中,更深入地比较二者的异同,以及各自的优劣。本文作者还分别实现了K近邻算法和K-means算法,并且应用到了具体问题上,最后得到了结果。
以上内容难免有所纰漏和错误,欢迎指正。
机器学习中 K近邻法(knn)与k-means的区别的更多相关文章
- K近邻法(KNN)原理小结
K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...
- k近邻法(KNN)和KMeans算法
k近邻算法(KNN): 三要素:k值的选择,距离的度量和分类决策规则 KMeans算法,是一种无监督学习聚类方法: 通过上述过程可以看出,和EM算法非常类似.一个简单例子, k=2: 畸变函数(dis ...
- scikit-learn K近邻法类库使用小结
在K近邻法(KNN)原理小结这篇文章,我们讨论了KNN的原理和优缺点,这里我们就从实践出发,对scikit-learn 中KNN相关的类库使用做一个小结.主要关注于类库调参时的一个经验总结. 1. s ...
- 机器学习--K近邻 (KNN)算法的原理及优缺点
一.KNN算法原理 K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法. 它的基本思想是: 在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对 ...
- 机器学习PR:k近邻法分类
k近邻法是一种基本分类与回归方法.本章只讨论k近邻分类,回归方法将在随后专题中进行. 它可以进行多类分类,分类时根据在样本集合中其k个最近邻点的类别,通过多数表决等方式进行预测,因此不具有显式的学习过 ...
- k近邻法(kNN)
<统计学习方法>(第二版)第3章 3 分类问题中的k近邻法 k近邻法不具有显式的学习过程. 3.1 算法(k近邻法) 根据给定的距离度量,在训练集\(T\)中找出与\(x\)最邻近的\(k ...
- k近邻法
k近邻法(k nearest neighbor algorithm,k-NN)是机器学习中最基本的分类算法,在训练数据集中找到k个最近邻的实例,类别由这k个近邻中占最多的实例的类别来决定,当k=1时, ...
- 学习笔记——k近邻法
对新的输入实例,在训练数据集中找到与该实例最邻近的\(k\)个实例,这\(k\)个实例的多数属于某个类,就把该输入实例分给这个类. \(k\) 近邻法(\(k\)-nearest neighbor, ...
- 机器学习笔记(十)---- KNN(K Nearst Neighbor)
KNN是一种常见的监督学习算法,工作机制很好理解:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个"邻居"的信息来进行预测.总结一句话就是&quo ...
随机推荐
- awk多分隔符功能及wc命令案列及企业级应用
打印最后一行行号: cat -n /etc/services|tail -1 awk '{print NR $0}' oldboy.txt|tail -1 awk '{print NR $0}' /e ...
- 【Chrome控制台】获取元素上绑定的事件信息以及监控事件
需求场景 在前端开发中,偶尔需要验证下某个元素上到底绑定了哪些事件,以及监控某个元素上的事件触发情况. 解决方案 普通操作 之前面对这种情况,一般采取的措施就是在各个事件里写console.info, ...
- 三十天学不会TCP,UDP/IP网络编程 - RST的用法
不知不觉也写了这么多了,继续我的自己的推广大业~完整版可以去gitbook(https://www.gitbook.com/@rogerzhu/)看到. 如果对和程序员有关的计算机网络知识,和对计算机 ...
- 在foxmail和outlook中设置QQ邮箱、gmail邮箱、新浪邮箱、微软邮箱、网易邮箱等的方法
怎么用邮件客户端如outlook和foxmail来设置各种邮箱 很多人平时都是在网页上面收发邮件,这个很简单,不用其他的设置,不过在客户端上设置收发邮件还是很不错的,今天就来讲讲各种邮箱在outloo ...
- WordPress禁止版本修订历史、自动保存和自动草稿最新方法汇总
提醒:我这里汇总的方法有一些只支持以前老版本的WordPress,对于新版本的WordPress,有些功能是不支持的,所以操作前请做好备份.我的WordPress版本目前是4.3.1,我会在我测试有效 ...
- SpringDataJPA入门就这么简单
一.SpringData入门 在上次学SpringBoot的时候,那时候的教程就已经涉及到了一点SpringData JPA的知识了.当时还是第一次见,觉得也没什么大不了,就是封装了Hibernate ...
- ubuntu14.04行更新软件包
ubuntu14.04行更新软件包 headsen chen 2017-10-12 16:01:34 apt-get update对应的就是第一步. apt-get upgrade 与apt-g ...
- Learn Plan
2018-02-05 1.正则表达式的熟悉和使用 2.Spring-boot 框架的使用 3.React的如何和使用 4.英语的单词发音的纠正和词汇的记忆. 5.github 命令行的使用 6.jav ...
- 前端的UI设计与交互之数据录入篇
数据录入是获取对象信息的重要交互方式,用户会频繁的增加.修改或删除信息.多种多样的文本录入和选择录入方式帮助用户更加清晰和高效的完成这项体验.设计者应当注意这几点:为初级用户/偶尔访问的用户提供简单易 ...
- 【Python】 用户图形界面GUI wxpython III 更多组件
wxpython - 更多组件 我写到的这些组件可能一来不是很详细,二来不是最全的,想要更好地用这些组件,应该还是去看看教程和别的示例.比较简单的,推荐http://download.csdn.net ...