贝叶斯分类算法及其实现

上传人:无*** 文档编号:63165597 上传时间:2022-03-17 格式:DOC 页数:9 大小:97KB
收藏 版权申诉 举报 下载
贝叶斯分类算法及其实现_第1页
第1页 / 共9页
贝叶斯分类算法及其实现_第2页
第2页 / 共9页
贝叶斯分类算法及其实现_第3页
第3页 / 共9页
资源描述:

《贝叶斯分类算法及其实现》由会员分享,可在线阅读,更多相关《贝叶斯分类算法及其实现(9页珍藏版)》请在装配图网上搜索。

1、贝叶斯算法描述及实现 根据朴素贝叶斯公式,每个测试样例属于某个类别的概率 =所有测试样例包含特征词 类条件概率P(tk|c)之积*先验概率P(c) 在具体计算类条件概率和先验概率时,朴素贝叶斯分类器有两种模型: (1) 多项式模型(multi no mial model) -以单词为粒度 类条件概率P(tk|c)=(类c下单词tk在各个文档中出现过的次数之和 +1)/ (类c下单词总数+ 训练样本中不重复特征词总数) 先验概率P(c)=类c下的单词总数/整个训练样本的单词总数 (2) 伯努利模型(Bernoulli model ) -以文件为粒度 类条件概率P(tk|c)=(

2、类c下包含单词tk的文件数+1) /(类c下文件总数+2) 先验概率P(c)=类c下文件总数/整个训练样本的文件总数 本分类器选用多项式模型计算,根据斯坦福的《 In troduction to In formation Retrieval 》课 件上所说,多项式模型计算准确率更高。 贝叶斯算法的实现有以下注意点: 1. 计算概率用到了 BigDecimal类实现任意精度计算; 2. 用交叉验证法做十次分类实验,对准确率取平均值; 3. 根据正确类目文件和分类结果文计算混淆矩阵并且输出; 4. Map cateWordsProb key 为类目 _

