一、算法简介:
该算法的基本知识,季季都已经写在这了用朴素贝叶斯做内容分类;这里再稍微重复一下,所谓“贝叶斯”,就是指概率计算中的贝叶斯公式;所谓“朴素”,是指该算法的一个前提假设,即给定类别Y的情况下,观察到联合的W1、W2、 ...、Wn的概率为: ( P(w_{1},w_{2},...,w_{n}|Y)=prod_{i=1}^{n} P(w_{i}|Y) )
二、算法实现:
1)特征值选取:
目前选取特征值的方法比较简单,主要是按照词频的大小,从每条微博中(包括训练集和测试集的微博)选取词频最高的前N个词作为特征值,记为 ( features(tweet)=ig{w_{1},w_{2},...,w_{N},forall i eq j,w_{i} eq w_{j}ig}; )
现在我们已经尝试了N=10,N=20和取微博中全部的词作为特征值的情况;
- 对于训练集,按类选取特征值,每个类的特征值为该类下所有微博的特征值的总和,即 ( features(category Y) = ig{features(tweet)|forall tweet, s.t. category(tweet)=Y ig}; )
- 对于预测集,基于每条微博选取特征值,从每条微博中选取出现频率最高的前N个词作为特征值;
2)计算后验概率:
即该tweet属于某一类的概率,设该tweet的特征值为 ( w_{1},w_{2},...,w_{N} ) ,现有M个分类 ( C_{1},C_{2},...,C_{M} ) ,根据贝叶斯公式,得该tweet属于类Ci的概率P(Ci | tweet)为:
[ Pig{C_{i}|tweetig}=frac{Pig{tweet|C_{i}ig}P(C_{i})}{Pig(tweetig)} =frac{Pig{tweet|C_{i}ig}P(C_{i})}{sum_{i=1}^M Pig{tweet|C_{i}ig}P(C_{i})} =frac{prod_{j=1}^N Pig{w_{j}|C_{i}ig}Pig(C_{i}ig)}{ sum_{i=1}^M prod_{j=1}^N Pig{w_{j}|C_{i}ig}Pig(C_{i}ig)} ]
其中, ( Pig(C_{i}ig) ) 为Ci这个类下的微博数除以训练集全部的微博数, ( Pig{w_{j}|C_{i}ig} ) 为Wj在Ci类的特征值中出现的次数除以Ci类中特征值的总数。如果 ( Pig{w_{j}|C_{i}ig} ) 为0,则进行平滑处理,赋为一个很小的概率 ( P_{0} = frac{1}{count(tweets)+1} ) ,count(tweets)为训练集中全体的微博数。
三、计算结果:
利用11月7日review之后的标注结果review_category_20121107.xlsx,我们得到了N(特征值个数)等于10、20和全部词时几个类的PR曲线,蓝色表示N=10,黑色表示N=20,红色表示全部的词,具体结果如下:
四、总结
目前对于贝叶斯算法的尝试还处于初级阶段,对于选取特征值的方法有些简单,还应考虑用互信息和最大熵的方法来选择特征值,或者其他改进的方法。