• 朴素贝叶斯算法及不同特征值结果的比较


     一、算法简介:

           该算法的基本知识,季季都已经写在这了用朴素贝叶斯做内容分类;这里再稍微重复一下,所谓“贝叶斯”,就是指概率计算中的贝叶斯公式;所谓“朴素”,是指该算法的一个前提假设,即给定类别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,红色表示全部的词,具体结果如下:

     

                           

     

    四、总结

           目前对于贝叶斯算法的尝试还处于初级阶段,对于选取特征值的方法有些简单,还应考虑用互信息和最大熵的方法来选择特征值,或者其他改进的方法。

  • 相关阅读:
    txt文件按行处理工具类(可以截取小说、分析日志等)【我】
    java正则表达式取出匹配字符串
    svn客户端更改用户名
    Spring集成MyBatis完整示例
    redis的list取出数据方式速度测试
    处理大量数据的性能优化一例【我】
    unity3d结合轮廓显示,实现完整的框选目标(附Demo代码)
    Unity3dPro 和免费版的区别
    unity3d 射线扫描 忽略图层
    Unity3D角色攻击范围判定和攻击判定
  • 原文地址:https://www.cnblogs.com/thinkers-dym/p/3412438.html
Copyright © 2020-2023  润新知