java 朴素贝叶斯_java - 朴素贝叶斯

1 importjava.io.BufferedReader;2 importjava.io.File;3 importjava.io.FileNotFoundException;4 importjava.io.FileReader;5 importjava.io.IOException;6 importjava.util.ArrayList;7 importjava.util.HashMap;8 importjava.util.List;9 importjava.util.Map;10

11 public classBayes {12 public static voidmain(String[] args){13 List> filelist = new ArrayList>();14 Map prioriP = new HashMap();15 Map prioriNo = new HashMap();16 Map result = new HashMap();17 String s1 = "D://1.txt";18 String s2 = "D://2.txt";19 filelist =read(filelist,s1);20 prioriP =computepirior(filelist,prioriP,prioriNo);21 List> testlist = new ArrayList>();22 testlist =read(testlist,s2);23 result =decide(prioriP,filelist,testlist,prioriNo);24 print(result,testlist);25 }26 //第4步、打印结构

27 private static void print(Map result,List>testlist) {28 System.out.print("测试数据:" + " ");29 for(int i=0;i

38 private static Map decide(Map prioriP, List> filelist, List> testlist, MapprioriNo) {39 List> map = new ArrayList>();40 List>> fc = new ArrayList>>();41

42 for(Map.Entryentry : prioriNo.entrySet()){43 List> filecopy = new ArrayList>();44 for(int i=0;i list = new ArrayList();46 for(int j=0;j

56 //有几组测试数据,本来想实现的是测试数据是多对,自己写不出来,这段代码有待改进57 //第3.2步、测试数据在条件下出现的次数

58 List> l = new ArrayList>();59 for(int i=0;i mapdecide = new HashMap();61 for(int k=0;k

63 if(testlist.get(k).get(0).equals(fc.get(i).get(k).get(j))){64 if(mapdecide.containsKey(testlist.get(k).get(0))){65 mapdecide.put(testlist.get(k).get(0), mapdecide.get(testlist.get(k).get(0)) + 1);66 }67 else{68 mapdecide.put(testlist.get(k).get(0), 1);69 }70 }71 }72 }73 l.add(mapdecide);74 }75

76 //第3.3步、求后验概率,并比较哪个类别的概率大即所属类别

77 Map m = new HashMap();78 for(int i=0;ientry : l.get(i).entrySet()){81 d *= (entry.getValue()/(double)fc.get(i).get(fc.get(i).size()-1).size());82 }83 m.put(fc.get(i).get(fc.get(i).size()-1).get(0), prioriP.get(fc.get(i).get(fc.get(i).size()-1).get(0)) *d);84 }85

86 Double max = 0.0;87 for(Map.Entrye : m.entrySet()){88 if(max <=e.getValue()){89 max =e.getValue();90 }91 }92

93 Map result = new HashMap();94 for(Map.Entrye:m.entrySet()){95 if(max ==e.getValue()){96 result.put(e.getKey(), e.getValue());97 }98 }99 returnresult;100 }101

102 //第2步、求先验概率

103 private static Map computepirior(List> list, Map prioriP, Mapm) {104

105 for(int i=0;ientry : m.entrySet()) {114 prioriP.put(entry.getKey(),(entry.getValue()/(double)list.get(list.size()-1).size()));115 }116 returnprioriP;117 }118 //第1步、读取测试数据和训练数据

119 private static List> read(List>list, String sread) {120 try{121 FileReader fr = new FileReader(newFile(sread));122 BufferedReader br = newBufferedReader(fr);123 String string =br.readLine();124 while(string != null){125 List l = new ArrayList();126 String[] str = string.split(" ");127 for(String s : str) {128 l.add(s);129 }130 list.add(l);131 string =br.readLine();132 }133 } catch(FileNotFoundException e) {134 e.printStackTrace();135 } catch(IOException e) {136 e.printStackTrace();137 }138 returnlist;139 }140 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值