算法描述

(1)扫描训练样本数据集,分别统计训练集中类别 Ci 的个数 Di 和属于类别Ci 的样本中属性Ak取值Xk为 Dik 的实例样本个数,构成统计表;
(2)计算先验概率和条件概率,构成概率表;
(3)构建分类模型;
(4)扫描待分类的样本数据集,调用已得到的统计表、概率表以及构建好的分类准则,得出分类结果;

代码

public class Bayes {//将训练集按巡逻集合的最后一个值进行分类Map<String, ArrayList<ArrayList<String>>> datasOfClass(ArrayList<ArrayList<String>> datas){Map<String, ArrayList<ArrayList<String>>> map = new HashMap<String, ArrayList<ArrayList<String>>>();ArrayList<String> t = null;String c = "";for (int i = 0; i < datas.size(); i++) {t = datas.get(i);c = t.get(t.size() - 1);if(c.length()==0) continue;if (map.containsKey(c)) {map.get(c).add(t);} else {ArrayList<ArrayList<String>> nt = new ArrayList<ArrayList<String>>();nt.add(t);map.put(c, nt);}}return map;}//在训练数据的基础上预测测试元组的类别 ,testT的各个属性在结果集里面出现的概率相乘最高的,即是结果public String predictClass(ArrayList<ArrayList<String>> datas, ArrayList<String> testT) {Map<String, ArrayList<ArrayList<String>>> doc = this.datasOfClass(datas);//将训练集元素划分保存在数据里Object classes[] = doc.keySet().toArray();double maxP = 0.00;int maxPIndex = -1;//testT的各个属性在结果集里面出现的概率相乘最高的,即使结果集for (int i = 0; i < doc.size(); i++) {String c = classes[i].toString();ArrayList<ArrayList<String>> d = doc.get(c);BigDecimal b1 = new BigDecimal(Double.toString(d.size()));BigDecimal b2 = new BigDecimal(Double.toString(datas.size()));//b1除以b2得到一个精度为3的双浮点数double pOfC = b1.divide(b2,10,BigDecimal.ROUND_HALF_UP).doubleValue();for (int j = 0; j < testT.size(); j++) {double pv = this.pOfV(d, testT.get(j), j);if(pv==0) pv=1/(double)d.size();BigDecimal b3 = new BigDecimal(Double.toString(pOfC));BigDecimal b4 = new BigDecimal(Double.toString(pv));//b3乘以b4得到一个浮点数pOfC=b3.multiply(b4).doubleValue();}if(pOfC > maxP){maxP = pOfC;maxPIndex = i;}}return classes[maxPIndex].toString();}// 计算指定属性到训练集出现的频率private double pOfV(ArrayList<ArrayList<String>> d, String value, int index) {double p = 0.00;int count = 0;int total = d.size();for (int i = 0; i < total; i++) {if(Double.parseDouble(d.get(i).get(index))==Double.parseDouble(value)){count++;}}BigDecimal b1 = new BigDecimal(Double.toString(count));BigDecimal b2 = new BigDecimal(Double.toString(total));//b1除以b2得到一个精度为3的双浮点数p = b1.divide(b2,10,BigDecimal.ROUND_HALF_UP).doubleValue();return p;}
}
public class TestBayes {static String res;//读取测试元组public ArrayList<String> readTestData(String string) throws IOException{ArrayList<String> candAttr = new ArrayList<String>();String str = "";str = string;//string分析器String[] tokenizer = str.split(",");for(int i=0;i<tokenizer.length-1;i++){candAttr.add(tokenizer[i]);}res=tokenizer[tokenizer.length-1];return candAttr;}//读取训练集public ArrayList<ArrayList<String>> readData() throws IOException {ArrayList<ArrayList<String>> list=new ArrayList<>();try { // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw/* 读入TXT文件 */File filename = new File("src/bp/trainBayes.txt"); // 要读取以上路径的input。txt文件InputStreamReader reader = new InputStreamReader(new FileInputStream(filename)); // 建立一个输入流对象readerBufferedReader br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言String line = "";line = br.readLine();while (line != null) {String[] temp=line.split(",");ArrayList<String> arrayList = new ArrayList<>(Arrays.asList(temp));list.add(arrayList);line = br.readLine();}} catch (Exception e) {e.printStackTrace();}return list;}public static  List<String> readTxt(String fileName){List<String> list=new ArrayList<>();try { // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw/* 读入TXT文件 */File filename = new File(fileName); // 要读取以上路径的input。txt文件InputStreamReader reader = new InputStreamReader(new FileInputStream(filename)); // 建立一个输入流对象readerBufferedReader br = new BufferedReader(reader); // 建立一个对象,它把文件内容转成计算机能读懂的语言String line = "";line = br.readLine();while (line != null) {if(line.length()>0){list.add(line);}line = br.readLine();}} catch (Exception e) {e.printStackTrace();}return list;}public static void main(String[] args) {TestBayes tb = new TestBayes();int righr=0,total;ArrayList<ArrayList<String>> datas = null;ArrayList<String> testT = null;Bayes bayes = new Bayes();try {datas = tb.readData();List <String> l=  readTxt("src/bp/testBayes.txt");for(String c:l) {testT = tb.readTestData(c);String k = bayes.predictClass(datas, testT);if(k.equals(res))righr++;}double re=(double) righr/(double)l.size();System.out.println("测试集的数量:"+ (new Double(l.size())).intValue());System.out.println("分类正确的数量:"+(new Double(righr)).intValue());System.out.println("算法的分类正确率为:"+ re);} catch (IOException e) {e.printStackTrace();}}
}

