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