前言
GMM的全称是Guassian Mixture Model。碰到一个新概念,我们可以从是个角度来理解:
- 是什么(定义-这个东西的定义是啥)?
- 做什么(目的-这个东西用来干啥)?
- 为什么(原理-为啥这个东西有用)?
- 怎么用(应用-该怎么把这个东西用到自己的项目中)
定义
GMM是一套方法。
目的
GMM是用来做非监督学习的聚类的。我们知道机器学习大概有两个类目,一个是监督学习,一个是非监督学习。GMM就是非监督学习下的一个方法,用来做聚类的。
聚类例子
很实际的一个问题如上图,给你一张左边这样的图,有什么办法能够知道这张图上是三坨点的组成呢。人可能一眼能够看出来,但是如何让计算机能够从左边的图辨别出三个剧烈,产生出右边的结果,然后在图上再画一个点,问电脑“这个点是属于哪一个类啊”,让计算机能够给你答案。而GMM就可以做这件事情。
原理
从上面这个例子引入,我们来看解决这个问题的基本思路。
- 首先我们想,是不是能够找出一个衡量准则,输入一个点,通过这个准则就可以判断出点属于哪个类。再具体一点,我们又想这个准则可以长这样:我先假设这个图要分成三个类,每个类都对于一个规则函数,分别是F1(x),F2(x),F3(x)。那么对于每个点x,我们入到这三个函数,比较三个函数计算的结果哪个大,输出值最大的那个函数代表的类就是这个点所属于的类。
- 接着我们又想,该怎么取这三个函数F1(x),F2(x),F3(x)呢。世界函数千千万,总不能拍脑袋想一个吧。然后我们就想到,是不是可以先设一个好操作的函数,然后将点带进去,然后算出参数。那么我们就很自然地想到万能的高斯函数了。(这个思想在我们求抛物线的时候还是有用过的,给你三个点,你怎么求过这三个点的抛物线呢?是不是设一个抛物线方程,然后把点带进去求参数。实际上这个思想的本质就是用少数点预测整个轨迹,接着就可以知道未知点的状态了)。
- 落实到具体怎么操作,因为这是三个函数F1(x),F2(x),F3(x)。好像无从下手该怎么求参数。我们可以把这三个函数杂糅在一起,组合成一个复合的函数F(x) = π1F1(x) + π2F2(x) + π3F3(x)。那么这个F(x)函数就变成同时带有π,μ,∑(μ,∑是Fi内部高斯函数的参数)。好,这样我们就得到一个函数了。有一坨点和一个函数(这个就是混合高斯函数GMM,因为是由把高斯函数混合起来而来的)。问题化归到,给一个待估的函数模型和一坨点,如果能用这坨点估出F(x)的参数,就可以完成我们的目的拉。
- 那么怎么求参数呢,带入我们的数据点,我们用极大似然估计来计算参数(见附注),然而这个奇葩的似然函数∑log(∑)形,是很难求极值的,就算梯度下降也不好操作,机智的少年们用E-M的方式来计算,就可以求出极值时候的参数值。E-M是一个迭代的过程。
总结一下,整个过程就是我们假设了一个混合高斯函数模型,然后用数据点来极大似然估计这个模型的参数。最终得到了这个混合高斯模型的参数,有了参数我们就知道了混合前的每个聚类对应的高斯模型,用voting的方式来判断出哪一个点是属于哪一个类的。
应用
应用嘛,就是一坨数学化的东西了,也就是刚才说的原理倒过来推导。
- 先决定下来你要分几个类,也就是K的值。这个是人为调控的常数,这个常数的选取很重要的,也就是为啥老有人说人工智能都是调调参数的工作。但是调参数也要有很大智慧的。
-
根据这个k,设出混合高斯函数的模型
混合高斯模型表达式 -
把点带进去乘起来再取个log,就得到了似然函数:
似然函数 - 再用E-M算法求出这个函数到达极值时候的π,μ,∑的值
- 最终得到了K个知道参数的pi(x)函数。我们就得到了GMM聚类器了。
附注
- 极大似然估计
说到这个极大似然估计,有点同学可能没有体会。我们来类比一下三个点求抛物线,我们是把点带入抛物线方程,得到了三个方程,然后解方程组的。在操作抛物线的时候,我们是有等式存在的所以易于解决。在概率分布上,我们并没有等式存在,带入之后只是一个谜一样的含参表达式,这能解出个啥。不过极大似然估计就还是能够分析出一些东西,虽然我们不能靠等式来算出值,但是我们可以通过让谜一样的含参表达式的值最大,就得到了一个极值点的等式,通过这个等式然后去算参数。所以对比求曲线的方式,似然估计真正做到了“拟合”这个思想,因为是人为地去找到极值点这个等式,然而谁说真正的参数就是在极值点取到的?
网友评论