import java.io.*;
import weka.classifiers.*;
import weka.classifiers.meta.Vote;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.SelectedTag;
import weka.core.converters.ArffLoader;
public class test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Instances tranIns=null; //训练数据
Instances testIns=null; //测试数据
Classifier cfs1=null; //分类器1
Classifier cfs2=null; //分类器2
Classifier cfs3=null; //分类器3
Classifier []cfsArray=new Classifier[3]; //分类器数组
try
{
File file=new File("C://Program Files//Weka-3-6//data//segment-challenge.arff"); //训练数据
ArffLoader loader=new ArffLoader();
loader.setFile(file);
tranIns=loader.getDataSet(); //读入数据

file=new File("C://Program Files//Weka-3-6//data//segment-test.arff"); //测试数据
loader.setFile(file);
testIns=loader.getDataSet();

testIns.setClassIndex(testIns.numAttributes()-1); //设置类别的位置
tranIns.setClassIndex(tranIns.numAttributes()-1);

cfs1=(Classifier)Class.forName("weka.classifiers.bayes.NaiveBayes").newInstance(); //算法
cfs2=(Classifier)Class.forName("weka.classifiers.trees.J48").newInstance();
cfs3=(Classifier)Class.forName("weka.classifiers.rules.ZeroR").newInstance();
cfsArray[0]=cfs1;
cfsArray[1]=cfs2;
cfsArray[2]=cfs3;

//分类器的决策方式
Vote ensemble=new Vote();
SelectedTag tag1=new SelectedTag(Vote.MAJORITY_VOTING_RULE,Vote.TAGS_RULES);//(投票)
ensemble.setCombinationRule(tag1);
ensemble.setClassifiers(cfsArray);
ensemble.setSeed(2); //设置随机种子
ensemble.buildClassifier(tranIns); //训练分类器

Instance testInst;
Evaluation testingEvaluation1=new Evaluation(testIns); //检测分类模型的类
Evaluation testingEvaluation2=new Evaluation(testIns);
Evaluation testingEvaluation3=new Evaluation(testIns);
Evaluation testingEvaluation4=new Evaluation(testIns);
int length=testIns.numInstances();

//单独学习
for(int i=0;i<length;i++)
{
testInst=testIns.instance(i);
testingEvaluation1.evaluateModelOnceAndRecordPrediction(cfs1, testInst);
}
System.out.println("分类正确率:"+(1- testingEvaluation1.errorRate()));

for(int i=0;i<length;i++)
{
testInst=testIns.instance(i);
testingEvaluation2.evaluateModelOnceAndRecordPrediction(cfs2, testInst);
}
System.out.println("分类正确率:"+(1- testingEvaluation2.errorRate()));

for(int i=0;i<length;i++)
{
testInst=testIns.instance(i);
testingEvaluation3.evaluateModelOnceAndRecordPrediction(cfs3, testInst);
}
System.out.println("分类正确率:"+(1- testingEvaluation3.errorRate()));

//集成学习
for(int i=0;i<length;i++)
{
testInst=testIns.instance(i);
testingEvaluation4.evaluateModelOnceAndRecordPrediction(ensemble, testInst);
}
System.out.println("分类正确率:"+(1- testingEvaluation4.errorRate()));
}
catch(Exception e)
{
e.printStackTrace();
}

}

}

weka 集成学习的更多相关文章

  1. Ensemble_learning 集成学习算法 stacking 算法

    原文:https://herbertmj.wikispaces.com/stacking%E7%AE%97%E6%B3%95 stacked 产生方法是一种截然不同的组合多个模型的方法,它讲的是组合学 ...

  2. 集成学习之Adaboost算法原理小结

    在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,另一类是个体学习器之间不存在强依赖关系.前者的代表算法就是是boostin ...

  3. 使用sklearn进行集成学习——实践

    系列 <使用sklearn进行集成学习——理论> <使用sklearn进行集成学习——实践> 目录 1 Random Forest和Gradient Tree Boosting ...

  4. 使用sklearn进行集成学习——理论

    系列 <使用sklearn进行集成学习——理论> <使用sklearn进行集成学习——实践> 目录 1 前言2 集成学习是什么?3 偏差和方差 3.1 模型的偏差和方差是什么? ...

  5. 集成学习原理:Adaboost

    集成学习通过从大量的特征中挑出最优的特征,并将其转化为对应的弱分类器进行分类使用,从而达到对目标进行分类的目的. 核心思想 它是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器), ...

  6. 集成学习(Ensembling Learning)

    集成学习(Ensembling Learning) 标签(空格分隔): 机器学习 Adabost 对于一些弱分类器来说,如何通过组合方法构成一个强分类器.一般的思路是:改变训练数据的概率分布(权值分布 ...

  7. Ensemble learning(集成学习)

    集成学习:是目前机器学习的一大热门方向,所谓集成学习简单理解就是指采用多个分类器对数据集进行预测,从而提高整体分类器的泛化能力. 我们在前面介绍了.所谓的机器学习就是通过某种学习方法在假设空间中找到一 ...

  8. 集成学习---bagging and boosting

    作为集成学习的二个方法,其实bagging和boosting的实现比较容易理解,但是理论证明比较费力.下面首先介绍这两种方法. 所谓的集成学习,就是用多重或多个弱分类器结合为一个强分类器,从而达到提升 ...

  9. [转]使用sklearn进行集成学习——理论

    转:http://www.cnblogs.com/jasonfreak/p/5657196.html 目录 1 前言2 集成学习是什么?3 偏差和方差 3.1 模型的偏差和方差是什么? 3.2 bag ...

随机推荐

  1. rman全备份异机恢复

    一.测试环境 [oracle@localhost ~]$ uname -a Linux localhost.localdomain -.el6.x86_64 # SMP Tue May :: EDT ...

  2. UILocalNotification本地通知

    // 执行通知一定要退出应用或挂起应用(进入后台)才能收到通知. 1.在iOS8及其以后版本中使用本地消息需要先获得用户的许可,否则无法成功注册本地消息.因此,我们将询问用户许可的代码片段添加到了ap ...

  3. ASP.NET MVC got 405 error on HTTP DELETE request

    使用Backload的时候在本地调试通过,上传服务器后出现405错误(监控通信时可以发现ajax的返回结果为405) 通过修改webconfig可以解决: <system.webServer&g ...

  4. gei shilei d

    body, p { margin: 0; padding: 0; font-size: 16px; } div { margin: 0 auto; } .wrapper { width: 1080px ...

  5. C#正则表达式之字符替换

    string strTest= "www.BaiDu.com",strRst=""; //忽略大小写,将strTest中的BaiDu替换为baidu Regex ...

  6. php邮件发送 phpmailer

    首先要安装phpmailer开源项目. 将class.phpmailer.php转移到php文件夹下, 编写代码: <?php require("class.phpmailer.php ...

  7. java super 隐式参数

    第41集 所有构造器里,第一句话就是super()           (隐式的,系统自动执行) 鸟构造器调用动物构造器,动物构造器调用object构造器. (系统默认的) tostring() 方法 ...

  8. 使用NSURLSession实现断点续传

    在sb中创建按钮,并且连线到.m文件中

  9. Android TextView中的ellipsize属性

    TextView中有个ellipsize属性,作用是当文字过长时,该控件该如何显示,解释如下: android:ellipsize=”start”—–省略号显示在开头 android:ellipsiz ...

  10. error: 'LOGE' was not declared in this scope

    移植了下HAL,发现编译出现如下错误 error: 'LOGE' was not declared in this scope 比较了一下android4.1的 system/core/include ...