注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

anqiang专栏

不要问细节是怎么搞的,源码说明一切

 
 
 

日志

 
 

RapidMiner 学习四 (交叉验证)  

2009-06-06 14:45:28|  分类: RapidMiner |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在数据挖掘的实验中,我们往往会对样本数据做多次实验来确保算法的正确性。一种常用的方法就是交叉验证的方法(cross-valiation),这种验证方法可以在样本集上做多次实验,方式是将样本集切分成等长的n份,其中n-1份做训练集,1份做测试集,这样我们可以在同一个样本集上做n次实验来确保算法的有效性。

我觉得rapidMiner的文档中有一段话对cross-valiation解释的比较清楚,贴出来与大家分享:In many cases not the learned model is of interest but the accuracy of the model. One possible solution to estimate the predictiveness of the learned model is to apply it to labeled test data and calculate the number of prediction errors (or other performance criteria). Since labeled data is rare, we have to make several experiments on the labeled samples. In this situation, we emply the cross-valiation to deal with this issue.

 

在这里我将在rapidMiner中使用cross-valiation的方法列出来供大家参考:

package com.test;

 

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();

       }

    }

 

}

 

其实写这些代码都是参照,sample包中的xxx.xml文件实例写的,我仅仅是把运算的过程用代码的形式表示出来了而已。

weka中做交叉验证十分的简单,相信大家都会做,所以我就不多说了。

  评论这张
 
阅读(1736)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017