在深度学习的路上,从头开始了解一下各项技术。本人是DL小白,连续记录我自己看的一些东西,大家可以互相交流。
本文参考:https://blog.csdn.net/loveliuzz/article/details/78783773
https://blog.csdn.net/linzch3/article/details/57418531
一、前言
Kmeans聚类算法算得上是最著名的聚类算法,也称K-平均或K-均值,是一种使用广泛的最基础的聚类算法。在了解Kmeans算法之前,我们可以先了解一下聚类的概念。
二、分类和聚类
首先,分类和聚类是不同的概念。二者的目标都是对数据进行分类,但是却有一定的区别。
分类是按照某种标准给对象贴标签,再根据标签来区分归类;
聚类是事先没有给出标签,刚开始并不知道如何对数据分类,由算法自己来判断各条数据之间的相似性,把相似的聚在一起。
聚类算法的思想是:给定一个有M个对象的数据集,构建一个具有K个簇(其实就是类)的模型,其中K<=M。并且满足以下条件:
1、每个簇至少包含一个对象
2、每个对象属于且仅属于一个簇
3、将满足上述条件的k个簇称为一个合理的聚类划分。
简而言之就是,对于给定的类别数目K,首先给定初始化划分,通过迭代改变样本和簇的隶属关系,使的每次处理后的划分方式比上一次好。(让数据集之间的距离之和变小)
三、Kmeans算法思想与流程
接下来,让我们了解以下,kmeans算法是如何来处理聚类问题的。
假设输入样本为T = X1,X2...Xm;算法步骤为(欧几里得距离公式):
1、选择初始化的K个类别的中心a1,a2...ak;
2、对于每个样本Xi,将其标记为距离类别中心aj最近的类别j;(每个样本计算到所有类别中心的距离,最近的即为样本的类)
3、更新每个类别的中心点aj,值为隶属于该类别的所有样本的均值;(这就是为什么叫k-均值)
4、重复3,4步骤直到达到终止条件
终止条件:
迭代次数、最小平方误差、簇中心点变化率数值到达设定值
上图给出了Kmeans算法的简单流程,自然语言描述即是:
1>在图(a)中,选择两个类别中心点: a1(红点)、a2(蓝点),得到图(b)
2>在图(b)中,计算每个样本点到a1和a2的距离,将样本点划分为红色与蓝色,得到图(c)
3>在图(c)中,计算簇a1和簇a2的的样本均值,更新类别中心点a1和a2,得到图(d)
4>在图(d)中,更新每个样本点的簇,重新划分样本点,得到图(e)
5>在图(e)中,计算簇a1和簇a2的样本均值,更新类别中心点a1和a2,得到图(f),并且满足终止条件,结束算法。
不难看出Kmeans算法的思想其实并不困难,在实际Kmeans算法中,我们一般会多次运行图(c)和图(d),才能达到最终的比较优的类别。
四、Kmeans算法公式及优缺点
此处的Kmeans算法使用了欧几里得距离公式,对应在更新簇中心点时,使用了曼哈顿距离度量公式,当我们选用其他的距离公式来测定样本点和中心之间的距离时,也要对应的修改簇中心点更新公式,具体的对照以及涉猎的其他距离公式,可以参考博客:https://blog.csdn.net/loveliuzz/article/details/78783773
Kmeans算法的思想可谓是很简单,在我学习吴恩达教授的DeepLearning课程中,他讲述了一个概念:
我们拥有的数据量越小,需要的手工工程(“Hacks”)就越多,越需要复杂的算法;而当我们拥有的数据量越大时,我们的算法就越简单,也就意味着更少的手工工程。
最后,对于Kmeans算法,我觉得有必要让大家了解一下它的优缺点。