package cn.edu.xmu.bdm.wekainjava.test;
import java.io.File;
import weka.classifiers.Classifier;
import weka.classifiers.Evaluation;
import weka.classifiers.bayes.NaiveBayes;
import weka.classifiers.functions.LibSVM;
import weka.classifiers.meta.Vote;
import weka.core.Instances;
import weka.core.SelectedTag;
import cn.edu.xmu.bdm.wekainjava.utils.WekaFactory;
import cn.edu.xmu.bdm.wekainjava.utils.WekaFactoryImpl;
public class EnsembleTest {
public static void main(String[] args) throws Exception {
// LibSVM classifier = new LibSVM();
File trainFile = new File(
"C://Program Files//Weka-3-6//data//segment-challenge.arff");
File testFile = new File(
"C://Program Files//Weka-3-6//data//segment-test.arff");
/**
* 1. 获取weka工厂类
*/
WekaFactory wi = WekaFactoryImpl.getInstance();
/**
* 3. 从工厂中获取训练样本和测试样本实例
*/
Instances instancesTrain = wi.getInstance(trainFile);
instancesTrain.setClassIndex(instancesTrain.numAttributes() - 1);
Instances instancesTest = wi.getInstance(testFile);
instancesTest.setClassIndex(instancesTest.numAttributes() - 1);
/**
* 2. 从工厂中获取分类器 具体使用哪一种特定的分类器可以选择 这样就构建了一个简单的分类器
*/
Classifier j48 = (Classifier) wi.getClassifier(LibSVM.class);
Classifier naiveBayes = (Classifier)wi.getClassifier(NaiveBayes.class);
Classifier libSVM = (Classifier)wi.getClassifier(LibSVM.class);
/**
* 2.1 设置集成分类器
*/
Classifier[] cfsArray = new Classifier[3];
cfsArray[0] = j48;
cfsArray[1] = naiveBayes;
cfsArray[2] = libSVM;
/**
* 2.2 定制集成分类器的决策方式
* AVERAGE_RULE
* PRODUCT_RULE
* MAJORITY_VOTING_RULE
* MIN_RULE
* MAX_RULE
* MEDIAN_RULE
* 它们具体的工作方式,参考weka的说明文档。
* 通常情况下选择的是多数投票的决策规则
*/
Vote ensemble = new Vote();
SelectedTag tag = new SelectedTag(Vote.MAJORITY_VOTING_RULE, Vote.TAGS_RULES);
ensemble.setCombinationRule(tag);
ensemble.setClassifiers(cfsArray);
//设置随机数种子
ensemble.setSeed(2);
//训练ensemble分类器
ensemble.buildClassifier(instancesTrain);
/**
* 5. 从工厂中获取使用Evaluation,测试样本测试分类器的学习效果
*/
double sum = instancesTrain.numInstances();
Evaluation testingEvaluation = wi.getEvaluation(ensemble, instancesTest);
int length = instancesTest.numInstances();
for (int i = 0; i < length; i++) {
// 通过这个方法来用每个测试样本测试分类器的效果
testingEvaluation.evaluateModelOnceAndRecordPrediction(ensemble,
instancesTest.instance(i));
}
// double[][] confusionMatrix = testingEvaluation.confusionMatrix();
// for (int i = 0; i < confusionMatrix.length; i++) {
// double[] ds = confusionMatrix[i];
// for (int j = 0; j < ds.length; j++) {
// System.out.print(ds[j]);
// }
// System.out.println();
// }
System.out.println(testingEvaluation.toSummaryString());
System.out.println(testingEvaluation.toMatrixString());
System.out.println(testingEvaluation.toClassDetailsString());
// System.out.println(testingEvaluation.toCumulativeMarginDistributionString());
System.out.println("分类器的正确率:" + (1 - testingEvaluation.errorRate()));
}
}
分享到:
相关推荐
}/* * 初始化分类器 * 1.classifierClassName 分类器的类名称 */public static Classifier initClassifier(String classifierClassName) throws Exception{return (Classifier)Class.forName(classifierClassName)....
Weka提供过滤器方法,如单变量统计测试,以及包裹式和嵌入式的特征选择策略。 3. 模型构建:选择合适的分类算法,利用训练数据构建模型。在Weka中,可以通过图形用户界面(GUI)选择算法并调整参数。 4. 模型评估...
"tubes-2-AI: weka新闻分类器"是一个基于Java开发的项目,主要利用了Weka(Waikato Environment for Knowledge Analysis)这一强大的数据挖掘工具,来实现对新闻文章的自动分类。Weka是一个开源的机器学习库,包含了...
下面我们将详细探讨这些文件及其在MATLAB与WEKA集成过程中的作用。 首先,`.arff`文件是WEKA的标准数据格式,如"bolasso.arff"和"iris.arff",它们分别代表了博洛松回归(Bolasso)和鸢尾花(Iris)数据集。这些...
创建自定义分类器是扩展Weka功能的一个关键部分。这个PDF可能详细介绍了如何继承`weka.classifiers.Classifier`接口,实现必要的方法如`buildClassifier()`和`classifyInstance()`,并提供训练和预测的逻辑。 7. *...
在Java开发中,如果要将Weka集成到项目中,首先需要在项目的类路径中添加`weka.jar`。这样,就可以直接使用Weka提供的类和方法,例如`weka.classifiers.Classifier`类用于训练和预测模型,`weka.core.Instances`类...
Weka的C#接口(weka_csharp)允许开发者在.NET环境中集成Weka的功能,包括贝叶斯分类器。这使得开发者能够将机器学习算法嵌入到自己的应用程序中,进行预测或分类任务。通过C#接口,用户可以创建、训练、保存和加载...
- 集成学习:AdaBoost、Bagging、RandomSubSpace等,通过组合多个弱分类器构建强分类器。 **3. 回归算法** Weka也支持回归任务,如线性回归、多项式回归、岭回归、Lasso回归以及神经网络回归等。 **4. 聚类算法** ...
5. **示例代码**:`wekaNBexample.m`可能是一个使用Weka的Naive Bayes分类器的示例脚本,它展示了如何在MATLAB中实现这一过程。 6. **路径设置**:`wekaPathCheck.m`检查MATLAB能否正确找到Weka的安装路径,确保...
2. 学习方法选择:用户可以在Weka的交互式界面中选择分类器或学习器,这些学习器有可调节的参数,通过属性列表或对象编辑器进行设置。常见的学习器有决策树、贝叶斯网络、支持向量机等。 3. 模型评估:Weka内置了...
1. AdaBoost(Adaptive Boosting):这是一种集成学习方法,通过迭代和调整弱分类器的权重,将多个弱分类器组合成一个强分类器。AdaBoost对错误分类的样本给予更高的权重,使得后续的弱分类器更关注这些样本,从而...
WEKA 是一个数据挖掘平台,提供了大量的分类器和回归算法,包括支持向量机(SVM)。LIBSVM 是一个流行的 SVM 软件包,提供了快速有效的 SVM 模式识别与回归功能。然而,在 WEKA 中使用 LIBSVM 并不简单,需要进行...
10. **命令行接口**:除了图形界面,Weka还提供了命令行接口,适合编程人员集成到其他系统或自动化任务中。 通过深入学习和理解Weka提供的这些功能,数据分析和机器学习初学者可以快速掌握数据挖掘的基本流程,并能...
例如,你可以创建新的分类器、聚类器或者预处理方法,并将它们集成到Weka中。这通常涉及实现特定的接口,如`Classifier`或`Clusterer`,并编写相应的训练和预测方法。 5. **数据预处理**:Weka提供了丰富的数据...
- **集成使用**:在实际操作中,往往需要先使用过滤器对原始数据进行预处理,然后再选择合适的分类器进行训练。 - **评估流程**:在训练完分类器后,还需要对整个流程进行评估,确保最终模型的有效性。 #### 三、...
Weka的核心类库提供了一个名为Classifier的接口,用于表示所有的分类器。RBFtree是基于径向基函数的决策树算法,它继承自Classifier接口。因此,你需要导入以下包: ```java import weka.classifiers.trees.RBFTree...
**描述详解:** 描述提到,在WEKA中想要使用function类别下的libsvm和其他分类器,用户需要手动添加libsvm和wlsvm这两个库的Java Archive (JAR) 文件。这意味着在默认情况下,WEKA可能并未直接包含这些特定的库,...
Weka 提供了丰富的 API 接口,使得在 Java 环境中集成数据预处理、分类、聚类、回归等多种机器学习算法变得十分便捷。 在使用 Weka 的 Java 程序与 MySQL 数据库进行连接时,你需要了解以下几个关键知识点: 1. **...