朴素贝叶斯新闻分类器详解

机器学习的三要素是模型、策略(使用Cost Function计算这个模型是不是好的)和优化算法(不断的寻找最优参数,找到一个参数后用策略判断一下是不是可以,不行再找)。

一个具体的机器学习流程是怎么样的呢,下面使用朴素贝叶斯进行新闻分类进行一个完整的介绍。

1、特征表示


一篇新闻中,可以把新闻中出现的词作为特征向量表示出来,如 X = {昨日,是,国内,投资,市场…}

2、特征选择


特征中由于一些词对分类没有比较显著的帮助,甚至会有导致一些噪音,我们需要去除,如“是”、“昨日”等,经过选择的特征可能是 X = {国内,投资,市场…}

3、模型选择


这里选择朴素贝叶斯分类器,关于朴素贝叶斯可以参看刘未鹏的这篇博客,非常详细。

朴素贝叶斯本身非常简单,但是很多情况下这种简单的分类模型却很有效,在我对新闻进行分类测试的过程中,很容易就能达到93%以上的准确率,个别分类的精度能达到99%。

朴素贝叶斯模型的基本公式为:

其中,各个参数的含义为:

  1. $P(y_{i} X)$ 当前文档X属于分类Yi的概率
  2. $P(y_{i})$ 分类$y_{i}$的先验概率,即在整个训练集中这种分类的比率
  3. $P(X)$ 文档$X$的先验概率,每个文档在数据集中都是1/N的概率,可忽略
  4. $P(X y_{i})$ 在分类$y_{i}$中,文档X存在的概率

对于第4条,文档$X$存在于$y_{i}$中的概率,可以按照文档X中每个词在Yi中的概率相乘获得,即:

所以贝叶斯公式可以变形为:

其中,上面的那个参数$P(y_{i})$和$P(x_{j} y_{i})$可以根据最大似然估计法来估算,即:

表示当前分类的先验概率为当前分类下的文档数除以所有文档.

表示当前分类下出现的所有Xj词数除以当前分类下所有的词数.

这里需要注意的是,$P(x_{j} y_{i})$的计算方式主要有两种,上面所说的是新闻分类实践中效果较好的一种,叫做多项分布(Multinomial Distribution),就是单个文档中重复出现某个词的时候,出现几次计数几次,分母为所有词汇的总数。

另一种计算方式为,01分布(Binary Distribution),即单个文档中出现多次的词只计数一次,分母为所有文章的个数,而不是词的个数。

可能出现的问题一:


在进行预测的时候,如某篇文章包含“澳门”这个词,使用上面变形后的贝叶斯公式计算该文章是“体育”分类的时候,假如“体育”分类下从来没有出现过“澳门”这个词,就会导致

进一步导致整个贝叶斯概率为0,这是不合理的,所以我们要避免没有出现过的词概率为0的情况。

这里我们只需要使用一个平滑参数,让上式的分子分母同时加上一个小值即可,假如分子加上 lambda ,则分母需要加上 N * lambda,其中N为所有单词的去重后数量(这是因为分子为每一个词汇都要计算一次)。

这样就变成了:

可能出现的问题二:


由于贝叶斯公式中是所有的$P(x_{j}|y_{i})$求积,概率求积很可能遇到浮点数溢出的情况,这时候我们需要变通一下,把求积转换成求和,只需要对贝叶斯公式中分子求log即可(log(a * b) = log(a) + log(b)):

4、训练数据准备


我所使用的训练数据集为一批已经分好词的文本文件,文件名中包含它们所属的分类(auto、sports、business),为了让模型训练的时候更方便的读取和使用,我们把数据集按照一定比例(如80%)分为训练集和测试集:

5、模型训练


在模型训练的部分,我们需要的是求出模型公式中所有需要的参数,这样预测的时候可以直接调用用来预测一个新闻的分类。

模型训练的目标是获得一个概率矩阵:

需要注意的是,某个单词可能不在其中一个分类中,这时候该单词在该分类下的概率就是上面提到的拉普拉斯平滑取得的默认概率,由于这种单词可能非常多,所以我们可以单独使用一个map来存储默认概率,遇到某分类下没有的单词的时候不再增加新的存储空间。

6、预测(分类)和评价


预测部分直接使用朴素贝叶斯公式,计算当前新闻分别属于各个分类的概率,选择概率最大的那个分类输出。

由于第5步已经计算出来概率矩阵和$P(y_{i})$的值,所以预测的时候直接调用朴素贝叶斯函数即可,对测试数据集预测后计算其准确性、精确度等即可。

全文完

1 8 收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部