分享
分享赚钱 收藏 举报 版权申诉 / 28

类型贝叶斯分类算法.docx

  • 上传人:gnk289057
  • 文档编号:6545869
  • 上传时间:2019-04-16
  • 格式:DOCX
  • 页数:28
  • 大小:546.39KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    贝叶斯分类算法.docx
    资源描述:

    1、家用吸氧机价格 http:/最近在面试中,除了基础 4. unsigned int i,j; 5. bool done_flag = false;/哨兵值 6. for(j = 1; j wind 增益的 0.048。说白了,就是在星期六上午是否适合打网球的问题诀策中,采取 humidity 较 wind 作为分类属性更佳,决策树由此而来。1. /计算信息增益, DFS 构建决策树 2. /current_node 为当前的节点 3. /remain_state 为剩余待分类的样例 4. /remian_attribute 为剩余还没有考虑的属性 5. /返回根结点指针 6. Node * B

    2、ulidDecisionTreeDFS(Node * p, vector remain_state, vector remain_attribute) 7. /if(remain_state.size() 0) 8. /printv(remain_state); 9. / 10. if (p = NULL) 11. p = new Node(); 12. /先看搜索到树叶的情况 13. if (AllTheSameLabel(remain_state, yes) 14. p-attribute = yes; 15. return p; 16. 17. if (AllTheSameLabel(r

    3、emain_state, no) 18. p-attribute = no; 19. return p; 20. 21. if(remain_attribute.size() = 0)/所有的属性均已经考虑完了 ,还没有分尽 22. string label = MostCommonLabel(remain_state); 23. p-attribute = label; 24. return p; 25. 26. 27. double max_gain = 0, temp_gain; 28. vector :iterator max_it; 29. vector :iterator it1;

    4、 30. for(it1 = remain_attribute.begin(); it1 max_gain) 33. max_gain = temp_gain; 34. max_it = it1; 35. 36. 37. /下面根据 max_it 指向的属性来划分当前样例,更新样例集和属性集 38. vector new_attribute; 39. vector new_state; 家用吸氧机价格 http:/40. for(vector :iterator it2 = remain_attribute.begin(); it2 attribute = *max_it; 45. vecto

    5、r values = map_attribute_values*max_it; 46. int attribue_num = FindAttriNumByName(*max_it); 47. new_state.push_back(attribute_row); 48. for(vector :iterator it3 = values.begin(); it3 arrived_value = *it3; 56. if(new_state.size() = 0)/表示当前没有这个分支的样例,当前的 new_node 为叶子节点 57. new_node-attribute = MostComm

    6、onLabel(remain_state); 58. 59. else 60. BulidDecisionTreeDFS(new_node, new_state, new_attribute); 61. /递归函数返回时即回溯时需要 1 将新结点加入父节点孩子容器 2 清除 new_state 容器 62. p-childs.push_back(new_node); 63. new_state.erase(new_state.begin()+1,new_state.end();/注意先清空 new_state 中的前一个取值的样例,准备遍历下一个取值样例 64. 65. return p; 6

    7、6. 1.2.3、ID3 算法决策树的形成OK,下图为 ID3 算法第一步后形成的部分决策树。这样综合起来看,就容易理解多了。1、overcast 样例必为正,所以为叶子结点,总为 yes;2、ID3 无回溯,局部最优,而非全局最优,还有另一种树后修剪决策树。下图是 ID3 算法第一步后形成的部分决策树:家用吸氧机价格 http:/如上图,训练样例被排列到对应的分支结点。分支 Overcast 的所有样例都是正例,所以成为目标分类为 Yes 的叶结点。另两个结点将被进一步展开,方法是按照新的样例子集选取信息增益最高的属性。1.3、C4.5 算法1.3.1、ID3 算法的改进:C4.5 算法C4

    8、.5,是机器学习算法中的另一个分类决策树算法,它是决策树(决策树也就是做决策的节点间的组织方式像一棵树,其实是一个倒树)核心算法,也是上文 1.2 节所介绍的 ID3的改进算法,所以基本上了解了一半决策树构造方法就能构造它。决策树构造方法其实就是每次选择一个好的特征以及分裂点作为当前节点的分类条件。既然说 C4.5 算法是 ID3 的改进算法,那么 C4.5 相比于 ID3 改进的地方有哪些呢?:1. 用信息增益率来选择属性。ID3 选择属性用的是子树的信息增益,这里可以用很多方法来定义信息,ID3 使用的是熵(entropy,熵是一种不纯度度量准则),也就是熵的变化值,而 C4.5 用的是信

    9、息增益率。对,区别就在于一个是信息增益,一个是信息增益率。家用吸氧机价格 http:/2. 在树构造过程中进行剪枝,在构造决策树的时候,那些挂着几个元素的节点,不考虑最好,不然容易导致 overfitting。3. 对非离散数据也能处理。4. 能够对不完整数据进行处理针对上述第一点,解释下:一般来说率就是用来取平衡用的,就像方差起的作用差不多,比如有两个跑步的人,一个起点是 10m/s 的人、其 10s 后为 20m/s;另一个人起速是1m/s、其 1s 后为 2m/s。如果紧紧算差值那么两个差距就很大了,如果使用速度增加率( 加速度,即都是为 1m/s2)来衡量,2 个人就是一样的加速度。因

    10、此,C4.5 克服了 ID3 用信息增益选择属性时偏向选择取值多的属性的不足。C4.5 算法之信息增益率OK,既然上文中提到 C4.5 用的是信息增益率,那增益率的具体是如何定义的呢?:是的,在这里,C4.5 算法不再是通过信息增益来选择决策属性。一个可以选择的度量标准是增益比率 gain ratio(Quinlan 1986)。增益比率度量是用前面的增益度量Gain(S,A)和分裂信息度量 SplitInformation(S,A)来共同定义的,如下所示:其中,分裂信息度量被定义为(分裂信息用来衡量属性分裂数据的广度和均匀):其中 S1 到 Sc 是 c 个值的属性 A 分割 S 而形成的

    11、c 个样例子集。注意分裂信息实际上就是 S 关于属性 A 的各值的熵。这与我们前面对熵的使用不同,在那里我们只考虑 S 关于学习到的树要预测的目标属性的值的熵。请注意,分裂信息项阻碍选择值为均匀分布的属性。例如,考虑一个含有 n 个样例的集合被属性 A 彻底分割(译注:分成 n 组,即一个样例一组)。这时分裂信息的值为log2n。相反,一个布尔属性 B 分割同样的 n 个实例,如果恰好平分两半,那么分裂信息是 1。如果属性 A 和 B 产生同样的信息增益,那么根据增益比率度量,明显 B 会得分更高。家用吸氧机价格 http:/使用增益比率代替增益来选择属性产生的一个实际问题是,当某个 Si 接

    12、近 S(| Si|S|)时分母可能为 0 或非常小。如果某个属性对于 S 的所有样例有几乎同样的值,这时要么导致增益比率未定义,要么是增益比率非常大。为了避免选择这种属性,我们可以采用这样一些启发式规则,比如先计算每个属性的增益,然后仅对那些增益高过平均值的属性应用增益比率测试(Quinlan 1986)。除了信息增益,Lopez de Mantaras(1991)介绍了另一种直接针对上述问题而设计的度量,它是基于距离的(distance-based)。这个度量标准基于所定义的一个数据划分间的距离尺度。具体更多请参看:Tom M.Mitchhell 所著的机器学习之 3.7.3 节。1.3.2

    13、、C4.5 算法构造决策树的过程1. Function C4.5(R:包含连续属性的无类别属性集合,C:类别属性,S:训练集) 2. /*返回一棵决策树 */ 3. Begin 4. If S 为空,返回一个值为 Failure 的单个节点; 5. If S 是由相同类别属性值的记录组成, 6. 返回一个带有该值的单个节点; 7. If R 为空,则返回一个单节点,其值为在 S 的记录中找出的频率最高的类别属性值 ; 8. 注意未出现错误则意味着是不适合分类的记录 ; 9. For 所有的属性 R(Ri) Do 10. If 属性 Ri 为连续属性,则 11. Begin 12. 将 Ri 的

    14、最小值赋给 A1: 13. 将 Rm 的最大值赋给 Am;/*m 值手工设置*/ 14. For j From 2 To m-1 Do Aj=A1+j*(A1Am)/m; 15. 将 Ri 点的基于Aj的最大信息增益属性(Ri,S)赋给 A; 16. End; 17. 将 R 中属性之间具有最大信息增益的属性(D,S)赋给 D; 18. 将属性 D 的值赋给dj/j=1,2.m; 19. 将分别由对应于 D 的值为 dj 的记录组成的 S 的子集赋给sj/j=1,2.m; 20. 返回一棵树,其根标记为 D;树枝标记为 d1,d2.dm; 21. 再分别构造以下树: 22. C4.5(R-D,

    15、C,S1),C4.5(R-D,C,S2).C4.5(R-D,C,Sm); 23. End C4.5 1.3.3、C4.5 算法实现中的几个关键步骤在上文中,我们已经知道了决策树学习 C4.5 算法中 4 个重要概念的表达,如下:家用吸氧机价格 http:/1.2.3.4.接下来,咱们写下代码实现,1、信息熵1. double C4_5:entropy(int *attrClassCount, int classNum, int allNum) 2. double iEntropy = 0.0; 3. for(int i = 0; i attriCount, double pEntropy) 2

    16、. int* attriNum = new intattriCount.size(); 3. int allNum = 0; 4. 5. for(int i = 0; i attrIndex, vector* sampleCount) 2. int bestIndex = 0; 3. double maxGainRatio = 0.0; 4. int classNum = (int)(decisionsattrIndex(int)attrIndex.size()-1).size();/number of class 5. 6. /computer the class entropy 7. in

    17、t* temp = new intclassNum; 8. int allNum = 0; 9. for(int i = 0; i maxGainRatio) 20. bestIndex = i; 21. maxGainRatio = gainR; 22. 23. 24. return bestIndex; 25. 4、还有一系列建树,打印树的步骤,此处略过。1.4、决策树归纳的特点略过家用吸氧机价格 http:/第二部分、贝叶斯分类说实话,友人刘未鹏有一篇讲的贝叶斯的文章:数学之美番外篇:平凡而又神奇的贝叶斯方法,已经把贝叶斯讲的很清晰透彻了,我再讲也是如李白看到崔颢在黄鹤楼上所提的:登黄鹤

    18、楼昔人已乘黄鹤去,此地空余黄鹤楼;黄鹤一去不复返,白云千载空悠悠。后便大为折服,已无什兴致再提了(偶现在就是这感觉),然文章还得继续写。So ,本文第二部分之大部分基本整理自未鹏兄之手,若有任何不妥之处,还望读者和未鹏兄海涵,谢谢。2.1、什么是贝叶斯分类贝叶斯定理:已知某条件概率,如何得到两个事件交换后的概率,也就是在已知 P(A|B)的情况下如何求得 P(B|A)。这里先解释什么是条件概率:表示事件 B 已经发生的前提下,事件 A 发生的概率,叫做事件 B 发生下事件 A 的条件概率。其基本求解公式为: 。贝叶斯定理之所以有用,是因为我们在生活中经常遇到这种情况:我们可以很容易直接得出 P

    19、(A|B),P(B|A) 则很难直接得出,但我们更关心 P(B|A),贝叶斯定理就为我们打通从 P(A|B)获得 P(B|A)的道路。下面不加证明地直接给出贝叶斯定理(公式被网友指出有问题,待后续验证改正):2.2 贝叶斯公式如何而来贝叶斯公式是怎么来的?下面是 wikipedia 上的一个例子:一所学校里面有 60% 的男生, 40% 的女生。男生总是穿长裤,女生则一半穿长裤一半穿裙子。有了这些信息之后我们可以容易地计算 “随机选取一个学生,他(她)穿长裤的概率家用吸氧机价格 http:/和穿裙子的概率是多大 ”,这个就是前面说的 “正向概率 ”的计算。然而,假设你走在校园中,迎面走来一个穿

    20、长裤的学生(很不幸的是你高度近似,你只看得见他(她)穿的是否长裤,而无法确定他(她)的性别),你能够推断出他(她)是男生的概率是多大吗?一些认知科学的研究表明(决策与判断以及Rationality for Mortals第 12 章:小孩也可以解决贝叶斯问题),我们对形式化的贝叶斯问题不擅长,但对于以频率形式呈现的等价问题却很擅长。在这里,我们不妨把问题重新叙述成:你在校园里面随机游走,遇到了 N 个穿长裤的人(仍然假设你无法直接观察到他们的性别),问这 N 个人里面有多少个女生多少个男生。你说,这还不简单:算出学校里面有多少穿长裤的,然后在这些人里面再算出有多少女生,不就行了?我们来算一算:

    21、假设学校里面人的总数是 U 个。60% 的男生都穿长裤,于是我们得到了 U * P(Boy) * P(Pants|Boy) 个穿长裤的(男生)(其中 P(Boy) 是男生的概率 = 60%,这里可以简单的理解为男生的比例;P(Pants|Boy) 是条件概率,即在 Boy 这个条件下穿长裤的概率是多大,这里是 100% ,因为所有男生都穿长裤)。 40% 的女生里面又有一半(50%)是穿长裤的,于是我们又得到了 U * P(Girl) * P(Pants|Girl) 个穿长裤的(女生)。加起来一共是 U * P(Boy) * P(Pants|Boy) + U * P(Girl) * P(Pan

    22、ts|Girl) 个穿长裤的,其中有 U * P(Girl) * P(Pants|Girl) 个女生。两者一比就是你要求的答案。下面我们把这个答案形式化一下:我们要求的是 P(Girl|Pants) (穿长裤的人里面有多少女生),我们计算的结果是 U * P(Girl) * P(Pants|Girl) / U * P(Boy) * P(Pants|Boy) + U * P(Girl) * P(Pants|Girl) 。容易发现这里校园内人的总数是无关的,可以消去。于是得到P(Girl|Pants) = P(Girl) * P(Pants|Girl) / P(Boy) * P(Pants|Boy

    23、) + P(Girl) * P(Pants|Girl)注意,如果把上式收缩起来,分母其实就是 P(Pants) ,分子其实就是 P(Pants, Girl) 。而这个比例很自然地就读作:在穿长裤的人( P(Pants) )里面有多少(穿长裤)的女孩( P(Pants, Girl) )。上式中的 Pants 和 Boy/Girl 可以指代一切东西,So ,其一般形式就是:P(A|B) = P(A|B) * P(B) / P(A|B) * P(B) + P(A|B) * P(B) 收缩起来就是:P(A|B) = P(AB) / P(B)其实这个就等于:P(A|B) * P(B) = P(AB)家用

    24、吸氧机价格 http:/更进一步阐述,P(A|B)便是在条件 B 的情况下,A 出现的概率是多大。然看似这么平凡的贝叶斯公式,背后却隐含着非常深刻的原理。2.3、拼写纠正经典著作人工智能:现代方法的作者之一 Peter Norvig 曾经写过一篇介绍如何写一个拼写检查/纠正器的文章,里面用到的就是贝叶斯方法,这里我们不打算复述他写的文章,而是简要地将其核心思想介绍一下。首先,我们需要询问的是:“问题是什么?”问题是我们看到用户输入了一个不在字典中的单词,我们需要去猜测:“ 这个家伙到底真正想输入的单词是什么呢?”用刚才我们形式化的语言来叙述就是,我们需要求:P(我们猜测他想输入的单词 | 他实

    25、际输入的单词)这个概率。并找出那个使得这个概率最大的猜测单词。显然,我们的猜测未必是唯一的,就像前面举的那个自然语言的歧义性的例子一样;这里,比如用户输入: thew ,那么他到底是想输入 the ,还是想输入 thaw ?到底哪个猜测可能性更大呢?幸运的是我们可以用贝叶斯公式来直接出它们各自的概率,我们不妨将我们的多个猜测记为 h1 h2 ( h 代表 hypothesis),它们都属于一个有限且离散的猜测空间 H (单词总共就那么多而已),将用户实际输入的单词记为 D ( D 代表 Data ,即观测数据),于是P(我们的猜测 1 | 他实际输入的单词)可以抽象地记为:P(h1 | D)类

    26、似地,对于我们的猜测 2,则是 P(h2 | D)。不妨统一记为:P(h | D)运用一次贝叶斯公式,我们得到:P(h | D) = P(h) * P(D | h) / P(D)对于不同的具体猜测 h1 h2 h3 ,P(D) 都是一样的,所以在比较 P(h1 | D) 和 P(h2 | D) 的时候我们可以忽略这个常数。即我们只需要知道:家用吸氧机价格 http:/P(h | D) P(h) * P(D | h) (注:那个符号的意思是“正比例于” ,不是无穷大,注意符号右端是有一个小缺口的。)这个式子的抽象含义是:对于给定观测数据,一个猜测是好是坏,取决于“ 这个猜测本身独立的可能性大小(

    27、先验概率,Prior )”和“这个猜测生成我们观测到的数据的可能性大小”(似然,Likelihood )的乘积。具体到我们的那个 thew 例子上,含义就是,用户实际是想输入 the 的可能性大小取决于 the 本身在词汇表中被使用的可能性(频繁程度)大小(先验概率)和 想打 the 却打成 thew 的可能性大小(似然)的乘积。剩下的事情就很简单了,对于我们猜测为可能的每个单词计算一下 P(h) * P(D | h) 这个值,然后取最大的,得到的就是最靠谱的猜测。更多细节请参看未鹏兄之原文。2.4、贝叶斯的应用2.4.1、中文分词贝叶斯是机器学习的核心方法之一。比如中文分词领域就用到了贝叶斯

    28、。浪潮之巅的作者吴军在数学之美系列中就有一篇是介绍中文分词的。这里介绍一下核心的思想,不做赘述,详细请参考吴军的原文。分词问题的描述为:给定一个句子(字串),如:南京市长江大桥如何对这个句子进行分词(词串)才是最靠谱的。例如: 1. 南京市/长江大桥2. 南京/市长/江大桥这两个分词,到底哪个更靠谱呢?我们用贝叶斯公式来形式化地描述这个问题,令 X 为字串(句子),Y 为词串(一种特定的分词假设)。我们就是需要寻找使得 P(Y|X) 最大的 Y ,使用一次贝叶斯可得:P(Y|X) P(Y)*P(X|Y)用自然语言来说就是 这种分词方式(词串)的可能性 乘以 这个词串生成我们的句子的可能性。我们

    29、进一步容易看到:可以近似地将 P(X|Y) 看作是恒等于 1 的,因为任意假想的一种分词方式之下生成我们的句子总是精准地生成的(只需把分词之间的分界符号扔家用吸氧机价格 http:/掉即可)。于是,我们就变成了去最大化 P(Y) ,也就是寻找一种分词使得这个词串(句子)的概率最大化。而如何计算一个词串:W1, W2, W3, W4 的可能性呢?我们知道,根据联合概率的公式展开:P(W1, W2, W3, W4 ) = P(W1) * P(W2|W1) * P(W3|W2, W1) * P(W4|W1,W2,W3) * 于是我们可以通过一系列的条件概率(右式)的乘积来求整个联合概率。然而不幸的是

    30、随着条件数目的增加(P(Wn|Wn-1,Wn-2,W1) 的条件有 n-1 个),数据稀疏问题也会越来越严重,即便语料库再大也无法统计出一个靠谱的 P(Wn|Wn-1,Wn-2,W1) 来。为了缓解这个问题,计算机科学家们一如既往地使用了“天真”假设:我们假设句子中一个词的出现概率只依赖于它前面的有限的 k 个词(k 一般不超过 3,如果只依赖于前面的一个词,就是 2 元语言模型(2-gram),同理有 3-gram 、 4-gram 等),这个就是所谓的“有限地平线” 假设。虽然上面这个假设很傻很天真,但结果却表明它的结果往往是很好很强大的,后面要提到的朴素贝叶斯方法使用的假设跟这个精神上是

    31、完全一致的,我们会解释为什么像这样一个天真的假设能够得到强大的结果。目前我们只要知道,有了这个假设,刚才那个乘积就可以改写成: P(W1) * P(W2|W1) * P(W3|W2) * P(W4|W3) (假设每个词只依赖于它前面的一个词)。而统计 P(W2|W1) 就不再受到数据稀疏问题的困扰了。对于我们上面提到的例子“南京市长江大桥”,如果按照自左到右的贪婪方法分词的话,结果就成了 “南京市长/江大桥”。但如果按照贝叶斯分词的话(假设使用 3-gram),由于“南京市长” 和“江大桥”在语料库中一起出现的频率为 0 ,这个整句的概率便会被判定为 0 。 从而使得“南京市/长江大桥”这一分

    32、词方式胜出。2.4.2、贝叶斯图像识别,Analysis by Synthesis贝叶斯方法是一个非常 general 的推理框架。其核心理念可以描述成:Analysis by Synthesis (通过合成来分析)。06 年的认知科学新进展上有一篇 paper 就是讲用贝叶斯推理来解释视觉识别的,一图胜千言,下图就是摘自这篇 paper :家用吸氧机价格 http:/首先是视觉系统提取图形的边角特征,然后使用这些特征自底向上地激活高层的抽象概念(比如是 E 还是 F 还是等号),然后使用一个自顶向下的验证来比较到底哪个概念最佳地解释了观察到的图像。2.4.3、最大似然与最小二乘学过线性代数的

    33、大概都知道经典的最小二乘方法来做线性回归。问题描述是:给定平面上 N 个点,(这里不妨假设我们想用一条直线来拟合这些点回归可以看作是拟合的特例,即允许误差的拟合),找出一条最佳描述了这些点的直线。一个接踵而来的问题就是,我们如何定义最佳?我们设每个点的坐标为 (Xi, Yi) 。如果直线为 y = f(x) 。那么 (Xi, Yi) 跟直线对这个点的“预测”:(Xi, f(Xi) 就相差了一个 Yi = |Yi f(Xi)| 。最小二乘就是说寻找直线使得 (Y1)2 + (Y2)2 + (即误差的平方和)最小,至于为什么是误差的平方和而不是误差的绝对值和,统计学上也没有什么好的解释。然而贝叶斯

    34、方法却能对此提供一个完美的解释。我们假设直线对于坐标 Xi 给出的预测 f(Xi) 是最靠谱的预测,所有纵坐标偏离 f(Xi) 的那些数据点都含有噪音,是噪音使得它们偏离了完美的一条直线,一个合理的假设就是偏离路线越远的概率越小,具体小多少,可以用一个正态分布曲线来模拟,这个分布曲线以直线对 Xi 给出的预测 f(Xi) 为中心,实际纵坐标为 Yi 的点 (Xi, Yi) 发生的概率就正比于 EXP-(Yi)2。(EXP() 代表以常数 e 为底的多少次方)。现在我们回到问题的贝叶斯方面,我们要想最大化的后验概率是:P(h|D) P(h) * P(D|h)又见贝叶斯!这里 h 就是指一条特定的

    35、直线,D 就是指这 N 个数据点。我们需要寻找一条直线 h 使得 P(h) * P(D|h) 最大。很显然,P(h) 这个先验概率是均匀的,因为哪条直线也不比另一条更优越。所以我们只需要看 P(D|h) 这一项,这一项是指这条直线生成这些数据点的概率,刚才说过了,生成数据点 (Xi, Yi) 的概率为 EXP-(Yi)2 乘以一个常数。而 P(D|h) = P(d1|h) * P(d2|h) * 即假设各个数据点是独立生成的,所以可以把家用吸氧机价格 http:/每个概率乘起来。于是生成 N 个数据点的概率为 EXP-(Y1)2 * EXP-(Y2)2 * EXP-(Y3)2 * = EXP-

    36、(Y1)2 + (Y2)2 + (Y3)2 + 最大化这个概率就是要最小化 (Y1)2 + (Y2)2 + (Y3)2 + 。 熟悉这个式子吗?除了以上所介绍的之外,贝叶斯还在词义消岐,语言模型的平滑方法中都有一定应用。下节,咱们再来简单看下朴素贝叶斯方法。2.5、朴素贝叶斯方法朴素贝叶斯方法是一个很特别的方法,所以值得介绍一下。在众多的分类模型中,应用最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Bayesian Model,NBC)。 朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。同时,NBC 模型所需

    37、估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,NBC 模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为 NBC 模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给 NBC模型的正确分类带来了一定影响。在属性个数比较多或者属性之间相关性较大时,NBC 模型的分类效率比不上决策树模型。而在属性相关性较小时,NBC 模型的性能最为良好。接下来,我们用朴素贝叶斯在垃圾邮件过滤中的应用来举例说明。2.5.1、贝叶斯垃圾邮件过滤器问题是什么?问题是,给定一封邮件,判定它是否属于垃圾邮件。按照先例,我们还是用 D 来表示这封邮件,注意 D 由 N 个单词

    38、组成。我们用 h+ 来表示垃圾邮件,h- 表示正常邮件。问题可以形式化地描述为求:P(h+|D) = P(h+) * P(D|h+) / P(D)P(h-|D) = P(h-) * P(D|h-) / P(D)其中 P(h+) 和 P(h-) 这两个先验概率都是很容易求出来的,只需要计算一个邮件库里面垃圾邮件和正常邮件的比例就行了。然而 P(D|h+) 却不容易求,因为 D 里面含有 N 个单词 d1, d2, d3, ,所以 P(D|h+) = P(d1,d2,dn|h+) 。我们又一次遇到了数据稀疏性,为什么这么说呢?P(d1,d2,dn|h+) 就是说在垃圾邮件当中出现跟我们目前这封邮件

    39、一模一样的一封邮件的概率是多大!开玩笑,每封邮件都是不同的,世界上有无穷多封邮件。瞧,这就是数据稀疏性,因为可以肯定地说,你收集的训练数据库不管里面含了多少封邮件,也不可能找出一封跟目前这封一模一样的。结果呢?我们又该如何来计算 P(d1,d2,dn|h+) 呢?我们将 P(d1,d2,dn|h+) 扩展为: P(d1|h+) * P(d2|d1, h+) * P(d3|d2,d1, h+) * 。熟悉这个式子吗?这里我们会使用一个更激进的假设,我们假设 di 与 di-1 是完全条件无关的,于是式子就简化为 P(d1|h+) * P(d2|h+) * P(d3|h+) * 。这个就是所谓的条

    40、件独立假设,也正是朴素贝叶斯方法的朴素之处。而计算 P(d1|h+) * P(d2|h+) * P(d3|h+) * 就家用吸氧机价格 http:/太简单了,只要统计 di 这个单词在垃圾邮件中出现的频率即可。关于贝叶斯垃圾邮件过滤更多的内容可以参考这个条目,注意其中提到的其他资料。2.6、层级贝叶斯模型层级贝叶斯模型是现代贝叶斯方法的标志性建筑之一。前面讲的贝叶斯,都是在同一个事物层次上的各个因素之间进行统计推理,然而层次贝叶斯模型在哲学上更深入了一层,将这些因素背后的因素(原因的原因,原因的原因,以此类推)囊括进来。一个教科书例子是:如果你手头有 N 枚硬币,它们是同一个工厂铸出来的,你把

    41、每一枚硬币掷出一个结果,然后基于这 N 个结果对这 N 个硬币的 (出现正面的比例)进行推理。如果根据最大似然,每个硬币的 不是 1 就是 0 (这个前面提到过的),然而我们又知道每个硬币的 p() 是有一个先验概率的,也许是一个 beta 分布。也就是说,每个硬币的实际投掷结果 Xi 服从以 为中心的正态分布,而 又服从另一个以 为中心的 beta 分布。层层因果关系就体现出来了。进而 还可能依赖于因果链上更上层的因素,以此类推。第三部分、从 EM 算法到隐马可夫模型(HMM)3.1、EM 算法与基于模型的聚类在统计计算中,最大期望 (EM,Expectation Maximization)

    42、算法是在概率(probabilistic)模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐藏变量(Latent Variabl)。最大期望经常用在机器学习和计算机视觉的数据集聚(Data Clustering)领域。通常来说,聚类是一种无指导的机器学习问题,如此问题描述:给你一堆数据点,让你将它们最靠谱地分成一堆一堆的。聚类算法很多,不同的算法适应于不同的问题,这里仅介绍一个基于模型的聚类,该聚类算法对数据点的假设是,这些数据点分别是围绕 K 个家用吸氧机价格 http:/核心的 K 个正态分布源所随机生成的,使用 Han JiaWei 的Data Ming: Concepts

    43、 and Techniques中的图:图中有两个正态分布核心,生成了大致两堆点。我们的聚类算法就是需要根据给出来的那些点,算出这两个正态分布的核心在什么位置,以及分布的参数是多少。这很明显又是一个贝叶斯问题,但这次不同的是,答案是连续的且有无穷多种可能性,更糟的是,只有当我们知道了哪些点属于同一个正态分布圈的时候才能够对这个分布的参数作出靠谱的预测,现在两堆点混在一块我们又不知道哪些点属于第一个正态分布,哪些属于第二个。反过来,只有当我们对分布的参数作出了靠谱的预测时候,才能知道到底哪些点属于第一个分布,那些点属于第二个分布。这就成了一个先有鸡还是先有蛋的问题了。为了解决这个循环依赖,总有一方

    44、要先打破僵局,说,不管了,我先随便整一个值出来,看你怎么变,然后我再根据你的变化调整我的变化,然后如此迭代着不断互相推导,最终收敛到一个解。这就是 EM 算法。EM 的意思是“Expectation-Maximazation”,在这个聚类问题里面,我们是先随便猜一下这两个正态分布的参数:如核心在什么地方,方差是多少。然后计算出每个数据点更可能属于第一个还是第二个正态分布圈,这个是属于 Expectation 一步。有了每个数据点的归属,我们就可以根据属于第一个分布的数据点来重新评估第一个分布的参数(从蛋再回到鸡),这个是 Maximazation 。如此往复,直到参数基本不再发生变化为止。这个

    45、迭代收敛过程中的贝叶斯方法在第二步,根据数据点求分布的参数上面。3.2、隐马可夫模型(HMM)大多的书籍或论文都讲不清楚这个隐马可夫模型(HMM),包括未鹏兄之原文也讲得不够具体明白。接下来,我尽量用直白易懂的语言阐述这个模型。然在介绍隐马可夫模型之前,有必要先行介绍下单纯的马可夫模型(本节主要引用:统计自然语言处理,宗成庆编著一书上的相关内容)。家用吸氧机价格 http:/3.2.1、马可夫模型我们知道,随机过程又称随机函数,是随时间而随机变化的过程。马可夫模型便是描述了一类重要的随机过程。我们常常需要考察一个随机变量序列,这些随机变量并不是相互独立的(注意:理解这个非相互独立,即相互之间有

    46、千丝万缕的联系) 。如果此时,我也搞一大推状态方程式,恐怕我也很难逃脱越讲越复杂的怪圈了。所以,直接举例子吧,如,一段文字中名词、动词、形容词三类词性出现的情况可由三个状态的马尔科夫模型描述如下:状态 s1:名词状态 s2:动词状态 s3:形容词假设状态之间的转移矩阵如下:s1 s2 s3s1 0.3 0.5 0.2A = aij = s2 0.5 0.3 0.2s3 0.4 0.2 0.4如果在该段文字中某一个句子的第一个词为名词,那么根据这一模型 M,在该句子中这三类词出现顺序为 O=“名动形名”的概率为:P(O|M)=P(s1,s2 ,s3,s1 | M) = P(s1) P(s2 |

    47、s1) * P(s3 | s2)*P(s1 | s3)=1* a12 * a23 * a31=0.5*0.2*0.4=0.004马尔可夫模型又可视为随机的有限状态机。马尔柯夫链可以表示成状态图(转移弧上有概率的非确定的有限状态自动机),如下图所示,家用吸氧机价格 http:/在上图中,圆圈表示状态,状态之间的转移用带箭头的弧表示,弧上的数字为状态转移的概率,初始状态用标记为 start 的输入箭头表示,假设任何状态都可作为终止状态。图中零概率的转移弧省略,且每个节点上所有发出弧的概率之和等于 1。从上图可以看出,马尔可夫模型可以看做是一个转移弧上有概率的非确定的有限状态自动机。3.2.2、隐马可夫模型(HMM)在上文介绍的马可夫模型中,每个状态代表了一个可观察的事件,所以,马可夫模型有时

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:贝叶斯分类算法.docx
    链接地址:https://www.docduoduo.com/p-6545869.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开