首先要把握清楚BayesNet大体上是怎么用:有一个主特征:Class,目的就是判断这个Class的值,BayesNet从训练数据中学习出一个模型,用这个模型做预测,预测测试数据中的Class的值,每个实例是一行,Class T1 T2......Tn T是指特征也就是属性。所以我们的目标任务功能就是自己写代码,完成上述这个过程。好了现在开始。
(套用Weka中的解释:
WEKA把分类(Classification)和回归(Regression)都放在“Classify”选项卡中,这是有原因的。 在这两个任务中,都有一个目标属性(输出变量)。我们希望根据一个样本(WEKA中称作实例)的一组特征(输入变量),对目标进行预测。 )
然后具体分这么几步:
第一步:看基础入门教程,了解Weka是什么,我们能用什么
第二步:看贝叶斯网络,这里有两个,一个是官方的pdf文档http://weka.sourceforge.net/manuals/weka.bn.pdf
另外可以参看这个链接:
http://quweiprotoss.blog.163.com/blog/static/4088288320104273109869/
这个步骤是为了让你知道weka中的贝叶斯原理
第三步:weka安装目录下有个mannul手册,教你怎么embed Weka Api到自己的应用,这一步就是直接开始写代码了,期间可以参考http://www.wekacn.org/viewforum.php?f=6中文论坛,以及weka安装目录下的java doc 还可以网上搜现成的例子,这一步我觉得应该以那个手册,mannul和java doc为主。
主要有用的参考资料 : 第三步中的mannul和java doc
第一步:看这篇入门《WEKA入门教程》 网上一搜就有,提供其中一个链接: http://blogold.chinaunix.net/u2/62093/showart_485477.html
简易总结:这个文档只能是给你一个概念,让你知道有哪些东西能用。具体怎么用后面再说
(1)数据格式很简单,不多讲,注意用引号控制有空格的情况,不然会被当成两个字符串,其他问题查看文档就行
(2) 数值型的属性进行离散化:这个蛮重要的, weka.filters.unsupervised.attribute.Discretize 这个是要用到的类,用的时候有设置参数什么的,还要调用Filter.useFilter.......主要是因为BayesNet的训练集必须是离散化的数据,所以一个方法是在前段产生数据的时候就用java离散化了,这个逻辑在生成数据之前就搞定,那么就不用调用这个filter了,第二个办法就是省去前面java的处理逻辑,允许生成连续的数据,然后调用Weka提供的Discretize搞定,看情况使用。
(3)这里就涉及到数据挖掘的算法了,这里我就只概括一下分类(其他的关联规则什么的请自行查看),先截一段很好的背景:
背景知识
WEKA把分类(Classification)和回归(Regression)都放在“Classify”选项卡中,这是有原因的。
在 这两个任务中,都有一个目标属性(输出变量)。我们希望根据一个样本(WEKA中称作实例)的一组特征(输入变量),对目标进行预测。为了实现这一目的, 我们需要有一个训练数据集,这个数据集中每个实例的输入和输出都是已知的。观察训练集中的实例,可以建立起预测的模型。有了这个模型,我们就可以新的输出 未知的实例进行预测了。衡量模型的好坏就在于预测的准确程度。
在WEKA中,待预测的目标(输出)被称作Class属性,这应该是来自分类任务的“类”。一般的,若Class属性是分类型时我们的任务才叫分类,Class属性是数值型时我们的任务叫回归。
然后我们这里要用到的分类: 当准确度只有69%左右不高的时候,也许我们需要对原属性进行处理,或者修改算法的参数来提高准确度。
这里需要弄清楚一个问题“算法到底是怎么判断怎么预测的,预测的标准是什么比如,贝叶斯,那么是看概率,那么这个概率大于多少才预测 那个class是yes or no呢”?
第二步:
http://weka.sourceforge.net/manuals/weka.bn.pdf+那个参考文档
简易总结:Bays = Bs(DAG)+Bp(CPT) weka 中的Beiyes有两个要求,一个是离散化的数据,另一个是数据的值不能是null 整个学习的过程是先构建DAG在学习出CPT
第三步:to be continued~