朴素贝叶斯法的java实现

朴素贝叶斯算法:

    import java.util.List;
    //计算不同分类的先验概率与条件概率乘积
    public class Probability {
        public double[]  Priori(List<Object[]> list,Object[] objects, Object[] y){
            int n = objects.length;
            double[] p = new double[y.length];
            for(int k = 0; k <y.length; k ++){
                double pp[] = new double[objects.length];
                double num = 0;
                    for (int i = 0; i < list.size(); i++) {
                        if (list.get(i)[n] == y[k]) {
                            num = num + 1;
                        }
                    }
                    p[k] = num / list.size();
                    pp = condition(list,objects,y[k],num);
                    double result = 1;
                    for(int m =0 ; m < pp.length; m++){
                        result = result * pp[m];
                    }
                    p[k] = p[k] * result;
            }
            return p;
        }
        //计算条件概率
        public double[] condition(List<Object[]> list,Object[] objects, Object y, double num){
            int n = objects.length;
            double[] pp = new double[objects.length];
            for(int m =0 ; m<objects.length; m ++){
                double nums =0;
                for(int i = 0; i <list.size(); i ++) {
                    if (list.get(i)[n] == y) {
                        if(list.get(i)[m] == objects[m]){
                            nums++;
                        }
    
                    }
                }
                pp[m] = nums/num;
                }
            return pp;
        }
    
    }
    //返回分类结果
    public class Result {
    public Object output(double[] p, Object[] y){
        int max = 0;
        for( int i = 1; i < p.length ; i ++){
            if(p[i] > p[max]){
                max = i;
            }
        }
        return y[max];
    }
    }
    //例子
    import java.util.ArrayList;
import java.util.List;

public class test {
    public static void main(String[] args) {
      int[] A1= new int[]{1,2,3};
      char[] A2 = new char[]{'S','M','L'};
      Object[] y = new Object[]{1,-1};
      Object[] o1 = new Object[]{A1[0],A2[0],y[1]};
      Object[] o2 = new Object[]{A1[0],A2[1],y[1]};
      Object[] o3 = new Object[]{A1[0],A2[1],y[0]};
      Object[] o4 = new Object[]{A1[0],A2[0],y[0]};
      Object[] o5 = new Object[]{A1[0],A2[0],y[1]};
      Object[] o6 = new Object[]{A1[1],A2[0],y[1]};
      Object[] o7 = new Object[]{A1[1],A2[1],y[1]};
      Object[] o8 = new Object[]{A1[1],A2[1],y[0]};
      Object[] o9 = new Object[]{A1[1],A2[2],y[0]};
      Object[] o10 = new Object[]{A1[1],A2[2],y[0]};
      Object[] o11 = new Object[]{A1[2],A2[2],y[0]};
      Object[] o12 = new Object[]{A1[2],A2[1],y[0]};
      Object[] o13 = new Object[]{A1[2],A2[1],y[0]};
      Object[] o14 = new Object[]{A1[2],A2[2],y[0]};
      List<Object[]> list = new ArrayList<Object[]>();
      list.add(o1);
      list.add(o2);
      list.add(o3);
      list.add(o4);
      list.add(o5);
      list.add(o6);
      list.add(o7);
      list.add(o8);
      list.add(o9);
      list.add(o10);
      list.add(o11);
      list.add(o12);
      list.add(o13);
      list.add(o14);
      Object[] x = new Object[]{2,'S'};
      Probability p = new Probability();
      double[] pp = p.Priori(list,x,y);
     System.out.println("该点的类标记应该是:");
     System.out.println(new Result().output(pp,y));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值