3、单词”,value为该类目下该单词 的出现次数,避免重复计算。 贝叶斯算法实现类如下 package Bayes; import import import import /** java.util.ArrayList; java.util.HashMap; java.util.Map; util.DecimalCalculate; *贝叶斯算法测试类 * @author chengpeng * @data 2014.11.6 */ public /** class Bayes { * 将原训练元组按类别划分 * @param datas 训练元组 *

4、 @return Map<类别,属于该类别的训练元组 > */ MapvString, ArrayList>> datasOfClass(ArrayList> datas){ MapvStri ng, ArrayList>> map = new HashMapvStri ng, ArrayList>>(); ArrayList t = n ull ; String c = ""; for ( int i

5、= 0; i < datas.size(); i++) { t = datas.get(i); c = t.get(t.size() - 1); if (map.containsKey(c)) { map.get(c).add(t); } else { ArrayList> nt = new ArrayList>(); n t.add(t); map.put(c, nt); return map; /** 在训练数据的基础上预测测试元组的类别 @param datas 训练元组 @param

6、 testT 测试元组 */ @retur n 测试元组的类别 public String predictClass(ArrayList> datas, ArrayList testT) { MapvStr ing, ArrayList>> doc = this .datasOfClass(datas); Object classes[] = doc.keySet().toArray(); double maxP = 0.00; int maxP In dex = -1; for (i

7、nt i = 0; i < doc.size(); i++) { String c = classes[i].toString(); ArrayList> d = doc.get(c); double pOfC = DecimalCalculate.div(d.size(), datas.size(), 3); for (int j = 0; j < testT.size(); j++) { double pv = this .pOfV(d, testT.get(j), j); pOfC = DecimalCalculate.mul(pOfC,

8、pv): if (pOfC > maxP){ maxP = pOfC; maxP In dex = i; } } return classes[maxPI ndex].toStri ng(); } /** * 计算指定属性列上指定值出现的概率 * @param d属于某一类的训练元组 * @param value 列值 * @param in dex 属性列索引 * @return 概率 d, String value, int index) */ private double pOfV(ArrayList> { doub

9、le p = 0.00; int cou nt = 0; int total = d.size(); ArrayListvStri ng> t = n ull ; for (int i = 0; i < total; i++) { if (d.get(i).get(index).equals(value)){ cou nt++; } } p = DecimalCalculate.div(count, total, 3); return p; } } package Bayes; import java.io.BufferedReader; import java.

10、io .I OExceptio n; import java.i o.ln putStreamReader; import java.util.ArrayList; import java.util.Stri ngToke ni zer; *贝叶斯算法测试类 * @author chengpeng * @data 2014.11.6 */ public /** class TestBayes { * 读取测试元组 * @return 一条测试元组 @throws lOException */ public ArrayListvStr ing> readT

11、estData() throws lOExceptio n{ ArrayListvStri ng> can dAttr = new ArrayList(); BufferedReader reader = new BufferedReader( new InputStreamReader(System. in )); String str = ""; while (!(str = reader.readLine()).equals( "" )) { Strin gToke ni zer toke ni zer = new Strin gToke ni zer(st

12、r); while (toke nizer.hasMoreToke ns()) { can dAttr.add(toke nizer. nextToke n()); return can dAttr; /** 读取训练元组 @return 训练元组集合 */ @throws lOException public ArrayList> readData() throws lOExcepti on { ArrayList> datas = new ArrayList

13、ng>>(); BufferedReader reader = new BufferedReader( new InputStreamReader(System. in )); String str = ""; while (!(str = reader.readLine()).equals( "" )) { Strin gToke ni zer toke ni zer = new Strin gToke ni zer(str); ArrayListvStri ng> s = new ArrayListvStr in g>(); while (toke nizer.hasMore

14、Toke ns()) { s.add(toke ni zer. nextToke n()); } datas.add(s); } return datas; } public static void main( Stri ng[] args) { TestBayes tb = new TestBayes(); ArrayList> datas = n ull ArrayListvStri ng> testT = n ull ; Bayes bayes = new Bayes(); try { System. out .print

15、ln( ” 请输入训练数据"); datas = tb.readData(); while ( true ) { System. out .println( "请输入测试元组"); testT = tb.readTestData(); String c = bayes.predictClass(datas, testT); System. out .println( "The class is: " + c); } } catch (IOExcepti on e) { e.pri ntStackTrace(); } } } 训练数据: youth high no f

16、air no youth high no excelle nt no middle_aged high no fair yes senior medium no fair yes senior low yes fair yes senior low yes excelle nt no middle_aged low yes excelle nt yes youth medium no fair no youth low yes fair yes senior medium yes fair yes youth medium yes excelle nt yes middl

17、e_aged medium no excelle nt yes middle_aged high yes fair yes senior medium no excelle nt no 对原训练数据进行测试,测试如果如下: 请输入测试元组 youth high no fair The class is: no 请输入测试元组 youth high no excelle nt The class is: no 请输入测试元组 middle_aged high no fair The class is: yes 请输入测试元组 senior medium no fair

18、 The class is: yes 请输入测试元组 senior low yes fair The class is: yes 请输入测试元组 senior low yes excelle nt The class is: yes 请输入测试元组 middle_aged low yes excelle nt The class is: yes 请输入测试元组 youth medium no fair The class is: no 请输入测试元组 youth low yes fair The class is: yes 请输入测试元组 senior me

19、dium yes fair The class is: yes 请输入测试元组 youth medium yes excelle nt The class is: yes 请输入测试元组 middle_aged medium no excelle nt The class is: yes 请输入测试元组 middle_aged high yes fair The class is: yes 请输入测试元组 senior medium no excelle nt The class is: no 测试结果显示14个测试实例中有13个分类是正确的,正确率为 93%,说明算法能够给出 一个准确的预测与分类,但是算法还需改进以提高正确率。 改进的可选方法之一: 为避免单个属性值对分类结果的权重过大,例如当某属性值在某一类中出现 0次时,该属 性值就决定了测试实例已经不可能属于该类了, 这就可能会造成误差,因此在计算概率时可 能进行如下改进: 将原先的 P(Xk|Ci)=|Xk| / |Ci| 改为 P(Xk|Ci)=(|Xk|+mp) / (|Ci|+m),其中 m 可设定为训练元 组的个数,p为等可能假设的先验概率

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!