资源简介
代码是我实验课完成的,Java实现分类问题,朴素贝叶斯算法,对网上需手动输入数据的代码稍微改进,数据是文件夹里的txt文件,读者可以自己更改数据文件,非常方便,注释详细。
代码片段和文件信息
package Bayes;
import java.util.ArrayList;
import java.util.HashMap;
//import java.util.List;
import java.util.Map;
import util.DecimalCalculate;
/**
*..........贝叶斯算法类..........
*/
public class Bayes {
/**
*..........将原训练元组按类别划分..........
*/
Map>> datasOfClass(ArrayList> datas){//datas:训练数据
Map>> map = new HashMap>>();
ArrayList t = null;
String c = ““;
for (int i = 0; i < datas.size(); i++) {
t = datas.get(i);//获取训练集某一行数据
c = t.get(t.size() - 1);//c记录该行数据的类别
if (map.containsKey(c)) {
map.get(c).add(t);//本条数据属于某类别
} else { //本条数据属于另一个类别
ArrayList> nt = new ArrayList>();
nt.add(t);
map.put(c nt);
}
}
return map;//返回Map<类别,属于该类别的训练元组>
}
/**
*..........在训练数据的基础上预测测试元组的类别..........
*/
public String predictClass(ArrayList> datas ArrayList testT) {//datas:训练数据;testT测试元组
Map>> doc = this.datasOfClass(datas);
object classes[] = doc.keySet().toArray();//获取Map中的key值,即类别值
double maxP = 0.00;//测试元组后验概率的记录
int maxPIndex = -1;//maxPIndex存储概率最大的元组的位置
for (int i = 0; i < doc.size(); i++) {
String c = classes[i].toString();//c存储classess中某一类别值
ArrayList> d = doc.get(c);//属于c类的所有元组
double pOfC = DecimalCalculate.div(d.size() datas.size() 3);//c类元组占所有元组的比例
for (int j = 0; j < testT.size(); j++) {
double pv = this.pOfV(d testT.get(j) j);//训练集中某行数据的某列属性值占 c类的概率
pOfC = DecimalCalculate.mul(pOfC pv);//
}
//System.out.println(pOfC);
if(pOfC > maxP){//寻找最大的后验概率,并存入maxP
maxP = pOfC;
maxPIndex = i;//记录最大概率的元组在训练集中的位置
}
}
if(maxPIndex==-1){
return “0“;//表示测试的该元组某列属性值无法在训练集中查找到
}
else{
return classes[maxPIndex].toString();//返回测试元组的类别
}
}
/**
*..........计算指定属性列上指定值出现的概率..........
*/
private double pOfV(ArrayList> d String value int index) {//d:属于某一类的训练元组;value:列值;index:属性列索引
double p = 0.00;
int count = 0;//计数 :指定属性列上指定值出现的次数
int total = d.size();//某一类训练元组的个数
for (int i = 0; i < total; i++) {
if(d.get(i).get(index).equals(value)){//某一行某一列值等于指定值
count++;//计数加1
}
}
p = DecimalCalculate.div(count total 3);//精确到小数点3位
return p; //返回某属性列值出现的概率
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-12-13 14:28 TestNaiveBayes\
文件 301 2015-11-19 16:13 TestNaiveBayes\.classpath
文件 390 2015-11-19 16:13 TestNaiveBayes\.project
目录 0 2015-12-13 14:28 TestNaiveBayes\.settings\
文件 598 2015-11-19 16:13 TestNaiveBayes\.settings\org.eclipse.jdt.core.prefs
文件 1388417 2015-11-24 18:48 TestNaiveBayes\AfterPreCorrected2.txt
文件 65652559 2015-11-24 15:39 TestNaiveBayes\AfterPreData.txt
目录 0 2015-12-13 14:28 TestNaiveBayes\bin\
目录 0 2015-12-13 14:28 TestNaiveBayes\bin\Bayes\
文件 3172 2015-11-25 00:10 TestNaiveBayes\bin\Bayes\Bayes.class
文件 4340 2015-11-25 14:49 TestNaiveBayes\bin\Bayes\TestBayes.class
目录 0 2015-12-13 14:28 TestNaiveBayes\bin\util\
文件 2658 2015-11-22 19:53 TestNaiveBayes\bin\util\DecimalCalculate.class
目录 0 2015-12-13 14:28 TestNaiveBayes\src\
目录 0 2015-12-13 14:28 TestNaiveBayes\src\Bayes\
文件 3333 2015-11-25 00:10 TestNaiveBayes\src\Bayes\Bayes.java
文件 4660 2015-11-25 14:49 TestNaiveBayes\src\Bayes\TestBayes.java
目录 0 2015-12-13 14:28 TestNaiveBayes\src\util\
文件 4651 2015-11-19 16:53 TestNaiveBayes\src\util\DecimalCalculate.java
评论
共有 条评论