码迷,mamicode.com
首页 > 编程语言 > 详细

基于MapReduce的朴素贝叶斯算法的实现与分析

时间:2015-03-07 18:23:06      阅读:657      评论:0      收藏:0      [点我收藏+]

标签:

一、朴素贝叶斯(Na?ve Bayes)分类器

1.1 公式

    • 朴素贝叶斯是一个概率分类器
    • 文档 d 属于类别 c 的概率计算如下(多项式模型):

技术分享

    • nd是文档的长度(词条的个数)
    • P(tk |c) 是词项tk 出现在类别c中文档的概率,即类别c文档的一元语言模型
    • P(tk |c) 度量的是当c是正确类别时tk 的贡献
    • P(c) 是类别c的先验概率
    • 如果文档的词项无法提供属于哪个类别的信息,那么我们直接选择P(c)最高的那个类别

1.2 具有最大后验概率的类别

§朴素贝叶斯分类的目标是寻找“最佳”的类别

§最佳类别是指具有最大后验概率(maximum a posteriori -MAP)的类别 cmap:

技术分享

1.3 对数计算 

§很多小概率的乘积会导致浮点数下溢出

§由于 log(xy) = log(x) + log(y), 可以通过取对数将原来的乘积计算变成求和计算

§由于log是单调函数,因此得分最高的类别不会发生改变

§因此,实际中常常使用的是:

技术分享

1.4 零概率问题

如果某词项不再某类别中出现,则包含词项的文档属于该类别的概率P=0.

即一旦发生令概率,则无法判断类别。

解决方法:加一平滑。

§平滑前:

技术分享

§平滑后: 对每个量都加上1

技术分享

§B 是不同的词语个数 (这种情况下词汇表大小 |V | = B)

1.5 两种常见模型

这里需要提到贝叶斯模型的两个独立性假设:位置独立性和条件独立性。

多项式模型和贝努力模型。前者考虑出现次数,后者只考虑出现与不出现,即0 与 1问题。

1.6 算法过程

训练过程:

技术分享

测试/应用/分类:

技术分享

1.7 实例

技术分享 首先,第一步,参数估计:

技术分享接着,第二步,分类:

技术分享 

因此, 分类器将测试文档分到c = China类,这是因为d5中起正向作用的CHINESE出现3次的权重高于起反向作用的 JAPAN和TOKYO的权重之和。

二、基于MR的并行化实现

分两个阶段进行,首先是训练获取分类器,然后是预测。

文件的输入格式:每一行代表一个文本,格式为:类别名+文件名+文本内容

技术分享

2.1 训练阶段

训练阶段要计算两种概率:[1] 每种类别的先验概率 [2] 每个term(单词)在每个类别中得条件概率。

这里采用多项式模型计算条件概率。

这里有两个job完成,伪代码如下:

这两段代码来自dongxicheng的博客,原文地址http://dongxicheng.org/data-mining/naive-bayes-in-hadoop/

  1. 技术分享 

          技术分享

2.2 测试阶段

­将训练阶段得到的数据加载到内存中,计算文档在每个类别的概率,找出概率最大的类别。

 

        技术分享

三、MR分析

测试数据:搜狗实验室 http://www.sogou.com/labs/resources.html?v=1

这里要先要将所有文档转成需要的文本格式,即一行代表一篇新闻。

训练集:75000篇新闻;测试集:5000篇新闻

最终测得分类精度为82%。

参考资料:dongxicheng http://dongxicheng.org/data-mining/naive-bayes-in-hadoop/

作者:西芒xiaoP

出处:http://www.cnblogs.com/panweishadow/

若用于非商业目的,您可以自由转载,但请保留原作者信息和文章链接URL。

基于MapReduce的朴素贝叶斯算法的实现与分析

标签:

原文地址:http://www.cnblogs.com/panweishadow/p/4320722.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!