机器学习中 K近邻法(knn)与k-means的区别

简介git

K近邻法(knn)是一种基本的分类与回归方法。k-means是一种简单而有效的聚类方法。虽然二者用途不一样、解决的问题不一样,可是在算法上有不少类似性,因而将两者放在一块儿,这样可以更好地对比两者的异同。github

算法描述

knn

算法思路:
若是一个样本在特征空间中的k个最类似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。算法

k近邻模型的三个基本要素:测试

  1. k值的选择:k值的选择会对结果产生重大影响。较小的k值能够减小近似偏差,可是会增长估计偏差;较大的k值能够减少估计偏差,可是会增长近似偏差。通常而言,一般采用交叉验证法来选取最优的k值。
  2. 距离度量:距离反映了特征空间中两个实例的类似程度。能够采用欧氏距离、曼哈顿距离等。
  3. 分类决策规则:每每采用多数表决。

k-means

算法步骤:
1. 从n个数据中随机选择 k 个对象做为初始聚类中心;
2. 根据每一个聚类对象的均值(中心对象),计算每一个数据点与这些中心对象的距离;并根据最小距离准则,从新对数据进行划分;
3. 从新计算每一个有变化的聚类簇的均值,选择与均值距离最小的数据做为中心对象;
4. 循环步骤2和3,直到每一个聚类簇再也不发生变化为止。url

k-means方法的基本要素:spa

    1. k值的选择:也就是类别的肯定,与K近邻中k值的肯定方法相似。
    2. 距离度量:能够采用欧氏距离、曼哈顿距离等。

应用实例

问题描述

已知若干人的性别、身高和体重,给定身高和体重判断性别。考虑使用k近邻算法实现性别的分类,使用k-means实现性别的聚类。.net

数据

数据集合:https://github.com/shuaijiang/FemaleMaleDatabase3d

该数据集包含了训练数据集和测试数据集,考虑在该数据集上利用k近邻算法和k-means方法分别实现性别的分类和聚类。对象

将训练数据展现到图中,能够更加直观地观察到数据样本之间的联系和差别,以及不一样性别之间的差别。blog


数据展现数据展现

KNN的分类结果

KNN算法中的基本设置

利用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算法的基本设置

混淆矩阵 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算法,而且应用到了具体问题上,最后获得告终果。以上内容不免有所纰漏和错误,欢迎指正。

相关文章
相关标签/搜索