Datawhale
作者:小一,Datawhale优秀学习者
寄语:首先,对聚类算法进行了介绍;然后,解释了EM算法E步、M步的原理;最后,对sklearn参数进行了详解,并对王者荣耀英雄利用EM算法聚类,助力深入理解EM算法。
EM算法(Expectation Maximization Algorithm),译作最大期望化算法或期望最大算法。它是一种迭代算法,是常见且经典的聚类算法之一,用于含有隐变量(hidden variable)的概率参数模型的最大似然估计或极大后验概率估计。
对聚类算法、EM算法的原理及其实践进行详细的讲解之前。首先来看一张EM算法的聚类图,有个大致直观地了解。
学习框架
数据集及聚类分析代码后台回复 王者荣耀 获取
聚类算法
先来一段西瓜书里面的定义:在“无监督学习”中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础,此类学习任务中研究最多、应用最广的是“聚类”(clustering)。
总结一下关键词:标记信息未知、学习、内在性质及规律、聚类。对,还有一个:无监督学习,无监督算法大多都可以用上面的关键词来描述。
以聚类算法为例,其目的是对一批未知标记的数据通过某种方式进行聚类,使其能够有效的分成若干个类别,每一个类别里面的数据特征都类似,不同类别的数据差异性较大。
举个简单的例子:在中国的乡村有这样一个现象,一个村子的姓氏大多相同,不同村子有不同的姓氏。那如果现在把王家村、李家村、赵家村的所有人都聚集在一起,前提是不知道他们是哪个村子的,如何对他们进行聚类?
特性①:姓名,通过姓氏进行聚类,最终聚成三类:王+李+赵+其它
特性②:性别,通过性别进行聚类,最终聚成两类:男+女
特性③:年龄,通过年龄进行聚类,最终聚成三类:儿童+青年+老年
特性④:价值,通过价值进行聚类,最终聚成三类:高收入+中收入+低收入
特性⑤:属性,通过属性进行聚类,最终聚成三类:村领导+村干部+村民
…
上面的姓氏、性别、年龄、价值和属性等都是村民的内在性质(人物特征),这样的内在性质有很多,也就决定了聚类的标准并不唯一。
ok,想必大家已经明白了什么是聚类,通过上面的例子我们总结一下。
1. 何为聚类
聚类:将数据集中的样本划分为若干个不相交的子集,每个子集内部的样本之间具有相同的性质,不同子集之间差异性较大。通常情况下,我们会将子集称之为“簇”(cluster)
2. 如何聚类
聚类的本质是将具有相似特征的样本划分在一个簇里面,根据聚类算法的不同,聚类的实现过程也不尽相同。
例如,聚类算法中k-means是基于均值的聚类,DBSCAN是基于密度的聚类,AGNES是基于层次的聚类,可以针对不同的样本集使用不同算法进行聚类。
3. 评估聚类
聚类性能的评估比较麻烦,主要有两个原因:
样本集不存在已标记的类别数据,无法直接计算聚类算法的准确率。
若存在标记类别数据,无法直接通过预测前后类别之间的对应关系进行性能评估
针对上面的问题,可以大致分为两种,一种是存在已经确定的标记类别数据(类似于分类数据集),一种是完全没有标记的类别数据。
有标记类别数据的评估:当前的样本数据有标记类别数据C1和预测后的标记类别数据C2,但是无法直观的通过C1、C2去计算聚类错误率。
这个时候,可以通过条件熵去分析,可以认识到两个指标,分别是齐次性和完整性。通过这两个指标可以评估带有类别标记样本的聚类性能。
其中齐次性表示一个聚类元素只由一种类别的元素组成;完整性则表示给定的已标记的类别 ,全部分配到一个聚类里。
没有标记的类别数据的评估:大多应用于聚类算法的数据都是无标记的,因为既然数据都有标记了,直接用分类算法不香吗?
有一个指标叫做轮廓系数,它可以在不需要已标记数据集的前提下,对聚类算法的性能进行评估。
轮廓算法由以下两个指标构成:
a:一个样本与其所在相同聚类的平均距离
b:一个样本与其距离最近的下一个聚类里的点的平均距离
则针对这个样本,其轮廓系数s的值为:
针对一个数据集,其轮过系数s 为其所有样本的轮廓系数的平均值。轮廓系数的数值介于[-1,1]之间,-1表示完全错误的聚类,1表示完美的聚类,0表示聚类重叠。
EM原理
EM的英文全称是:Expectation Maximization,所以EM算法也叫最大期望算法。
学习EM之前,希望你已经理解了什么是极大似然估计,不了解的点这个:太赞了!机器学习基础核心算法:贝叶斯分类!(附西瓜书案例及代码实现)
1. 极大似然估计
先说一下极大似然估计:已知某个随机样本满足某种概率分布,且某个参数能使这个样本出现的概率最大,我们把这个参数作为估计的真实值叫做最大似然估计。也就是求解出现样本结果的最佳参数θ。
所以极大似然估计需要面临的概率分布只能有一个,但是要是不止一个呢?看个例子:
假设现在有两枚硬币A和B,随机抛掷后正面朝上概率分别为P_A,P_B。为了估计这两个概率,需要每次取一枚硬币,连掷10下并记录下结果,结果如下:
ok,根据以上分布结果,可以轻松算出: