EM算法和K-Means算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EM算法和K-Means算法相关的知识,希望对你有一定的参考价值。

参考技术A 在实际工作中,会遇到这样的问题,给机器输入大量的特征数据,并希望机器希望学习找到某种共同的特征或者结构,亦或是数据之间存在的某种关联,例如,视频网站根据用户的观看行为进行分组,从而建立不同的推荐策略,或是找到视频是否流畅与用户是否退订之间的关系等。属于无监督学习算法。

包括两大类,一:数据聚类,此类方案往往是通过数次迭代找到数据的最优分割。二:特征变量的关联规则,此类方法利用各种相关性分析找到变量之间的关系。

Kmeans的 核心 是将给定的数据集划分成K个簇,并给出每个数据对应的中心点。算法具体步骤如下:

1:数据预处理,如归一化、离散点处理等

2:随机选取K个簇中心,记为 。

3:定义代价函数: 。

4:令 为迭代步数,重复下面过程直到 收敛

4.1 对于每一个样本将其分到距离最近的簇

4.2 对于每一个类簇k,重新计算类簇的中心

K均值在迭代时,交替方向法求解,假设当前 没有达到最小值,那么首先固定簇中心 ,调整样本 所属的类别 来让 函数减小,然后再固定 ,调整中心 使 减小,这两个过程交替循环, 单调递减,当 递减到最小时, 和 同时收敛。

缺点:

1:受初始值的影响

2:异常值的影响

3:当簇分布相差很大时,不适合

优点:

大数据集, 均值聚类相对是可伸缩和高效的,计算复杂度 ,其中 是数据对象的数目, 是聚类簇数, 是迭代的轮数。尽管算法经常局部最优结束,一般情况下局部最优已经满足要求

调优方向

1:数据归一化和离散点处理

2:合理选择 值

一:手肘法:选择若干个K画均方误差的折线图肉眼查看拐点 二:Gap Statistic方法的基本思路是:引入参考的测度值,其可以通过Monte Carlo采样的方法获得。 

3:采用核函数

利用kmeans假设各个数据簇的数据具有一样的先验概率,并呈现高纬球形分布,但是实际生活中是不常见的。面对非凸的数据分布时,引入核函数来优化。核心:利用非线性核函数将样本映射到高纬空间,并在新的特征空间中进行聚类。非线性映射增加了数据的线性可分的概率。

针对对初始值敏感的改进

K-means++算法:

起步

由于 K-means 算法的分类结果会受到初始点的选取而有所区别,因此有提出这种算法的改进: K-means++ 。

算法步骤

其实这个算法也只是对初始点的选择有改进而已,其他步骤都一样。初始质心选取的基本思路就是,初始的聚类中心之间的相互距离要尽可能的远。

算法描述如下:

步骤一: 随机选取一个样本作为第一个聚类中心;

步骤二:

计算每个样本与当前已有类聚中心最短距离(即与最近一个聚类中心的距离) 这个值越大,表示被选取作为聚类中心的概率较大;

最后,用轮盘法选出下一个聚类中心;

步骤三: 重复步骤二,知道选出 k 个聚类中心 。

选出初始点后,就继续使用标准的 k-means 算法了。

      ISODATA的聚类个数是可变的,因为在聚类的过程中,对类别数有一个“合并”和“分裂”的操作。合并是当聚类结果某一类中样本数太少,或两个类间的距离太近时,将这两个类别合并成一个类别;分裂是当聚类结果中某一类的类内方差太大,将该类进行分裂,分裂成两个类别。

ISODATA分类的过程和K-Means一样,用的也是迭代的思想:先随意给定初始的类别中心,然后做聚类,通过迭代,不断调整这些类别中心,直到得到最好的聚类中心为止。

注:

初始簇个数 ,最终簇大小范围

分裂和合并的标准

每个簇的样本数最小 ,小于这个值不进行分裂

每个簇样本的最大方差 ,大于这个则进行分裂

两个簇之间的最小距离围 ,小于这个则进行合并

EM算法是一种迭代算法,用于含有隐变量的概率模型的极大似然估计,或者说是极大后验概率估计。

算法步骤

输入:观测变量数据Y,隐变量Z,联合分布 ,条件分布

输出:模型参数

1:选择参数的初始值

2:E步:记 为第 次迭代参数 的估计值,在第 次迭代的E步,计算 函数 ,其中, 是再帮给定Y和 下隐变量数据Z的条件概率分布;

3:M步:求使 极大化的 ,确定第 次迭代的参数的估计值 ,

4:重复2,3步,直到收敛

