聚类分析是数据挖掘及机器学习领域内的重点问题之一,在数据挖掘、模式识别、决策支持、机器学习及图像分割等领域有广泛的应用,是最重要的数据分析方法之一。聚类是在给定的数据集合中寻找同类的数据子集合,每一个子集合形成一个类簇,同类簇中的数据具有更大的相似性。聚类是一种无监督学习,它将相似的对象归到同一簇中。它有点像全自动分类(自动意思是连类别体系都是自动构建的)。聚类方法几乎可以应用于所有对象,簇内的对象越相似,聚类的效果越好。本节学习一种称为K-means(K-均值)聚类的算法。之所以称之为K-均值是因为它可以发现k个不同的簇,且每个簇的中心采用簇中所含值的均值计算而成。
K-means算法是一种得到最广泛使用的基于划分的聚类算法,把m个对象分为k个簇,以使簇内具有较高的相似度。相似度的计算根据一个簇中对象的平均值来进行。它与处理混合正态分布的最大期望算法很相似,因为他们都试图找到数据中自然聚类的中心。
算法描述
优点:容易实现
缺点:可能收敛到局部最小值,在大规模数据上收敛较慢
适用数据类型:数值型数据
K-means算法是发现给定数据集的k个簇的算法。簇个数k是用户给定的,每一个簇通过其质心(centroid),即簇中所有点的中心来描述。
K-means算法的工作流程是这样的。首先,随机确定k个初始点作为质心。然后将数据集中的每个点分配到一个簇中,具体来讲,为每个点找距其最近的质心,并将其分配给该质心所对应的簇。进一步完成之后,每个簇的质心更新为该簇中所有点的平均值。
下面是K-means算法的分析:
假设训练样本为 ,其中
。算法的目的是将这m个样本聚类到K个不同的簇中,事先已经指明K的取值。随机选取
作为K个簇的质心,即用
来代表将要聚类得到的不同的簇。我们的目的就是将训练样本聚类到K个不同的簇中,并得到
。
对每一个样本 ,用
来表示
被分到的簇,当
属于第k簇时,有
;否则
。
定义失真函数(distortion function)为:
是每个数据点到其所在簇的质心的距离的平方和。我们的目的是寻找
和
来最小化
。可以通过迭代来完成,每次都迭代包含两个步骤,分别是关于
和
对
的优化。首先随机选择
的初始值,在第一步中先固定
,然后根据
来最小化
;在第二步中先固定
,然后根据
来最小化
。重复这两个步骤,直到
收敛。
首先固定 ,来考虑
。因为
是
的线性函数,因此很容易求出闭型解(closed form solution)。式子中包含m个独立的样本,所以我们可以一个一个的来优化,通过求出样本点
与每个质心
的距离的平方
,并选择最小的一个所对应的质心
作为
所在的簇。可以用下面的式子表述:
接下来固定 ,来考虑
。因为
是 的二次函数,可以通过关于
求导并令导数等于0来实现最小化。
能够很容易的得到:
上式中分母是属于第k个簇的样本的个数,分子是属于第k个簇的样本之和,故可以将上式理解为: 是属于第k个簇的样本的平均值。这就是为什么称为K-means算法的原因。
失真函数 不是一个凸函数,所以通过上述迭代方法并不能保证
收敛到全局最小值。也就是说,K-means比较容易受所选定的初始值的影响,如前面写的,K-means是可能收敛到局部最小值。但一般情况下K-means所达到的局部最优已经能够很好的满足要求。如果你担心陷入一个较差的局部最优,那么可以选定不同的随机初始值
,然后选择最小的
所对应的
和
作为输出。