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

算法描述

(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();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

net core 获取网站目录

AppContext.BaseDirectory 获取项目的根目录转载于:https://www.cnblogs.com/zxs-onestar/p/7147265.html

泰晤士报下载_《泰晤士报》和《星期日泰晤士报》新闻编辑室中具有指标的冒险活动-第1部分:问题

泰晤士报下载TLDR: Designing metrics that help you make better decisions is hard. In The Times and The Sunday Times newsrooms, we have spent a lot of time trying to tackle three particular problems.TLDR &#xff1a;设计度量标准以帮助您做出更好的决策非常困难…

速度一半永远追不上_您将永远不会知道自己应该怎么做的一半-没关系。

速度一半永远追不上by Ken Gilb肯吉尔伯(Ken Gilb) 您将永远不会知道自己应该怎么做的一半-没关系。 (You will never know half of what you think you should — and that’s ok.) Impostor syndrome is a real thing in software development. After 20 years in the indus…

c语言自学门槛,初学C语言的人最常问的几个问题

初学C语言的人最常问的几个问题C语言是一门通用计算机编程语言&#xff0c;应用广泛。对于新手来说学习C语言并不是那么容易&#xff0c;下面是C语言初学者最常问的几个问题&#xff0c;欢迎阅读!1.多久能学会编程?这是一个没有答案的问题。每个人投入的时间、学习效率和基础都…

背景消除的魔力

图片的功能非常强大&#xff0c;有一图胜千言的效果&#xff0c;所以在文档或演示文稿中使用图片来增加趣味性是一种很棒的想法。但问题是&#xff0c;图片通常会变为文字中间的独立矩形&#xff0c;而不是真正与内容融合在一起。您可以在图片中放置边框或效果&#xff0c;使其…

Puppet 之 模板和模块

1 概述模板文件是在puppet模块下面templates目录中以”.erb”结尾的文件&#xff0c;puppet模板主要用于文件&#xff0c;例如各种服务的配置文件&#xff0c;相同的服务&#xff0c;不同的配置就可以考虑使用模板文件。模块是Puppet自包含的代码和数据集合。绝大多数的清单都…

java异步io_Java中的异步IO与异步请求处理

java异步ioIn this article, I am trying to explain the difference between Async-IO and Async-Request processing in the HTTP request in the Java world.在本文中&#xff0c;我试图解释Java世界中HTTP请求中Async-IO和Async-Request处理之间的区别。 In the pre-Java …

异常检测机器学习_使用机器学习检测异常

异常检测机器学习什么是异常检测&#xff1f; (What is Anomaly Detection?) The anomaly detection problem has been a problem that has been frequently explored in the field of machine learning and has become a classic problem. Anomalies are any unusual sequenc…

数据挖掘—BP神经网络(Java实现)

public class Test {public static void main(String args[]) throws Exception {ArrayList<ArrayList<Double>> alllist new ArrayList<ArrayList<Double>>(); // 存放所有数据ArrayList<String> outlist new ArrayList<String>(); // …

c语言掌握常用函数,c语言一些常用函数.pdf

c语言一些常用函数C 语言程序设计(常用函数说明)C 语言是 1972 年由美国的 Dennis Ritchie 设计发明的,并首次在 UNIX 操作系统的 DEC PDP-11 计算机上使用。它由早期的编程语言 BCPL(Basic Combind ProgrammingLanguage)发展演变而来。在 1970 年,AT&T 贝尔实验室的 Ken T…

高阶函数 - 函数节流

/*** 函数节流 - 限制函数被频繁调用* param {Function} fn [需要执行的函数]* param {[type]} interval [限制多长的时间再重复执行fn]*/var throttle function(fn, interval) {var __self fn,timer,firstTime true;return function() {var args arguments,__me…

[CareerCup] 8.7 Chat Server 聊天服务器

8.7 Explain how you would design a chat server. In particular, provide details about the various backend components, classes, and methods. What would be the hardest problems to solve? 这个简易的聊天服务器功能十分的有限&#xff0c;毕竟只是针对面试题的&…

react hooks使用_如何开始使用React Hooks:受控表格

react hooks使用by Kevin Okeh由Kevin Okeh 如何开始使用React Hooks&#xff1a;受控表格 (How to Get Started With React Hooks: Controlled Forms) React Hooks are a shiny new proposal that will allow you to write 90% cleaner React. According to Dan Abramov, Hoo…

特征工程tf-idf_特征工程-保留和删除的内容

特征工程tf-idfThe next step after exploring the patterns in data is feature engineering. Any operation performed on the features/columns which could help us in making a prediction from the data could be termed as Feature Engineering. This would include the…

c语言定义数组a10 指定各元素,C语言填空题.doc

C语言填空题.doc二、填空题1、C 语言只有 32 个关键字和 9 种控制语句。2、每个源程序有且只有一个 main 函数&#xff0c;系统总是从该函数开始执行 C 语言程序。 3、C 语言程序的注释可以出现在程序中的任何地方&#xff0c;它总是以 * 符号作为开始标记&#xff0c;以 */ 符…

猫狗队列

功能要求&#xff1a; 用户可以调用push方法将cat类或dog类的实例放入队列中;用户可以调用pollAll方法&#xff0c;将队列中所有的实例按照进队列的先后顺序依次弹出;用户可以调用pollDog方法&#xff0c;将队列中dog类的实例按照进队列的先后顺序依次弹出;用户可以调用pollCat…

如何使用HTML5,JavaScript和Bootstrap构建自定义文件上传器

by Prashant Yadav通过Prashant Yadav 如何使用HTML5&#xff0c;JavaScript和Bootstrap构建自定义文件上传器 (How to build a custom file uploader with HTML5, JavaScript, & Bootstrap) In this short article, we’ll learn how to create custom file uploader wit…

monkey测试===通过monkey测试检查app内存泄漏和cpu占用

最近一直在研究monkey测试。网上资料很多&#xff0c;但都是一个抄一个的。原创的很少 我把检查app内存泄漏的情况梳理一下&#xff1a; 参考资料&#xff1a; Monkey测试策略&#xff1a;https://testerhome.com/topics/597 Android Monkey测试详细介绍&#xff1a;http://www…

数据挖掘—主成分分析法降维和最小最大规范化

算法步骤:1)将原始数据按列组成n行m列矩阵X2)特征中心化。即每一维的数据都减去该维的均值&#xff0c;使每一维的均值都为03)求出协方差矩阵4)求出协方差矩阵的特征值及对应的特征向量5)将特征向量按对应的特征值大小从上往下按行排列成矩阵&#xff0c;取前k行组成矩阵p6)YPX…

用户使用说明c语言,(C语言使用指南.docx

(C语言使用指南Turbo C(V2.0)使用指南(本文的许多命令或方法同样适用于TC3) 在开始看本文以前&#xff0c;我先说明一下C语言的安装和使用中最应该注意的地方&#xff1a;许多网友在下载Turbo C 2.0和Turbo C 3.0后&#xff0c;向我问得最多的是在使用过程中碰到如下问题&…