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

anqiang专栏

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

 
 
 

日志

 
 

RapidMiner学习三 (简单的分类器构建 续)  

2009-05-31 22:11:26|  分类: RapidMiner |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在上一节介绍如何使用RapidMiner构建简单分类器时,我们通过直接构建Operator的方式来获得操作需要的Operator对象.这样构建的方式使得获得Operator比较灵活,不需要RapidMiner的初始化工作,但是在实际过程中,我们不可能得到很多关于Operator的特定信息,例如它的Icon,它的描述信息,等等,知道的东西仅仅是它的类路径或者类名.这个时候通过直接在RapidMiner容器中获得Operator对象就显得比较灵活了.

本文就将如何在使用RapidMiner容器获得Operator对象做一个小小的演示.这部分代码主要是参照RapidMiner4.1 Tutorial 第七章的内容写的,我现在使用的是4.4版本,tutorial中的内容有点不太符合现在的基库,不太清楚是为什么.

将源码展示给大家:

 

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.Model;

import com.rapidminer.operator.ModelApplier;

import com.rapidminer.operator.Operator;

import com.rapidminer.operator.io.ExampleSource;

import com.rapidminer.operator.learner.Learner;

import com.rapidminer.operator.learner.tree.DecisionTreeLearner;

import com.rapidminer.tools.OperatorService;

 

/*

 * Date: 2009.5.31

 * by: Wang Yi

 * Email: wangyi19840906@yahoo.com.cn

 *

 */

 

public class Demo1 {

 

    /**

     * @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", "D:\\我的文档\\rm_workspace\\sample\\data\\golf.aml");

          

           /*

            * 将样本对象都读取到一个IOContainer

            */

           IOContainer container = exampleSource.apply(new IOContainer());

          

           /*

            * IOContainer中得到ExampleSet对象

            */

           ExampleSet exampleSet = container.get(ExampleSet.class);

          

           /*

            * 获得一个分类器Operator对象

            */

           Learner learner = (Learner)OperatorService.createOperator(DecisionTreeLearner.class);

          

           /*

            * 使用分类器学习到一个模型

            */

           Model model = learner.learn(exampleSet);

          

           /*

            * 读取测试样本

            */

           Operator testSource = OperatorService.createOperator(ExampleSource.class);

           testSource.setParameter("attributes", "D:\\我的文档\\rm_workspace\\sample\\data\\golf.test.aml");

           container = testSource.apply(new IOContainer());

          

           container = container.append(model);

          

           /*

            * 获得一个ModelApplier Operator对象

            * 它用于将Model作用于测试样本集

            */

           Operator modelApp = OperatorService.createOperator(ModelApplier.class);

          

           container = modelApp.apply(container);

          

          

           /*

            * IOContain中得到ExampleSet

            */

           ExampleSet resultSet = container.get(ExampleSet.class);

          

           /*

            * 当使用一个模型对测试样本进行预测后,我们得到的结果信息中会有一个 PredictedLabel属性

            * 它包含了对测试样本的预测标签

            */

           Attribute predictedLabel = resultSet.getAttributes().getPredictedLabel();

          

                 

           /*

            * 打印预测标签

            */

           int length = resultSet.size();

           for(int i = 0; i < length; i ++){

              System.out.println(resultSet.getExample(i).getValueAsString(predictedLabel));   

           }     

          

       }catch(Exception e){

           e.printStackTrace();

       }

    }

 

}

 

RapidMiner在二次开发时比较繁琐,这时我一直有的想法,但是经过这几天看Tutorial的内容,我发觉繁琐也是相对的.当我们真正了解它的精髓时,它还是比较方便.由于在设计上非常追求框架的合理和完美性,RapidMiner把各种的业务都规范化了,这对开发者来说既有好处也有坏处.坏处是我们学起来比较麻烦,非很大的劲才知道它是怎么工作的(流程复杂,或者说流程对初级开发者来说是复杂的).好处是我们懂了这一套流程后,一切的细节都被屏蔽了,我们仅仅需要开发自己的代码,当代码完成时,程序可以无缝的衔接到系统中,(有点道的感觉,你体味到它时,它就存在着,悄然无声. 此为境界!)

  评论这张
 
阅读(2331)| 评论(1)
推荐 转载

历史上的今天

评论

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

页脚

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