第四部分:

    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的概率为:

    注释如下:

二、高斯判别分析 Gaussian Discriminant Analysis:

    

    先看概念:高维高斯分布的理解

  1. 如何描述问题?

  1.0 问题的假设是什么?

    这个模型对于数据有非常强的假设:

    它假设变量是连续的,并且每一个特征都符合正态分布(即高斯分布)

    即输入特征满足多元正态分布(后面来讲)

    对应一个二元分类问题 y = h(x), 需要满足下面的分布:

  1.1 如何用模型描述问题? 

    由于有了上面的假设,问题可以描述为:

    当需要分类是,通过贝叶斯公式计算其属于某一类的概率:

  1.2 如何定义求解目标?

    算法的求解目标为使其联合概率最大化,即

  2. 如何求解问题?

    对似然函数求导得到

    算法表述在图上可以为

  什么是多元正态分布(The Multivariate Normal Distribution)?

    多元正态分布描述的是 n 维随机变量的分布情况,这里的μ变成了向量,  σ也变成了矩阵Σ。写作?(?,?)

    其密度函数为:

    其中μ决定中心位置,Σ决定投影椭圆的朝向和大小

    考虑x = [x_1, x_2]生成的图形是一个钟形函数

    先来改变Σ的值,保持μ=0 恒定

    当x_1和x_2不存在相关性 ------

    当x_1和x_2正相关 -------

    当x_1和x_2负相关 -------

    再来改变μ的值,保持Σ=I 恒定

  GDA和Logistic Regression有什么关系?

    注释:简单的说Logistic Regression只要给一组数据,基本就可以分类,因为他只是“分类”而已。

       GDA不仅仅是分类,他需要先把样本拟合成K个高斯函数才能进行分类。

       有了上面两个说明,谁强谁弱显而易见了!

    如上图,首先我们有一些正负例(用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类型的。

  有了上面的分析,可以看出以下结论

    Logistic Regression的适应能力更好,因为其对应特征可以服从很多分布,一般而言,只要不是特别不靠谱,都能得出一个比较可靠的模型。也就是模型更加鲁棒,对错误的模型假设更加不敏感。

    而对于GDA,由于建立了很强的假设,如果特征不满足假设,那么模型效果就不会好。但如果特征真的满足了高斯分布的话,GDA可以得出非常靠谱的模型,并且训练非常有效率 --- 用很少的样本就可以训练出不错的模型。

三:朴素贝叶斯(Naive Bayes)

在GDA中,特征向量x是连续的实数向量,那么现在谈论一下当x是离散时的情况。

我们沿用对垃圾邮件进行分类的例子,我们要区分邮件是不是垃圾邮件。分类邮件是文本分类的一种应用

将一封邮件作为输入特征向量,与现有的字典进行比较,如果在字典中第i个词在邮件中出现,则x=1,否则x=0,所以现在我们假设输入特征向量如下:

注释:得有先验概率的数据去训练,参见《机器学习》周志华,P76页、P153页

    对样本数据进行处理:(重复的数据不增加,此算法只看有没有出现,有为1,无为0,出现十次也是1)

    对目标数据进行处理:

    对目标数据和样本数据进行对比求解:

        注意这里求得前提是x=1,所以x为第三个特征的时候øx=0&y=1和øx=0&y=0都是不存在的!具体求解救不写了,上面说的那本书上有具体的例子!

选定特征向量后,现在要对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(x= 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,那么得出的最大似然估计为:

注释:

也即使说,在训练样本的垃圾邮件和非垃圾邮件中都没有见过的词,模型认为这个词在任何一封邮件出现的概率为0. 
假设说这封邮件是垃圾邮件的概率比较高,那么

模型失灵.

在统计上来说,在你有限的训练集中没有见过就认为概率是0是不科学的.

为了避免朴素贝叶斯的上述问题,我们用laplace平滑来优化这个问题.

回到朴素贝叶斯问题,通过laplace平滑:

分子加1,分母加1就把分母为零的问题解决了.

参考:http://blog.sina.com.cn/s/blog_b09d46020101dgnp.html

    http://blog.csdn.net/stdcoutzyx/article/details/9285001

   http://www.cnblogs.com/czdbest/p/5771500.html

转载于:https://www.cnblogs.com/wjy-lulu/p/7765939.html

StanFord ML 笔记 第四部分相关推荐

  1. OpenCV学习笔记(四十六)——FAST特征点检测features2D OpenCV学习笔记(四十七)——VideoWriter生成视频流highgui OpenCV学习笔记(四十八)——PCA算

    OpenCV学习笔记(四十六)--FAST特征点检测features2D 特征点检测和匹配是计算机视觉中一个很有用的技术.在物体检测,视觉跟踪,三维常年关键等领域都有很广泛的应用.这一次先介绍特征点检 ...

  2. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  3. (转) ML笔记:字典学习1(Dictionary Learning)

    原 ML笔记:字典学习1(Dictionary Learning) 2019年02月27日 16:08:42 KaifangZhang 阅读数:215更多 <div class="ta ...

  4. ASP.NET Core 2 学习笔记(四)依赖注入

    原文:ASP.NET Core 2 学习笔记(四)依赖注入 ASP.NET Core使用了大量的依赖注入(Dependency Injection, DI),把控制反转(Inversion Of Co ...

  5. Spring Cloud 学习笔记(四)-Spring Cloud Hystrix

    Spring Cloud 学习笔记(四)-Spring Cloud Hystrix 由于前一阵子项目的原因,今天才继续弄上,今天想学习一下Hystrix组件 这个组件还挺抽象的,最开始我一直没太明白, ...

  6. 深入理解 C 指针阅读笔记 -- 第四章

    Chapter4.h #ifndef __CHAPTER_4_ #define __CHAPTER_4_/*<深入理解C指针>学习笔记 -- 第四章*//*指针数组 -- 意思就是这是一个 ...

  7. 管理系统中计算机应用第四章重点,管理系统中计算机应用课堂笔记第四章(4)...

    管理系统中计算机应用课堂笔记第四章(4) 分类:自考 | 更新时间:2016-07-08| 来源:转载 这个分析和抽象工作可分以下三步进行: 5.2.1数据流程图的绘制 数据流程图既是对原系统进行分析 ...

  8. Android群英传笔记——第四章:ListView使用技巧

    Android群英传笔记--第四章:ListView使用技巧 近期也是比較迷茫.可是有一点点还是要坚持的,就是学习了.近期离职了,今天也是继续温习第四章ListView,也拖了事实上也挺久的了,lis ...

  9. R统计笔记(四):中括号与双中括号的差异

    R统计笔记(四):中括号与双中括号的差异 2017年06月14日 22:26:05 阅读数:3628 理解的差异首先从语言方面开始,如果你有其他语言的惯性思维,比如JAVA.C或者Javascript ...

最新文章

  1. ETH网络要爆炸,未来Token的最佳选择注定是BCH
  2. gulp复制整个文件夹或文件到指定目录(包括拷贝单个文件)
  3. php实现cc攻击防御和防止快速刷新页面示例
  4. Linux操作系统安装LAMP环境
  5. 数据库SQL基础知识点
  6. SpringBoot自定义参数
  7. Xml xpath samples
  8. 解决mysql的乱码问题_完美解决mysql中文乱码的问题
  9. 带有帐号密码验证的apche服务器文件下载
  10. Permutation(构造+思维)
  11. php获取laydate,laydate日历控件使用方法实例分享
  12. FPGA——1位全加器的实现
  13. android 模拟蓝牙,【android 模拟器支持蓝牙】 CSDN
  14. PowerBI-日期和时间函数-YEAR\QUARTER\MONTH\DAY
  15. EagleEye论文+代码
  16. vue h5端实现富文本图片预览(基于 Vant 的 ImagePreview 组件)
  17. 联想笔记本电脑键盘灯怎么开启_联想键盘灯怎么开
  18. Java5、8、9章复习总结
  19. css3自定义字体、字体图标
  20. 用python代码实现 函数调用 烤红薯的例子

热门文章

  1. 23个CVPR 2020收录的新数据集,都在这里了!
  2. OpenAI的GPT-3花费了1200万美元,现在放出商用API,人人皆可用
  3. 法国科学家发布AI模型,阐释蛋白结构和功能及进化关系
  4. 德鲁克的黄金管理20条—------中高层管理必修课
  5. python安装Pyro报错:SyntaxError: Missing parentheses in call to ‘exec‘
  6. python如何定义一个简单的栈
  7. 华为全新发布开源操作系统欧拉:覆盖数字基础设施全场景
  8. 人类倾向于高估人工智能的进步,低估自身智能的复杂性-读《AI 3.0》
  9. 构建未来情报体系—— AI及大数据时代情报分析人员的战略价值
  10. 自我监督学习:AI技术的未来发展方向