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. Python 爬虫入门(requests)

    相信最开始接触Python爬虫学习的同学最初大多使用的是urllib,urllib2.在那之后接触到了第三方库requests,requests完全能满足各种http功能,真的是好用爆了 :D 他们是 ...

  2. iis认证方式

    http://msdn.microsoft.com/en-us/library/aa302377.aspx

  3. java三种工厂模式

    适用场合: 7.3 工厂模式的适用场合 创建新对象最简单的办法是使用new关键字和具体类.只有在某些场合下,创建和维护对象工厂所带来的额外复杂性才是物有所值.本节概括了这些场合. 7.3.1 动态实现 ...

  4. swift-UILabel

    // Mark: 2. 创建label private func creatLabel(title: NSString)->UILabel{ /// 创建label let titleL = U ...

  5. 简单3d RPG游戏 之 001 生命条(一)

    1.创建一个新项目,引用如下的包: 2.将asset里的First Person Controller拖入project作为游戏角色,将其命名为Player,将mainCamera删除,这样就是用Pl ...

  6. 解决websphere在aix linux下日志乱码

    管理控制台--->服务器--->应用程序服务器--->server1--->java和进程管理--->进程定义--->java虚拟机--->将通用jvm参数设 ...

  7. 被FBI点名的中国黑客-Lion

    网名:Lion(狮子) 真实姓名:林勇 QQ:21509     简介:红客联盟创始人(该组织在2001年5月的黑客大战中一举成名,会员人数最多时达到6万,很有影响力),现在安氏因特网安全系统(中国) ...

  8. Firefly框架参考

    在游戏服务器端,往往需要处理大量的各种各样的任务,每一项任务所需的系统资源也可能不同.而这些复杂的任务只用一个单独的服务器进程是很难支撑和管理起来的.所以,游戏服务器端的开发者往往需要花费大量的时间精 ...

  9. Windows Phone 8 开发环境搭建

    原地址:http://blog.csdn.net/md521/article/details/11015139 Windows Phone 8将采用与Windows 8相同的NT内核,这就意味着WP8 ...

  10. Java从入门到精通(一)

    Java编程可以分为三个方向 ① Java se (j2se) 桌面开发 ② Java ee (j2ee) WEB开发 ③ Java me (j2me) 手机开发 java se 是基础中的基础 Ja ...