目前的算法只能处理结果只有两种的情况,即true or false. 多分枝或者是数字类型的还无法处理。
用到的一些基础数据结构可以参考上一篇关于ID3的代码。
这里只贴出来实现贝叶斯分类预测的部分:
package classifier; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import util.ArffUtil; /** * NBC means Naive Bayes Classifier * @author wenjun_yang * */ public class NBCUtil { ArffUtil util = new ArffUtil(); private List<String> attributeList = null; private List<String[]> dataList = null; private String decAttributeName = null; private int decAttributeIndex = -1; private Map<String, List<String[]>> seperatedDataTable = null; public NBCUtil(String decAttributeName, List<String> attributeList, List<String[]> dataList) { this.attributeList = attributeList; this.dataList = dataList; this.decAttributeName = decAttributeName; this.decAttributeIndex = util.getValueIndex(decAttributeName, this.attributeList); this.seperatedDataTable = seperateDataList(dataList); } private Map<String, List<String[]>> seperateDataList(List<String[]> dataList) { Map<String, List<String[]>> map = new HashMap<String, List<String[]>>(); for(String[] arr : dataList) { if(decAttributeIndex >= 0 && decAttributeIndex < arr.length) { String currentKey = arr[decAttributeIndex]; if(map.containsKey(currentKey)) { List<String[]> tempList = map.get(currentKey); tempList.add(arr); map.put(currentKey, tempList); } else { List<String[]> tempList = new ArrayList<String[]>(); tempList.add(arr); map.put(currentKey , tempList); } } } return map; } public Boolean predict(Map<String, String> predictData, String targetDecAttributeValue) { if(predictData.containsKey(decAttributeName)) predictData.remove(decAttributeName); List<String[]> positiveDataTable = new ArrayList<String[]>(); if(seperatedDataTable.containsKey(targetDecAttributeValue)) { positiveDataTable = seperatedDataTable.get(targetDecAttributeValue); } double resultP = 1.; // Step 1: 逐个属性的比率进行计算 // 即: 计算 P(Attr=Value|Y=true) / P(Attr=Value|Y=false) 的值 for(String attrName : predictData.keySet()) { String attrValue = predictData.get(attrName); int attrIndex = util.getValueIndex(attrName, attributeList); int attrPositiveCount = 0; int attrNegativeCount = 0; for(String[] arr : dataList) { if(arr[attrIndex].equals(attrValue)) { if(arr[decAttributeIndex].equals(targetDecAttributeValue)) { attrPositiveCount++; } else { attrNegativeCount++; } } } double temp = (attrPositiveCount / (double)positiveDataTable.size() ) / (attrNegativeCount / (double)(dataList.size() - positiveDataTable.size())); resultP *= temp; } // 最后计算 P(Y=true) / P(Y=false) resultP *= positiveDataTable.size() / (double)(dataList.size() - positiveDataTable.size()); System.out.println(resultP); if(resultP > 1) { return true; } else { return false; } } }
完整的项目也上传了,可以直接使用。
数据源来自weka
相关推荐
实验描述: 对指定数据集进行分类问题的...数据集: balance-scale.data(见附件一) ,已有数据集构建贝叶斯分类器。 数据包括四个属性:五个属性值 第一个属性值表示样本的类别号,其他四个属性为四个不同的特征值。
本程序实现了基于朴素贝叶斯方法的文本分类,附有源代码、实验报告、可执行程序以及语料库(包括训练集和测试集)
Spring-Boot集成Neo4j并利用Spark的朴素贝叶斯分类器实现基于电影知识图谱的智能问答系统
朴素贝叶斯算法文本分类JAVA实现
用java实现基于贝努力模型的朴素贝叶斯分类器的eclipse的完整工程代码
Java编写的朴素贝叶斯分类器,用于学习机器学习算法,使用Java原生sdk实现,内有数据集,可以运行。
程序中数据集已提供。数据挖掘中,朴素贝叶斯分类器是贝叶斯分类模型中最简单、最有效、实际应用中成功的分类器。假设各分量独立地作用于决策变量,在实际应用中降低了贝叶斯网络构建复杂性。
基于SpringBoot+Neo4j+Spark实现的论文智能分析问答系统(采用朴素贝叶斯分类器).zip基于SpringBoot+Neo4j+Spark实现的论文智能分析问答系统(采用朴素贝叶斯分类器).zip基于SpringBoot+Neo4j+Spark实现的论文智能...
代码:Java语言 算法:朴素贝叶斯分类器(中文)适用于情感分析 涉及:条件概率,先验概率计算,中文分词器,停用词处理
1:用MapReduce算法实现贝叶斯分类器的训练过程,并输出训练模型; 2:用输出的模型对测试集文档进行分类测试。测试过程可基于单机Java程序,也可以是MapReduce程序。输出每个测试文档的分类结果; 3:利用测试...
采用贝叶斯算法实现文本基本分类,程序用JAVA实现,运行不错
基于SpringBoot+Neo4j+Spark的朴素贝叶斯分类器实现基于电影知识图谱的智能问答系统源码+数据集+详细文档(高分毕业设计).zip基于SpringBoot+Neo4j+Spark的朴素贝叶斯分类器实现基于电影知识图谱的智能问答系统源码...
Hadoop课程设计-基于Java和mapreduce实现的贝叶斯文本分类器设计; Hadoop课程设计-基于Java和mapreduce实现的贝叶斯文本分类器设计;
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的...基于SpringBoot+OpenNLP+Neo4j+Spark朴素贝叶斯分类器实现石油相关论文的智能分析问答系统源码.zip
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业...基于Spring-Boot集成Neo4j结合Spark的朴素贝叶斯分类器实现基于茶虫知识图谱的智能问答系统源码.zip
基于Hadoop和MapReduce实现的朴素贝叶斯分类器源码+项目说明.zip 环境搭建 搭建 `Hadoop` 环境,本项目在Mac系统上搭建的 `hadoop-2.8.5`环境下完成。 数据集说明 数据集在项目文件`\Data\NBCorpus\`中 包含二个子...
### Spring-Boot集成Neo4j结合Spark的朴素贝叶斯分类器实现基于电影知识图谱的智能问答系统 <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core --> <groupId>org.apache.spark <artifactId>...
# 基于Hadoop的朴素贝叶斯分类(MapReduce实现) 该项目为Hadoop课程项目,基于MapReduce设计朴素贝叶斯文本分类器,并评估分类结果。 以下简单介绍项目内容与运行说明: ## 项目内容 1. 用MapReduce算法实现贝叶斯...
1、资源内容:基于Spark的朴素贝叶斯分类器实现基于电影知识图谱的智能问答系统+源代码+文档说明 2、代码特点:内含运行结果,不会运行可私信,参数化编程、参数可方便更改、代码编程思路清晰、注释明细,都经过测试...