第四部分:
1.生成学习法 generate learning algorithm
2.高斯判别分析 Gaussian Discriminant Analysis
3.朴素贝叶斯 Navie Bayes
4.拉普拉斯平滑 Navie Bayes
一、生成学习法generate learning algorithm:
二类分类问题,不管是感知器算法还是逻辑斯蒂回归算法,都是在解空间中寻找一条直线从而把两种类别的样例分开,对于新的样例只要判断在直线的哪一侧即可;这种直接对问题求解的方法可以成为判别学习方法(discriminative learning algorithm)。而生成学习算法则是对两个类别分别进行建模,用新的样例去匹配两个模型,匹配度较高的作为新样例的类别,比如良性肿瘤与恶性肿瘤的分类,首先对两个类别分别建模,比如分别计算两类肿瘤是否扩散的概率,计算肿瘤大小大于某个值的概率等等;再比如狗与大象的分类,分别对狗与大象建模,比如计算体重大于某个值的概率,鼻子长度大于某个值的概率等等。
比如说良性肿瘤和恶性肿瘤的问题,对良性肿瘤建立model1(y=0),对恶性肿瘤建立model2(y=1),p(x|y=0)表示是良性肿瘤的概率,p(x|y=1)表示是恶性肿瘤的概率.
根据贝叶斯公式(Bayes rule)推导出y在给定x的概率为:
![](https://i-blog.csdnimg.cn/blog_migrate/2df856f2e26c147e13367b1ca2c542f1.png)
注释如下:
![](https://i-blog.csdnimg.cn/blog_migrate/5a3b1fa41e9f64ebb04a90f65f72a471.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fb8d008ed7676aebfb7b0aeb081e6e10.png)
二、高斯判别分析 Gaussian Discriminant Analysis:
先看概念:高维高斯分布的理解
1. 如何描述问题?
1.0 问题的假设是什么?
这个模型对于数据有非常强的假设:
它假设变量是连续的,并且每一个特征都符合正态分布(即高斯分布)
即输入特征满足多元正态分布(后面来讲)
对应一个二元分类问题 y = h(x), 需要满足下面的分布:
![NewImage.png NewImage](https://i-blog.csdnimg.cn/blog_migrate/063c9bc1ba4aebd8fa74d0d94dc4e69c.jpeg)
1.1 如何用模型描述问题?
由于有了上面的假设,问题可以描述为:
![NewImage.png NewImage](https://i-blog.csdnimg.cn/blog_migrate/ec5de224996e509bee3a9f5787c19bec.jpeg)
当需要分类是,通过贝叶斯公式计算其属于某一类的概率:
![NewImage.png NewImage](https://i-blog.csdnimg.cn/blog_migrate/f5bf0a2469ef33e7f137baa780135664.jpeg)
1.2 如何定义求解目标?
算法的求解目标为使其联合概率最大化,即
![NewImage.png NewImage](https://i-blog.csdnimg.cn/blog_migrate/de36102b6781b1eb866263ab13b3081d.jpeg)
2. 如何求解问题?
对似然函数求导得到
![](https://i-blog.csdnimg.cn/blog_migrate/b4c3c64821b7a473c3d03af6f7233ea3.png)
算法表述在图上可以为
![](https://i-blog.csdnimg.cn/blog_migrate/80af539847803e6c22cd305ffc9f8e6e.png)
什么是多元正态分布(The Multivariate Normal Distribution)?
多元正态分布描述的是 n 维随机变量的分布情况,这里的μ变成了向量, σ也变成了矩阵Σ。写作𝛮(𝜇,𝛴)
其密度函数为:
![NewImage.png NewImage](https://i-blog.csdnimg.cn/blog_migrate/8e28e6427a5af7b6a1b930771c1aad8d.jpeg)
其中μ决定中心位置,Σ决定投影椭圆的朝向和大小
考虑x = [x_1, x_2]生成的图形是一个钟形函数
先来改变Σ的值,保持μ=0 恒定
当x_1和x_2不存在相关性 ------
![NewImage.png NewImage](https://i-blog.csdnimg.cn/blog_migrate/b16e474eea4965a1cb12629cffb082a4.jpeg)
![NewImage.png NewImage](https://i-blog.csdnimg.cn/blog_migrate/f58c0a7c41891f467b43b4fd7d7e7c58.jpeg)
当x_1和x_2正相关 -------
![NewImage.png NewImage](https://i-blog.csdnimg.cn/blog_migrate/f297d7f262ad8ee58d82a770a881ff98.jpeg)
![NewImage.png NewImage](https://i-blog.csdnimg.cn/blog_migrate/1ea7d76bd84c4faba2fee5e36a221dfa.jpeg)
当x_1和x_2负相关 -------
![NewImage.png NewImage](https://i-blog.csdnimg.cn/blog_migrate/f4685c21e75a0acc41c369354d48c18c.jpeg)
![NewImage.png NewImage](https://i-blog.csdnimg.cn/blog_migrate/358b2c22ec3417f5f4bdbb57c4e91e02.jpeg)
再来改变μ的值,保持Σ=I 恒定
![NewImage.png NewImage](https://i-blog.csdnimg.cn/blog_migrate/1cc3cce9e68572b099c08843cfb5e724.jpeg)
![NewImage.png NewImage](https://i-blog.csdnimg.cn/blog_migrate/f5adae161517a8c09bdb412aa053bcf8.jpeg)
GDA和Logistic Regression有什么关系?
注释:简单的说Logistic Regression只要给一组数据,基本就可以分类,因为他只是“分类”而已。
GDA不仅仅是分类,他需要先把样本拟合成K个高斯函数才能进行分类。
有了上面两个说明,谁强谁弱显而易见了!
![NewImage.png NewImage](https://i-blog.csdnimg.cn/blog_migrate/c43238b9b074d992050bec6589177f24.jpeg)
如上图,首先我们有一些正负例(用O或者X表示在x轴上),分别对正负例建模,由于GDA要求的正负例分别服从高斯分布,画在图上就是两个钟形函数 p(x | y = 0) 和 p(x | y = 1)
有了这个分布,我们来看p(y = 1 | x)的概率表述,也就是计算给定样本之后的正例(y = 1)的分布,神奇的发现这是一个sigmoid function,和logistic regression的结果非常类似的sigmoid function!
GDA和Logistic Regression 有什么关系呢?
答案是,虽然像,但是还是有本质区别的。
GDA中,假设特征服从高斯分布,那么其后验概率确实是logistic 类型的函数。
反过来,Logistic Regression得出的logistic 类型的函数,则不能推出它的特征是服从高斯分布的。
比如即使其特征服从泊松分布,它的后验也是logistic类型的。
事实上,只要特征是服从Generalized Linear Model的,后验都是logistic类型的。
![NewImage.png NewImage](https://i-blog.csdnimg.cn/blog_migrate/721aa35dd3a21fbff089a46305c59d34.jpeg)
有了上面的分析,可以看出以下结论
Logistic Regression的适应能力更好,因为其对应特征可以服从很多分布,一般而言,只要不是特别不靠谱,都能得出一个比较可靠的模型。也就是模型更加鲁棒,对错误的模型假设更加不敏感。
而对于GDA,由于建立了很强的假设,如果特征不满足假设,那么模型效果就不会好。但如果特征真的满足了高斯分布的话,GDA可以得出非常靠谱的模型,并且训练非常有效率 --- 用很少的样本就可以训练出不错的模型。
三:朴素贝叶斯(Naive Bayes)
在GDA中,特征向量x是连续的实数向量,那么现在谈论一下当x是离散时的情况。
我们沿用对垃圾邮件进行分类的例子,我们要区分邮件是不是垃圾邮件。分类邮件是文本分类的一种应用
将一封邮件作为输入特征向量,与现有的字典进行比较,如果在字典中第i个词在邮件中出现,则xi =1,否则xi =0,所以现在我们假设输入特征向量如下:
注释:得有先验概率的数据去训练,参见《机器学习》周志华,P76页、P153页
对样本数据进行处理:(重复的数据不增加,此算法只看有没有出现,有为1,无为0,出现十次也是1)
![](https://i-blog.csdnimg.cn/blog_migrate/67a6c1b34ed124fd6ec7b7e6fa5c7d9c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6e6b476f8ce2bf1d6cfc61bd4ce4c1dc.png)
对目标数据进行处理:
![](https://i-blog.csdnimg.cn/blog_migrate/8c8f195d48fe34a9440fba84c94049f6.png)
对目标数据和样本数据进行对比求解:
注意这里求得前提是x=1,所以x为第三个特征的时候øx=0&y=1和øx=0&y=0都是不存在的!具体求解救不写了,上面说的那本书上有具体的例子!
![](https://i-blog.csdnimg.cn/blog_migrate/0d07dcedb2a61245e91536528ee7ab20.png)
选定特征向量后,现在要对p(x|y)进行建模:
注释:Xi 代表样本中是否出现不好的词语,如果Xi=Dict[j]---->>>Xi=1 or Xi=0,y代表最终的输出,y=1表示垃圾邮件,y=0表示好的邮件。
假设字典中有50000个词,x ∈ {0, 1}50000 如果采用多项式建模, 将会有250000种结果,250000-1维的参数向量,这样明显参数过多。所以为了对p(x|y)建模,需要做一个强假设,假设x的特征是条件独立的,这个假设称为朴素贝叶斯假设(Naive Bayes (NB) assumption),这个算法就称为朴素贝叶斯分类(Naive Bayes classifier).
解释:
如果有一封垃圾邮件(y=1),在邮件中出现buy这个词在2087这个位置它对39831这个位置是否出现price这个词都没有影响,也就是,我们可以这样表达p(x2087|y) = p(x2087|y, x39831),这个和x2087 and x39831 相互独立不同,如果相互独立,则可以写为p(x2087) = p(x2087|x39831),我们这里假设的是在给定y的情况下,x2087 and x39831 独立。
现在我们回到问题中,在做出假设后,可以得到:
解释
第一个等号用到的是概率的性质 链式法则
第二个等式用到的是朴素贝叶斯假设
朴素贝叶斯假设是约束性很强的假设,一般情况下 buy和price是有关系的,这里我们假设的是条件独立 ,独立和条件独立不相同
模型参数:
φi|y=1 = p(xi= 1|y = 1)
φi|y=0 = p(xi = 1|y = 0)
φy = p(y = 1)
对于训练集{(x(i) , y(i)); i =1, . . . , m},根据生成学习模型规则,联合似然函数(joint likelihood)为:
得到最大似然估计值:
注释:
第一个式子:样本的词在字典中出现且最终是垃圾邮件的概率。
第二个式子:样本的词在字典中出现且最终是优秀邮件的概率。
第一个式子:最终是垃圾邮件的概率。
最后一个式子是表示y=1的样本数占全部样本数的比例,前两个表示在y=1或0的样本中,特征Xj=1的比例。
拟合好所有的参数后,如果我们现在要对一个新的样本进行预测,特征为x,则有:
实际上只要比较分子就行了,分母对于y = 0和y = 1是一样的,这时只要比较p(y = 0|x)与p(y = 1|x)哪个大就可以确定邮件是否是垃圾邮件。
四、拉普拉斯平滑
朴素贝叶斯的问题: 假设在一封邮件中出现了一个以前邮件从来没有出现的词,在词典的位置是35000,那么得出的最大似然估计为:
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/10eb34569430bde2c4bf1be93f275e57.jpeg)
注释:
![](https://i-blog.csdnimg.cn/blog_migrate/3b3b1e24e90b4441cfac2085d3037e6f.png)
也即使说,在训练样本的垃圾邮件和非垃圾邮件中都没有见过的词,模型认为这个词在任何一封邮件出现的概率为0. 假设说这封邮件是垃圾邮件的概率比较高,那么
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/9574ade285d210293116c60762bed098.jpeg)
模型失灵.
在统计上来说,在你有限的训练集中没有见过就认为概率是0是不科学的.
为了避免朴素贝叶斯的上述问题,我们用laplace平滑来优化这个问题.
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/317cec0847c630b3801bcc76895e9477.jpeg)
回到朴素贝叶斯问题,通过laplace平滑:
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/8e451034e3d0d0c4e2e190e1bea980ff.jpeg)
分子加1,分母加1就把分母为零的问题解决了.
参考:http://blog.sina.com.cn/s/blog_b09d46020101dgnp.html