文档分类(1)朴素贝叶斯模型

wiki地址:[url]http://en.wikipedia.org/wiki/Bayesian_model_comparison[/url]

做爬虫、做搜索、做数据挖掘都免不了对数据做索引,更进一步的操作应该是对得到文档做分类操作。传统yahoo目录式网页导航就是一个很典型的文档分类应用,利用文档分类确定特定领域也能更好的进行数据挖掘。

朴素贝叶斯模型是文档分类的重要一支,也是基础中的基础,

贝叶斯模型的基本公式如下:
[img]http://dl.iteye.com/upload/attachment/159890/e1f7cf0b-dc69-3b7d-87a2-8a7255692b75.png[/img]
稍微解释一下公示的物理意义,M为分类集合C众多某一个类别,D为待分类文档。
我们将带分类文档对于某一个类别的后验概率作为其与这种分类的相关性评分,分数越高代表越相关,再利用公式将后验概率表示为利于计算的形式。
其中P(D)对于同一篇文档是一个常量;而P(M)对应于训练集中各类别的数量,我们可以估计为P(M1)=P(M2)=^P(MN)=1\N,在比较运算中,可以不用考虑。
实际上需要进行计算的量只有特定集合M对于待分类文档D的先验概率,即P(D/M)。

[b]P(D/M)=∏P(di/M)[/b]

其中di为D中各属性值,在特定文档分类中,我们可以视为出现的单词。而P(di/M)为在M训练集中某一个单词di出现的词频。

因为有可能出现待分类文档中出现一个训练集中从未出现的单词,也就是p(di/m)=0,做拉普拉斯校准,即令每一个单词在训练集中出现的次数+1,未出现过的单词认定为出现1次。

简单代码如下:

for (String s : tempList) {//templist为待分文档切词后的结果
if (itMap.containsKey(s)) {//itmap为某一个训练集按照词频预处理后的hashmap<string,integer>
int t = itMap.get(s);
double a = (double) (t + 1) / total4it;
a = Math.log(a);//将乘法运算变为加法运算,避免结果过小越界。
tempresult += a;
} else {
tempresult += Math.log((double) 1 / total4it);
}
}


测试中我们使用从sina爱问中爬下来的计算机、旅游、汽车、经济和生活五个分类中各一万个问答对,选取各自前2000条作为测试集,其余8000条为各自训练集。
在一万条测试数据中,正确分类率达到了89.4%,效果良好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值