利用朴素贝叶斯算法进行分类-Java代码实现

http://www.crocro.cn/post/286.html

利用朴素贝叶斯算法进行分类-Java代码实现

Java
package cn.crocro.classifier; import java.util.ArrayList; /** * 朴素贝叶斯分类器,只能针对有限个情况的分类下面是实例代码 * * @author 鳄鱼 * */ public class NaiveBayesClassifier { /** * 进行训练的内部数据 */ private ArrayList<FiniteStateData> datas = new ArrayList<>(); /* * * 拉普拉斯平滑数值 */ private double landa = 1; /** * 进行初始化 * * @param datas * 初始化的数据 */ public NaiveBayesClassifier(ArrayList<FiniteStateData> datas) { this.datas = datas; } /** * 默认进行初始化 */ public NaiveBayesClassifier() { } public void setLanda(double landa) { this.landa = landa; } /** * 增加数据 * * @param data * 增加一组数据 */ public void addData(FiniteStateData data) { datas.add(data); } /** * 获取对应的类的默认概率 * * @param classNum * 想获取的分类 * @return */ private double getClassPercent(int classNum) { int num = 0; for (FiniteStateData data : datas) { if (data.classfy == classNum) { num++; } } return (double) (num + landa) / (datas.size() + landa * FiniteStateData.getTotalClassNum()); } /** * 获取某个维度某个值的概率 * * @param dim * 维度 * @param value * 值 * @return 概率 */ private double getValuePercent(int dim, int value, int classfy) { int num = 0; int classfyNum = 0; for (FiniteStateData singleData : datas) { if (singleData.data[dim] == value && singleData.classfy == classfy) { num++; } if (singleData.classfy == classfy) { classfyNum++; } } return (double) (num + landa) / (classfyNum + landa * FiniteStateData.getTotalDimDataNum(dim)); } /** * 获取未知数据的内部分类概率 * * @param data * 未知数据 * @param classfy * 可能分类 * @return 概率 */ public double getClassifyPercent(int[] data, int classfy) { double total = 0; for (int oneClassfy : FiniteStateData.getClassArray()) { total += getLocalClassifyPercent(data, oneClassfy); } return getLocalClassifyPercent(data, classfy) / total; } /** * 获取未知数据的内部分类概率 * * @param data * 未知数据 * @param classfy * 可能分类 * @return 概率 */ private double getLocalClassifyPercent(int[] data, int classfy

转载于:https://www.cnblogs.com/donaldlee2008/p/5224289.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值