EM算法推导

通过不断求解下界的极大化逼近求解对数似然函数的极大化的算法

含有隐变量的概率模型的极大似然估计

下面证明

利用Jensen不等式



则 即函数 增大 ,也可以使得 有尽可能的增大,选择 使得 达到极大,即 现在求 的表达式 = = = =

假设有m个观察样本,模型的参数 ,最大化对数似然函数可以写成如下的形式

当概率模型含有无法观测的隐变量时,参数的最大似然估计

因为含有不可观测的隐变量,无法通过极大似然估计求解参数,这时可以通过EM算法求解。假设 对应的分布 ,并满足 。利用Jensen不等式,可以得到,

。不等式右侧,即为 。当等式成立时,我们相当于优化的函数找到了一个逼近的下界,然后最大化这个下界

EM算法和k-means关系

1:E步骤

2:M步骤:最大化

K均值算法等价于以下隐变量求最大似然问题

相当于E步找到x当前最近的簇

在M步骤 来更新簇中心

#####引用葫芦书和李航机器学习

您使用啥方法来选择 k-means 和 EM 中的最佳聚类数?

【中文标题】您使用啥方法来选择 k-means 和 EM 中的最佳聚类数?【英文标题】:What method do you use for selecting the optimum number of clusters in k-means and EM?您使用什么方法来选择 k-means 和 EM 中的最佳聚类数? 【发布时间】:2011-01-19 18:04:24 【问题描述】:

可以使用许多聚类算法。一种流行的算法是 K-means,其中基于给定数量的集群,该算法迭代以找到对象的最佳集群。

在k-means聚类中,你用什么方法来确定数据中的簇数?

R 中是否有任何可用的包包含V-fold cross-validation 方法来确定正确的集群数量?

另一种常用的方法是期望最大化 (EM) 算法,它为每个实例分配一个概率分布,表明它属于每个集群的概率。

这个算法是在 R 中实现的吗?

如果是,是否有通过交叉验证自动选择最佳聚类数的选项?

您更喜欢其他聚类方法吗?

【问题讨论】:

我故意省略了层次聚类,因为 hclust 是一种相当消耗内存的方法,不适合我实际上最感兴趣的大型数据集。 请定义您所说的“最佳”是什么意思 好问题@Svante,我一直在思考这个问题。我什至打算编写一个包含多种算法的程序包,以优化集群数量(仅限 hclust 方法)。 @hadley,我熟悉:C-H 指数(Calinsky & Harabasz)、C-index、Goodman-Kruskal 伽马系数。并且有一种方法可以通过利用 F 检验来“选择最佳集群解决方案”。这是一个参考:米利根,G.W.和库珀,M.C. (1985 年)。 An Examining of Procedures for Determining the Number of Clusters in a Data Set, Psychometrika, 50, 159-179 @hadley,在最大化某些得分函数的意义上,可能有 between class distancewithin class distance 作为参数。例如,参见Optimal Number of Clusters 段中描述的方法:sandro.saitta.googlepages.com/… 这也可能派上用场:stats.stackexchange.com/questions/723/… 【参考方案1】:

对于大型“稀疏”数据集,我会认真推荐“亲和传播”方法。 与 k 均值相比,它具有更优越的性能,并且具有确定性。

http://www.psi.toronto.edu/affinitypropagation/ 它发表在《科学》杂志上。

但是,最佳聚类算法的选择取决于所考虑的数据集。 K 均值是一种教科书方法,很可能有人已经开发出更好的算法,更适合您的数据集类型/

这是 Andrew Moore 教授(CMU,Google)关于 K 均值和层次聚类的一个很好的教程。 http://www.autonlab.org/tutorials/kmeans.html

【讨论】:

【参考方案2】:

上周,我为 K-Means 聚类程序编写了一个估计聚类数的算法。我使用了中概述的方法:

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.70.9687&rep=rep1&type=pdf

我最大的实施问题是我必须找到一个合适的集群验证索引(即错误度量),它可以工作。现在是处理速度的问题,但目前的结果看起来还算合理。

【讨论】:

以上是关于EM算法和K-Means算法的主要内容,如果未能解决你的问题,请参考以下文章

EM算法和K-Means算法

机器学习K-means聚类算法与EM算法

您使用啥方法来选择 k-means 和 EM 中的最佳聚类数?

人工智能 | K-MEANS聚类算法均值偏移聚类算法DBSCAN聚类算法使用高斯混合模型(GMM)的期望最大化(EM)聚类合成聚类

K-means聚类算法

K-Means算法原理