import com.rapidminer.RapidMiner;
import com.rapidminer.example.Attribute;
import com.rapidminer.example.ExampleSet;
import com.rapidminer.operator.IOContainer;
import com.rapidminer.operator.IOObject;
import com.rapidminer.operator.Model;
import com.rapidminer.operator.ModelApplier;
import com.rapidminer.operator.Operator;
import com.rapidminer.operator.SimpleOperatorChain;
import com.rapidminer.operator.io.ExampleSource;
import com.rapidminer.operator.learner.Learner;
import com.rapidminer.operator.learner.tree.DecisionTreeLearner;
import com.rapidminer.operator.performance.PolynominalClassificationPerformanceEvaluator;
import com.rapidminer.operator.performance.RegressionPerformanceEvaluator;
import com.rapidminer.operator.validation.XValidation;
import com.rapidminer.tools.OperatorService;
import com.rapidminer.operator.OperatorChain;
/*
* Date: 2009.6.6
* by: Wang Yi
* Email: wangyi19840906@yahoo.com.cn
*
*/
public class Demo2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
/*
* rapidMiner初始化
* 在它初始化之前,OperatorService是不可以用的
*/
RapidMiner.init();
/*
* 通过OperatorService创建Operator对象
* 可以同class名称和对象描述信息来创建
*/
Operator exampleSource = OperatorService.createOperator(ExampleSource.class);
/*
* 为读取样本的Operator设置参数,这里是设置数据源的路径
*/
exampleSource.setParameter("attributes", "E:/RMWorkspace/sample/data/labor-negotiations.aml");
/*
* 将样本对象都读取到一个IOContainer中
*/
IOContainer container = exampleSource.apply(new IOContainer());
/*
* 获得一个分类器Operator对象 (C4.5)
*/
Operator learner = OperatorService.createOperator(DecisionTreeLearner.class);
/*
* 创建一个Chain Operator对象
*/
Operator chain = OperatorService.createOperator(SimpleOperatorChain.class);
Operator modelAplier = OperatorService.createOperator(ModelApplier.class);
/*
* 构建Evaluation对象
*
*/
Operator Evaluation = OperatorService.createOperator(PolynominalClassificationPerformanceEvaluator.class);
Evaluation.setParameter("classification_error", "true");
((OperatorChain)chain).addOperator(modelAplier);
((OperatorChain)chain).addOperator(Evaluation);
/*
* get the CrossValidata object
*/
Operator crossValiation = OperatorService.createOperator(XValidation.class);
/*
* 设置交叉验证的次数
* 默认是十次交叉验证
* 我们这里设置为5次
*/
crossValiation.setParameter("number_of_validations", "5");
/*
* 设置样本分割的方式,这里我们采用线性分割的方式
* 默认是随机分割 (除此之外还有其它几种方法)
*/
crossValiation.setParameter("sampling_type", "linear");
/*
* 因为 the crossValiation同时也是一个OperatorChain的对象
* 所以我们可以为其添加子Operator
* 因为分类器对象是它需要的第一个Operator,因此我们需要首先添加分类器Operator
*/
((OperatorChain)crossValiation).addOperator((Operator)learner);
((OperatorChain)crossValiation).addOperator(chain);
/*
* 将样本赋给CrossValiation对象,让它开始检验工作
*/
container = crossValiation.apply(container);
IOObject[] io = container.getIOObjects();
/*
* 打印出预测结果,这个是十次的平均值
* 这个IOObject实际上是一个PerformanceVector对象
*/
System.out.println("Result:"+ io[0]);
}catch(Exception e){
e.printStackTrace();
}
}
}