今天讲一个在机器学习中重要的方法——极大似然估计。
这是一个,能够让你拥有拟合最大盈利函数模型的估计方法。
01
什么是极大似然估计法
极大似然估计是 1821 年由高斯提出,1912 年由费希尔完善的一种点估计方法。
通俗来说,极大似然估计法其实源自生活的点点滴滴,比方说有一个大学生他天天上课不听讲,天天上课玩手机,老师盯着他看了老半天,他也不知道收敛一些,那通过老师几十年的教学经验的判断,这小子期末一定是挂科的,果不其然,他真的挂科了。
老师以过去大量的相同事件来判断目前正在发生的类似事件,这就是极大似然。
其实一开始写这个分享,我准备了很多小故事,希望用风趣幽默的文法把一个很抽象的数学名词尽可能的讲给所有人听,让大家都能理解并接受。后来我发现,用上面老师和学生的例子是最为贴切的,因为也曾经这样预判过别人。
好啦,故事讲完了,接下来就是重头菜了,原理看着很清晰,但实操起来,需要概率论基础以及利用微分求极值。
导数
导数的概念的其实挺简单的,这里我们不要求掌握太多的关于微积分的公式,只消会求导就可以了,关于基本初等函数的求导,大家可以在这里查找自己需要的求导公式。
复合函数的求导满足链式法则:
值得一提的还有关于导函数求驻点,即令 ,并求解 x,所得到的 x 即为驻点,驻点回代原函数可得极值。
02
求解极大似然估计量的四步骤
终于到了本文的小高潮,如何利用极大似然估计法来求极大似然估计量呢?
首先我们来看一个例子:有一个抽奖箱,里面有若干红球和白球,除颜色外,其他一模一样。我们每次从中拿出一个后记录下来再放回去,重复十次操作后发现,有七次抽到了红球,三次是白球,请估计红球所占的比例。
从题目可以分析出本次例子满足二项分布,现在可以设事件 A 为"抽到红球",那可以得到一个式子:
(1)
现在的目的就是为了求这个 P(A),那要怎么求才又快又准呢?如果用求导解驻点来寻找极值,7 次方好像也不是很大,那要是我们重复进行了一百、一千次操作呢?所以,优化算法势在必行,下面的骚操作就是先辈们经过不懈地探求总结出来的——先取对数再求导!
对(1)式取对数,得:
对上式求导,整理得:
令该导数为零,可得式子:
解得
从这个例子中我们可以得到和《概率论与数理统计》一书中相匹配的抽象结果:设总体 X 为离散型随机变量,且它的概率分布为
其中 θ 为未知参数 和
分别为 X 的一组样本和样本观察值。则参数 θ 的取值应该使得概率:
达到最大值,今后我们称 θ 的函数:
为 θ 的似然函数,上式是其样本取对应观察值的概率。同时,如果有
使得:
则称 为 θ 的极大似然估计量。从上述一般结果的抽象描述中,我们可以剥离出求解 的一般步骤:
写出似然函数 ;
对似然函数取对数(视情况而定);
求对数似然函数对未知参数的导函数 ;
令导函数为 0,方程的解即为极大似然解;
03
基于极大似然原理的 KNN 算法
KNN,即 K-近邻算法,是极大似然的一个体现,具体思想如下:
首先我们定义一个点,这个点很特别,它具有:
X轴的值
Y轴的值
颜色标签(这里我们使用黑、红、蓝三种颜色做个演示)
然后我们多搞几个点,制造出点群,也是较为简陋的一个数据集
接着有一个不知道自己是啥颜色的小不点溜进来了
现在黑、蓝、红三个点群展开了激烈的争论,到底这个小不点是属于哪一方的!
可是应该如何来判决呢?
小不点想出了一个绝妙的法子,记录自身到每一个颜色点的距离,然后选取其中 K 个距离值,并以最大的那个距离为半径,自身为圆心,画一个圆,计算圆内每一个颜色占总点数的概率,最大概率的那个颜色标签即是小不点的颜色。
当 k=2 时
当 k=6 时
我们可以发现在有效的K值内,小不点有极大概率是蓝色的,因此我们赋予它一个蓝色的颜色标签。至此 KNN 的基本原理已经阐明,该贴一份 C 的 KNN 代码啦。
但还有一个问题:如何选择一个最优的 K 值?
这个问题留以后在《基于K-近邻算法的 KD-tree 详解》中进行系统的讲解,目前一般使用交叉验证或贝叶斯,先挖个坑在这里,以后慢慢填啦~
04
KNN 算法的 C 简单实现
测试图如下:
KNN 还有更好玩的方法哦,比如 K-D tree,分治思想下的模型,速度更快哦。
参考资料:
《概率论与数理统计》安书田版
维基百科的极大似然估计条目——国内上不了 Wiki 百科,有俩办法,一个是改 host,另一个你懂的。
CSDN《Markdown 数学符号》——我真的写这篇被这些数学符号搞得快要原地爆炸了!
作者简介:
浅浅,目前在闽南师范大学就读,爱好国学与晨跑,痴迷机器学习与数据挖掘,Lisp爱好者。