(Weka22REPTree源代码分析1.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(Weka22REPTree源代码分析1

Weka[22] REPTree 源代码分析 作者:Koala++/屈伟 如果你分析完了ID3,还想进一步学习,最好还是先学习REPTree,它没有牵扯到那么 多类,两个类完成了全部的工作,看起来比较清楚,J48虽然有很强的可扩展性,但是初看 起来还是有些费力,REPTree也是我卖算法时(为了买一台运算能力强一点的计算机,我也 不得不赚钱),顺便分析的,但因为我以前介绍过J48了,重复的东西不想再次介绍了,如 果有什么不明白的,就把我两篇写的结合起来看吧。 我们再次从buildClassifier开始。 Random random = new Random(m_Seed); m_zeroR = null; if (data.numAttributes() == 1) { m_zeroR = new ZeroR(); m_zeroR.buildClassifier(data); return; } 如果就只有一个属性,也就是类别属性,就用 ZeroR 分类器学习,ZeroR 分类器返回训 练集中出现最多的类别值,已经讲过了 Weka 开发[15]。 // Randomize and stratify data.randomize(random); if (data.classAttribute().isNominal()) { data.stratify(m_NumFolds); } randomize 就是把 data 中的数据重排一下,如果类别属性是离散值,那么用 stratify 函 数,stratify 意思是分层,现在把这个函数列出来: public void stratify(int numFolds) { if (classAttribute().isNominal()) { // sort by class int index = 1; while (index numInstances()) { Instance instance1 = instance(index - 1); for (int j = index; j numInstances(); j++) { Instance instance2 = instance(j); if ((instance1.classValue() == instance2.classValue()) || (instance1.classIsMissing() instance2 .classIsMissing())) { swap(index, j); index++; } } index++; } stratStep(numFolds); } } 上面这两重循环,就是根据类别值进行冒泡。下面有调用了 stratStep 函数: protected void stratStep(int numFolds) { FastVector newVec = new FastVector(m_Instances.capacity()); int start = 0, j; // create stratified batch while (newVec.size() numInstances()) { j = start; while (j numInstances()) { newVec.addElement(instance(j)); j = j + numFolds; } start++; } m_Instances = newVec; } 这里我举一个例子说明:j=0 时,numFolds 为 10 时,newVec 加入的 instance 下标就为 0,10,20…。这样的好处就是我们把各种类别的样本类似平均分布了。 // Split data into training and pruning set Instances train = null; Instances prune = null; if (!m_NoPruning) { train = data.trainCV(m_NumFolds, 0, random); prune = data.testCV(m_NumFolds, 0); } else { train = data; } 关于 trainCV 这个就不讲了,就是 crossValidation 的第 0 个训练集作为这次的训练集(train)。 而作为剪枝的数据集 prune 为第 0 个测试集。 // Create array of sorted indices and weights int[][] sortedIndices = new int[train.numAttr

文档评论(0)

tt859685 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档