《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来!
01
—
回顾
昨天,介绍了高斯混合模型(GMM)的一些有意思的小例子,说到高斯混合能预测出每个样本点属于每个簇的得分值,这个具有非常重要的意义,大家想了解这篇推送的,请参考:
02
—
GMM求解思路
GMM中的归纳偏好是组成数据的几个簇都满足高斯分布。
GMM求解的已知条件:
GMM算法的任务:预测出每个样本点属于每个簇的得分值,每个簇中得分最大的就是这个样本点属于的簇。
GMM算法的求解思路:我们先从一个簇说起,此时就是一个高斯分布吧。假如已知训练数据有20个,那么这20个数据一定属于当前这个簇吧,因为一共就有1个簇,那是必须属于吧,所以只需要求这个高斯分布的参数:均值和方差,一般参数估计都是用最大似然估计吧,就是每个样本发生的概率乘积最大吧,得到:
这样我们就求出这20个数据满足以上参数的高斯分布的概率密度,再来一个数据时,我们根据这个概率密度的公式,便能得出它的概率密度吧。
那两个簇组成的GMM呢?它和一个簇满足高斯有什么不同呢?只有一个不同:簇多了1个,导致的问题:不知道某个样本点到底属于哪个簇,或者说属于每个簇的概率都是多大,这就是增加的那个需要求解的隐变量,也是多出来的一个未知量。
因为我们在事先不知道20个样本点的簇的对应情况时,干脆直接假定它们属于每一个簇,只不过贡献的大小不一致。对每个簇而言,它容纳了所有的样本点,只不过包含每个样本点的系数不大一样。根据这个思路,这不就又回到一个簇的情况了吗,只不过每个样本点对这个簇的贡献值不是恒为1,而是可能一个小于1的系数吧,根据这个分析,我们得出第 i 个数据点对簇 k 的贡献为:
其中:
,可以理解为簇 k 对GMM的贡献和第 i 个数据对簇 k 的贡献的乘积,不就等于第 i 个数据对GMM的贡献吗,分母是第 i 个数据所有簇的贡献和。f 函数是高斯分布的概率密度函数。
这样求出了所有数据对簇 k 的贡献了吧,所以簇 k 也包括了所有数据点吧,有了它们再结合簇 k 满足高斯,极大似然估计可以得出簇 k 的均值和方差吧,与只有一个簇的样本和方差类似:
只不过,每项前面增加了一个贡献系数:第 i 个样本对簇 k 的贡献, Nk 是什么变量,不难理解,每个样本对 k 的贡献系数为 r(i,k),既然簇 k 包括所有的样本,也就是20个样本的贡献系数和,即:
自然地,每个簇对GMM的贡献系数 πk 等于:
极限情况,当k = 1时,即只有一个簇时,Nk = N, πk=1,即这个唯一的簇对 GMM 的贡献系数为1 。
03
—
迭代求解
有了上面的几个公式,分布设定每个簇的均值和方差一个初始值,πk也设定一个初始值,那么每个样本对某个簇的贡献系数 r(i,k)便可求出,r(i,k)一旦求出,Nk 和πk 便可求出,进一步,簇 k 的均值和方差便可求出,这样完成了一次参数的迭代,迭代更新参数r(i,k),Nk ,πk,簇 k 的均值和方差,直到簇 k 的均值和方差收敛为止(小于某个阈值),这样完成GMM的求解:得到每个样本点对每个簇的贡献大小,一个样本得出 k 个贡献大小,一共 N 个样本,则最终得到 (N, k)二维数组,取每行的贡献最大值,即为这个样本所属的簇。
预知按照以上求解思路对GMM的不掉包python代码求解,请关注明天的推送,谢谢您的阅读。
本文分享自 程序员郭震zhenguo 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!