数据挖掘—朴素贝叶斯分类算法(Java实现)相关推荐

  1. 数据挖掘:基于朴素贝叶斯分类算法的文本分类实践

    前言: 如果你想对一个陌生的文本进行分类处理,例如新闻.游戏或是编程相关类别.那么贝叶斯分类算法应该正是你所要找的了.贝叶斯分类算法是统计学中的一种分类方法,它利用概率论中的贝叶斯公式进行扩展.所以, ...

  2. 数据挖掘 | 判别分析 +朴素贝叶斯分类算法

    本节记录一下由贝叶斯定理延伸出来的几种预测性建模的方法,主要为线性判别分析(一次,二次),朴素贝叶斯(稍稍提一下贝叶斯网络) 1. 判别分析 判别分析适用于自变量连续,因变量为分类型的情形: 设因变量 ...

  3. Java代码利用朴素贝叶斯分类算法实现信息分类

    贝叶斯分类算法 贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类的算法.在许多场合,朴素贝叶斯(Naïve Bayes,NB)分类算法可以与决策树和神经网络分类算法相媲美,该算法 ...

  4. 数据挖掘学习——朴素贝叶斯分类算法beast cancer实战

    目录 1.朴素贝叶斯分类算法相关的统计学知识 2.朴素贝叶斯分类器 3.朴素贝叶斯分类器python实现 (1)调用sklearn库,需要安装 (2)实例1(查看数据的分布情况和数据格式) (3)实例 ...

  5. 【机器学习原理】朴素贝叶斯分类算法

    文章目录 一.朴素贝叶斯公式 1. 从统计角度看分类问题 2. 贝叶斯公式的基本思想 贝叶斯的基本逻辑 3. 用贝叶斯公式进行选择 贝叶斯版的预测未来 二.朴素贝叶斯分类的算法原理 1. 朴素贝叶斯分 ...

  6. 基于python的贝叶斯分类算法预测_python机器学习:朴素贝叶斯分类算法

    大数据挖掘DT机器学习  公众号: datayx 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类.而朴素朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法.这 ...

  7. 数据挖掘——朴素贝叶斯分类

    <数据挖掘>国防科技大学 <数据挖掘>青岛大学 Python:贝叶斯分类 贝叶斯分类基于贝叶斯定理,是机器学习的核心方法之一. 目前研究较多的贝叶斯分类器主要有四种: 朴素贝叶 ...

  8. 第六篇:基于朴素贝叶斯分类算法的邮件过滤系统

    前言 朴素贝叶斯算法最为广泛而经典的应用毫无疑问是文档分类,更具体的情形是邮件过滤系统. 本文详细地讲解一个基于朴素贝叶斯分类算法的邮件过滤系统的具体实现. 本文侧重于工程实现,至于其中很多算法的细节 ...

  9. 五、朴素贝叶斯分类算法

    1.朴素贝叶斯分类算法的基本内容: 概率基础 朴素贝叶斯分类器 朴素贝叶斯的核心思想是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别. 2 ...

最新文章

  1. Mysql数据库(三)——mysql数据库高级操作
  2. 怎么看linux电脑是不是双核,Linux系统如何判断CPU是双核还是单核
  3. 工业机器人几个自由度_工业机器人有多少个运动自由度呢?
  4. Shell脚本编程基础笔记一
  5. python网站有中文界面吗_手把手教你用python开发界面程序
  6. dxf文件预览打开编辑相关控件推荐
  7. 力扣题目——121. 买卖股票的最佳时机
  8. 检查键是否存在于JavaScript对象中?
  9. oracle 转成sql server,怎样把Oracle查询转换为SQL Server
  10. android 不生成odex文件方法
  11. QuarkXPress 2022 for mac(排版设计软件)
  12. 天猫达尔文商品管理体系通俗简介
  13. android画板的实验报告,几何画板实验报告
  14. 语言模型——n元语法模型
  15. windows10 无法设置屏幕保护程序
  16. 微信第三方平台服务器,微信三方平台接入
  17. python 报错 TypeError: tuple indices must be integers or slices, not tuple
  18. 微信怎样关闭QQ文件服务器,如何屏蔽QQ和微信的外发文件?
  19. 威斯康星大学硕士计算机科学,威斯康星大学麦迪逊分校计算机科学
  20. 干货!学习 Python 看这篇管够!!!

热门文章

  1. 我三年开发经验,从字节跳动抖音离职后,满满干货指导
  2. centos7.0利用yum快速安装mysql8.0
  3. 匿名函数、冒泡排序,二分法, 递归
  4. CPP函数调用的方法
  5. 在双系统(Windows与Ubuntu)下删除Ubuntu启动项
  6. Zookeeper的api的简单使用(转载)
  7. 从简单的信道预计说起
  8. hyper虚拟机下对centos进行动态扩容
  9. mysql 清空表的两种方法
  10. Javascript中的翻转器