【JAVA实现】朴素贝叶斯分类算法

朴素贝叶斯算法提供数据实例属于类别的概率值,避免了分类时的不确定性。文章介绍了如何通过多项式模型实现朴素贝叶斯,以过滤垃圾邮件为例,展示算法应用,并讨论了独立性假设对准确性的影响。
摘要由CSDN通过智能技术生成

       之前博客提到的KNN算法以及决策树算法都是要求分类器给出“该数据实例属于哪一类”这类问题的明确答案,正因为如此,才出现了使用决策树分类时,有时无法判定某一测试实例属于哪一类别。使用朴素贝叶斯算法则可以避免这个问题,它给出了这个实例属于某一类别的概率值,然后通过比较概率值,可以找到该实例最有可能属于哪一类别。

       该算法可以用如下形式表示:


       直接求解概率值很困难,因此我们可以通过下列式子进行变化。


       因为分母对于所有类别都是固定值,所以我们只要求能使得分子最大化的类别即可。又因为朴素贝叶斯假设各特征属性条件独立,所以有:


       朴素贝叶斯分类器通常有两种实现方式:一种基于贝努利模型实现,一种基于多项式模型实现。贝努利实现方式也称“词集模型”,其不考虑词在文档中出现的次数,只考虑出不出现,因此在这个意义上相当于假设词是等权重的。而多项式模型也称“词袋模型”,它考虑词在文档中的出现次数。本文采用的是多项式模型。

       这次的案例使用的是使用朴素贝叶斯过滤垃圾邮件。训练集如下所示:


       第一个文件夹下放的是25篇正常的纯文本邮件,第二个文件夹放的是25篇纯文本垃圾邮件。

       首先是邮件内容的封装。

package naivebayesian;

import java.util.List;

public class Email {
	
	private List<String> wordList;
	private int flag;
	
	public int getFlag() {
		return flag;
	}
	public void setFlag(int flag) {
		this.flag = flag;
	}
	public List<String> getWordList() {
		return wordList;
	}
	public void setWordList(List<String> wordList) {
		this.wordList = wordList;
	}
	
}
       第一个字段为每封邮件分好词的集合,第二个字段表示这封邮件是否是垃圾邮件。

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值