weka 集成学习

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 集成学习

时间: 2024-11-05 01:53:31

weka 集成学习的相关文章

Ensemble_learning 集成学习算法 stacking 算法

原文:https://herbertmj.wikispaces.com/stacking%E7%AE%97%E6%B3%95 stacked 产生方法是一种截然不同的组合多个模型的方法,它讲的是组合学习器的概念,但是使用的相对于bagging和boosting较少,它不像bagging和boosting,而是组合不同的模型,具体的过程如下:1.划分训练数据集为两个不相交的集合.2. 在第一个集合上训练多个学习器.3. 在第二个集合上测试这几个学习器4. 把第三步得到的预测结果作为输入,把正确的回

集成学习 概念介绍

集成学习(Esemble learning) 在机器学习领域,如何根据观察数据学习一个精确的估计数据是一个主要问题. 通常,我们通过训练数据应用某个算法得出一个训练模型,然后使用评估数据来评估这个模型的预测正确率,最后如果我们可以接受这个正确率就使用该模型进行预测数据.通常我们将训练数据进行交叉验证,比如说10则交叉验证,我们将训练数据平均分为10份,循环用其中的9份数据来训练模型,用另一份数据验证准确率,最后将结果准确率平均就是最后的分类准确率.当然还有其他方法. 但是寻找一个可以有很高准确率

【基础知识八】集成学习

难点:如何产生"好而不同"的个体学习器:"好而不同":"准确性"和"多样性" 一.个体与集成 构建并结合多个学习器来完成学习任务 集成:结果通过投票法voting产生,"少数服从多数" 获得整体性能提升要求个体学习器:好而不同 1)个体学习器有一定的"准确性" 2)学习器间具有差异 集成学习的错误率: 假设基学习器的误差相互独立,随着集成中个体分类器数目T的增大,集成的错误率将指数级下降

scikit_learn 官方文档翻译(集成学习)

1.11. Ensemble methods(集成学习) 目标: 相对于当个学习器,集成学习通过使用多个基学习器的预测结果来来提高学习预测的泛化性能以及鲁棒性: 集成学习的两个思路: 1).通过使用并行的学习,得到多个学习模型然后取其平均结果目的在于减少方差,代表算法有随机森林.通常来说多个学习器的集成要比单个学习器的效果要好多. 2).采用串行的方式生成多个学习器目的在于减少偏差(bias),使用多个弱分类器组合成为一个强分类器,代表算法adaBoosting以及boosting tree.G

机器学习算法--集成学习

1. 个体和集成 集成学习通过构建并结合多个"个体学习器"来完成学习任务.个体学习器通常由一个现有的学习算法从训练数据产生,若集成中只包含同种类型的个体学习器,称为同质集成:若包含不同类型的个体学习器,为异质集成.同质集成中的个体学习器也成为"基学习器". 如何产生并结合"好而不同"的个体学习器,恰是集成学习研究的核心. 根据个体学习器的生成方式,目前的集成学习方法大致分为两大类: (1)个体学习器间存在强依赖关系,必须串行生成的序列化方法,代表

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

在集成学习原理小结中,我们讲到了集成学习按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,另一类是个体学习器之间不存在强依赖关系.前者的代表算法就是是boosting系列算法.在boosting系列算法中, Adaboost是最著名的算法之一.Adaboost既可以用作分类,也可以用作回归.本文就对Adaboost算法做一个总结. 1. 回顾boosting算法的基本原理 在集成学习原理小结中,我们已经讲到了boosting算法系列的基本思想,如下图: 从图中

机器学习之集成学习

1. 概念梳理: AdaBoost: 运行过程:训练数据中的每一个样本,并赋一个权重,这些权重值构成向量D,已开始这些权重值一样. 第一次训练完,得到一个弱分类器,计算该分类器的错误率,然后调整每个样本的权重值,对同一个训练数据进行第二次训练得到第二个分类器.(第一次分对的样本权重减小,分错的权重提高.)并且AdaBoost为每个分类器都分配了一个权重值alpha. 这样,样本权重D和alpha不断训练和调整,知道错误率为0或者分类器的数目达到要求为止. bagging:从原始数据集选择S次后得

关于集成学习基础的简单描述

关于集成学习基础的简单描述 什么是集成学习? 集成建模是优化模型表现的一条重要途径.通常来说,将集成学习方法运用在你所构建的诸多模型之上是十分值得的,而同道中人们也一次又一次地证明着这一点.他们在诸如Kaggle之类的数据建模竞赛中往往会不约而同地采用集成学习,并且从中受益. 集成学习其实是一个很宽泛的概念,对于它的定义,可谓仁者见仁智者见智.接下来,本文将介绍一些集成建模的基本概念和思想,这些知识应该足以让你起步,从而去构建你自己的集成模型.同时,和往常一样,我们将尽量让它们看起来简单一些.

选择性集成学习

在机器学习领域,集成学习由于可以提高学习系统的泛化能力,因此被广泛关注使用.对于集成学习可以分为两个阶段: 1)对训练数据集构造出多个基分类器. 这些基分类器的构造通常采用数据子集或者特征子集的方法进行构造,加上随机子集的方法,保证构造出的多个基分类器相互之间具有差异性 2)对这些基分类器的预测结果采用某种方式进行组合预测.             组合方式可以是平均投票,加权投票等等. 那么选择性集成学习,其实就是在集成学习的基础上增加了一个阶段,即分类器的选择阶段.也可以认为是通过剔除那些对