Board logo

标题: 判别模型、生成模型与朴素贝叶斯方法(3) [打印本页]

作者: yuyang911220    时间: 2016-7-11 10:02     标题: 判别模型、生成模型与朴素贝叶斯方法(3)

换种思路,我们要求的是p(y|x),根据生成模型定义我们可以求p(x|y)和p(y)。假设x中的特征是条件独立的。这个称作朴素贝叶斯假设。如果一封邮件是垃圾邮件(y=1),且这封邮件出现词“buy”与这封邮件是否出现“price”无关,那么“buy”和“price”之间是条件独立的。  
形式化表示为,(如果给定Z的情况下,X和Y条件独立):  
  
也可以表示为:  
  
回到问题中  
  
这个与NLP中的n元语法模型有点类似,这里相当于unigram。  
这里我们发现朴素贝叶斯假设是约束性很强的假设,“buy”从通常上讲与“price”是有关系,我们这里假设的是条件独立。(注意条件独立和独立是不一样的)  
建立形式化的模型表示:  
  
  
  
那么我们想要的是模型在训练数据上概率积能够最大,即最大似然估计如下:  
  
注意这里是联合概率分布积最大,说明朴素贝叶斯是生成模型。  
求解得:  
  
最后一个式子是表示y=1的样本数占全部样本数的比例,前两个表示在y=1或0的样本中,特征Xj=1的比例。  
然而我们要求的是  
  
实际是求出分子即可,分母对y=1和y=0都一样。  
当然,朴素贝叶斯方法可以扩展到x和y都有多个离散值的情况。对于特征是连续值的情况,我们也可以采用分段的方法来将连续值转化为离散值。具体怎么转化能够最优,我们可以采用信息增益的度量方法来确定(参见Mitchell的《机器学习》决策树那一章)。  
比如房子大小可以如下划分成离散值:  
  
4拉普拉斯平滑朴素贝叶斯方法有个致命的缺点就是对数据稀疏问题过于敏感。  
比如前面提到的邮件分类,现在新来了一封邮件,邮件标题是“NIPS call for papers”。我们使用更大的网络词典(词的数目由5000变为35000)来分类,假设NIPS这个词在字典中的位置是35000。然而NIPS这个词没有在训练数据中出现过,这封邮件第一次出现了NIPS。那我们算概率的时候如下:  
  
由于NIPS在以前的不管是垃圾邮件还是正常邮件都没出现过,那么结果只能是0了。  
显然最终的条件概率也是0。  
  
原因就是我们的特征概率条件独立,使用的是相乘的方式来得到结果。  
为了解决这个问题,我们打算给未出现特征值,赋予一个“小”的值而不是0。  
具体平滑方法如下:  
假设离散型随机变量z有{1,2,…,k}个值,我们用来表示每个值的概率。假设有m个训练样本中,z的观察值是其中每一个观察值对应k个值中的一个。那么根据原来的估计方法可以得到  
  
说白了就是z=j出现的比例。  
拉普拉斯平滑法将每个k值出现次数事先都加1,通俗讲就是假设他们都出现过一次。  
那么修改后的表达式为:  
  
每个z=j的分子都加1,分母加k。可见。  
这个有点像NLP里面的加一平滑法,当然还有n多平滑法了,这里不再详述。
Technorati 标签: Machine Learning
回到邮件分类的问题,修改后的公式为:  

作者: yuchengze    时间: 2016-8-20 13:14

很好的资料,感谢楼主的分享




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0