朴素贝叶斯分类器
naive bayes classifier。
序
以前曾记得语文老师多次提到,即使是同一篇文章,在不同的时间阅读,也会有不同的感受,温习一下贝叶斯分类器。
概率模型
首先是一个条件概率模型,也就是说,我们有了很多历史知识(训练数据),可以计算出先验概率,利用先验概率,对未来的情况做预测。举个例子:
刮大风(特征1)、飘来乌云(特征2),远处有雷声(特征3),结果下雨了。在生活中,大量存在类似重复事件,那么一个人通过这些数据,在脑海里得出一个先验概率的数学模型,一旦出现这些特征,可以预测“下雨”的概率很大。
“以史为鉴可以知兴衰”,其中的道理如出一辙。
回到数学模型里来:
特征向量:
x1,x2,...,xn
, 共
n
个维度,
特征的选取是非常重要的,往往决定成败。比如:如果选择隔壁家李奶奶是否买菜这个特征来预测下雨,那么大概率是失败的。读历史,里面的特征非常之多,而且在不同的历史时期,不同特征所起的作用不同,如果悟不出规律,那对未来历史趋势的把握也是不准确的。
特征向量:
X=(x1,x2,...,xn)
分类标签:
C={C1,C2,...,Cm},Ck∈C,m=|C|
训练样本:
p(X,Ck)
目标公式:
p(Ck|x1,...xn)
找到合适的
Ck
推导过程:
1:p(X)=λ为常量,因为在后续找最大类别的过程,这个值都是一样的,不需要计算。
2:特征之间是独立的.
目标公式重新定义,则是找到最大概率( Maximum_a_posteriori_estimation)的那个类别
仔细分析上述问题,需要计算的变量基本上就两个:第一个,类别的统计分布;第二个,每个类别下的特征的统计分布。如果用下雨天(假设还有晴天,两个类别),那么我们要做的就是:统计雨天和晴天的比例;以及下雨天刮风等特征的出现次数等,即完成了模型的训练。
文本分类
如果应用到文本分类,我们主要看两类方法来计算 y^ 。
多项式模型(multinomial model)
其中,特征变为 ti ,在文本分类多项式模型里,用的是词(term)作为特征,重复的词会计算,特征值是词频。而下面的伯努利模型主要依赖于出现与否的特征,用的是document的粒度。
进一步推导:
其中
伯努利模型(Bernoulli model)
推导:
其中
小结
多项式模型(multinomial model)即为词频型和伯努利模型(Bernoulli model)即文档型。二者的计算粒度不一样,多项式模型以单词为粒度,伯努利模型以文件为粒度,因此二者的先验概率和类条件概率的计算方法都不同。下面的截图来自斯坦福大学的NLP组的文档,应该比较权威,请参考。建议大家阅读的时候尽量参考权威资料。
一个简单应用
很多搜索引擎都有搜索日志以及后续的点击序列,经过简单收集,每行的格式如下:
channel,query,frequency
;就是频道,搜索词,频度。
一些例子:
channel | frequency | query |
---|---|---|
IMAGE | 344585 | 性感 |
MP3 | 266516 | 周杰伦 |
GAME | 76792 | 植物大战僵尸 |
… | … | … |
对上述的数据用贝叶斯多项式模型训练后,用得到的模型进行分类。可以作为搜索引擎用户意图识别的基础模块。
识别效果:
天下霸唱
/********The result of Bayes:*******/
[NOVEL 0.526067, WML 0.46736923, MP3 0.005137454]
黄海波嫖娼
/********The result of Bayes:*******/
[NEWS 0.7879512, WML 0.088670604, VIDEO 0.06866064, IMAGE 0.028800491]
天下霸唱,识别后的用户意图:小说、网页和音乐。从最后使用的效果来看,贝叶斯模型可以比较好的训练日志数据,并具有一定的扩展性,速度极快,效果不错。
最终的效果应该由三部分组成:日志语料的分布和质量、训练模型选择是否合理、参数调整。
扩展
如果对Query Intent Detection这个感兴趣的,可以用百度公开的搜索词日志数据进一步的研究。百度的数据加入了session的概念,还有点击url的title信息,更为全面。地址:
http://openresearch.baidu.com/activitycontent.jhtml?channelId=769
当然,如果提高精度,可以结合更多机器学习的方法,一直以为,最终的模型应该是层次化的,而且每层的训练都应该有不同的训练模型得出,毕竟每个模型可能都有优缺点,相互结合。
参考文献
http://nlp.stanford.edu/IR-book/pdf/13bayes.pdf
https://en.wikipedia.org/wiki/Naive_Bayes_classifier
http://openresearch.baidu.com/activitycontent.jhtml?channelId=769
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.217.2299&rep=rep1&type=pdf