• 大小: 1.05MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-30
  • 语言: Java
  • 标签:

资源简介

代码是我实验课完成的,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

评论

共有 条评论