今天小生就来解释下这两者之间的区别。
KNN | K-Means |
目的是为了确定一个点的分类 | 目的是为了将一系列点集分成k类 |
KNN是分类算法 | K-Means是聚类算法 |
监督学习,分类目标事先已知 | 非监督学习,将相似数据归到一起从而得到分类,没有外部分类 |
训练数据集有label,已经是完全正确的数据 | 训练数据集无label,是杂乱无章的,经过聚类后才变得有点顺序,先无序,后有序 |
没有明显的前期训练过程,属于memory-based learning | 有明显的前期训练过程 |
K的含义:“k”是用来计算的相邻数据数。来了一个样本x,要给它分类,即求出它的y,就从数据集中,在x附近找离它最近的K个数据点,这K个数据点,类别c占的个数最多,就把x的label设为c | K的含义:“k”是类的数目。K是人工固定好的数字,假设数据集合可以分为K个簇,由于是依靠人工定好,需要一点先验知识 |
K值确定后每次结果固定 | K值确定后每次结果可能不同,从 n个数据对象任意选择 k 个对象作为初始聚类中心,随机性对结果影响较大 |
时间复杂度:O(n) | 时间复杂度:O(n*k*t),t为迭代次数 |
相似点:都包含这样的过程,给定一个点,在数据集中找离它最近的点。即二者都用到了NN(Nears Neighbor)算法,一般用KD树来实现NN。 |
总结:KNN是分类算法,它是监督学习,知道了结果去效验结果是否正确。
K-Means是聚类算法,它是非监督学习,它需要先自己算去一个结果。
K-Means算法的缺陷和优点是什么?
优点:
1、解决聚类问题的经典算法,简单、快速
2、当处理大数据集时,该算法保持可伸缩性和高效率
3、当簇近似为高斯分布时,它的效果较好
4、时间复杂度近于线性,适合挖掘大规模数据集
缺点:
1、必须事先给出k(一般刚开始难以估计)
2、对初值敏感,即对于不同的初值,可能会导致不同结果
3、不适合非凸形状的簇或者大小差别很大的簇
4、对噪声和孤立点敏感
KNN算法的缺陷和优点是什么?
优点
1、KNN可以处理分类问题,同时天然可以处理多分类问题,比如鸢尾花的分类
2、简单,易懂,同时也很强大,对于手写数字的识别,鸢尾花这一类问题来说,准确率很高
3、KNN还可以处理回归问题,也就是预测
缺点
1、效率低,因为每一次分类或者回归,都要把训练数据和测试数据都算一遍,如果数据量很大的话,需要的算力会很惊人,但是在机器学习中,大数据处理又是很常见的一件事
2、对训练数据依赖度特别大,虽然所有机器学习的算法对数据的依赖度很高,但是KNN尤其严重,因为如果我们的训练数据集中,有一两个数据是错误的,刚刚好又在我们需要分类的数值的旁边,这样就会直接导致预测的数据的不准确,对训练数据的容错性太差