K均值算法

简述K均值算法的具体步骤

代价函数可以定义为各个样本距离所属簇中心点的误差平方和


K均值算法的优缺点是什么?如何对其进行调优?

K均值算法有一些缺点,例如受初值和离群点的影响每次的结果不稳定、结果 通常不是全局最优而是局部最优解、无法很好地解决数据簇分布差别比较大的情 况(比如一类是另一类样本数量的100倍)、不太适用于离散分类等。但是瑕不掩 瑜,K均值聚类的优点也是很明显和突出的,主要体现在:对于大数据集,K均值 聚类算法相对是可伸缩和高效的,它的计算复杂度是O(NKt)接近于线性,其中N是 数据对象的数目,K是聚类的簇数,t是迭代的轮数。尽管算法经常以局部最优结 束,但一般情况下达到的局部最优已经可以满足聚类的需求。
其实书中也少讲了缺点,那就是关于k的选择,当维度很高的时候,你很难判断选择k多少比较合适。
不过书中在算法调优中说了。所谓的调优其是也是变相的说那些缺点。

K均值算法的调优一般可以从以下几个角度出发。

(1)数据归一化和离群点处理。
K均值聚类本质上是一种基于欧式距离度量的数据划分方法,均值和方差大的 维度将对数据的聚类结果产生决定性的影响,所以未做归一化处理和统一单位的 数据是无法直接参与运算和比较的。同时,离群点或者少量的噪声数据就会对均 值产生较大的影响,导致中心偏移,因此使用K均值聚类算法之前通常需要对数据 做预处理。

(2)合理选择K值。
K值的选择是K均值聚类最大的问题之一,这也是K均值聚类算法的主要缺 点。实际上,我们希望能够找到一些可行的办法来弥补这一缺点,或者说找到K值 的合理估计方法。但是,K值的选择一般基于经验和多次实验结果。例如采用手肘 法,我们可以尝试不同的K值,并将不同K值所对应的损失函数画成折线,横轴 为K的取值,纵轴为误差平方和所定义的损失函数,如图5.3所示

由图可见,K值越大,距离和越小;并且,当K=3时,存在一个拐点,就像人 的肘部一样;当K (1,3)时,曲线急速下降;当K>3时,曲线趋于平稳。手肘法认 为拐点就是K的最佳值。
手肘法是一个经验方法,缺点就是不够自动化,因此研究员们又提出了一些 更先进的方法,其中包括比较有名的Gap Statistic方法[5]。Gap Statistic方法的优点 是,不再需要肉眼判断,而只需要找到最大的Gap statistic所对应的K即可,因此该 方法也适用于批量化作业。在这里我们继续使用上面的损失函数,当分为K簇时, 对应的损失函数记为Dk。Gap Statistic定义为
Gap(K)=E(logDk)−logDk

内按照均匀分布随机地产生和原始样本数一样多的随机样本,并对这个随机样本
做K均值,得到一个Dk;重复多次就可以计算出E(logDk)的近似值。那么Gap(K)有
什么物理含义呢?它可以视为随机样本的损失与实际样本的损失之差。试想实际 样本对应的最佳簇数为K,那么实际样本的损失应该相对较小,随机样本损失与实 际样本损失之差也相应地达到最小值,从而Gap(K)取得最大值所对应的K值就是最 佳的簇数。根据式(5.4)计算K =1,2,...,9所对应的Gap Statistic


(3)采用核函数。
采用核函数是另一种可以尝试的改进方向。传统的欧式距离度量方式,使得K 均值算法本质上假设了各个数据簇的数据具有一样的先验概率,并呈现球形或者 高维球形分布,这种分布在实际生活中并不常见。面对非凸的数据分布形状时, 可能需要引入核函数来优化,这时算法又称为核K均值算法,是核聚类方法的一种 [6]。核聚类方法的主要思想是通过一个非线性映射,将输入空间中的数据点映射到 高位的特征空间中,并在新的特征空间中进行聚类。非线性映射增加了数据点线 性可分的概率,从而在经典的聚类算法失效的情况下,通过引入核函数可以达到 更为准确的聚类结果。

针对K均值算法的缺点,有哪些改进的模型?

K均值算法的主要缺点如下。
(1)需要人工预先确定初始K值,且该值和真实的数据分布未必吻合。
(2)K均值只能收敛到局部最优,效果受到初始值很大。
(3)易受到噪点的影响。
(4)样本点只能被划分到单一的类中。

■ K-means++算法
K均值的改进算法中,对初始值选择的改进是很重要的一部分。而这类算法 中,最具影响力的当属K-means++算法。原始K均值算法最开始随机选取数据集中 K个点作为聚类中心,而K-means++按照如下的思想选取K个聚类中心。假设已经 选取了n个初始聚类中心(0<n<K),则在选取第n+1个聚类中心时,距离当前n个 聚类中心越远的点会有更高的概率被选为第n+1个聚类中心。在选取第一个聚类中 心(n=1)时同样通过随机的方法。可以说这也符合我们的直觉,聚类中心当然是 互相离得越远越好。当选择完初始点后,K-means++后续的执行和经典K均值算法 相同,这也是对初始值选择进行改进的方法等共同点。

■ ISODATA算法
当K值的大小不确定时,可以使用ISODATA算法。ISODATA的全称是迭代自 组织数据分析法。在K均值算法中,聚类个数K的值需要预先人为地确定,并且在 整个算法过程中无法更改。而当遇到高维度、海量的数据集时,人们往往很难准 确地估计出K的大小。ISODATA算法就是针对这个问题进行了改进,它的思想也 很直观。当属于某个类别的样本数过少时,把该类别去除;当属于某个类别的样 本数过多、分散程度较大时,把该类别分为两个子类别。ISODATA算法在K均值 算法的基础之上增加了两个操作,一是分裂操作,对应着增加聚类中心数;二是 合并操作,对应着减少聚类中心数。ISODATA算法是一个比较常见的算法,其缺 点是需要指定的参数比较多,不仅仅需要一个参考的聚类数量Ko,还需要制定3个
阈值。下面介绍ISODATA算法的各个输入参数。
(1)预期的聚类中心数目Ko。在ISODATA运行过程中聚类中心数可以变 化,Ko是一个用户指定的参考值,该算法的聚类中心数目变动范围也由其决定。 具体地,最终输出的聚类中心数目常见范围是从Ko的一半,到两倍Ko。
(2)每个类所要求的最少样本数目Nmin。如果分裂后会导致某个子类别所包 含样本数目小于该阈值,就不会对该类别进行分裂操作。
(3)最大方差Sigma。用于控制某个类别中样本的分散程度。当样本的分散 程度超过这个阈值时,且分裂后满足(1),进行分裂操作。
(4)两个聚类中心之间所允许最小距离Dmin。如果两个类靠得非常近(即这 两个类别对应聚类中心之间的距离非常小),小于该阈值时,则对这两个类进行
合并操作。
如果希望样本不划分到单一的类中,可以使用模糊C均值或者高斯混合模型, 高斯混合模型会在下一节中详细讲述。

证明K均值算法的收敛性。

K均值聚类的迭代算法实际上是一种最大期望算法 (Expectation-Maximization algorithm),简称EM算法。EM算法解决的是在概率模 型中含有无法观测的隐含变量情况下的参数估计问题。
EM算法只保证收敛到局部最优解

推荐阅读更多精彩内容