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

anqiang专栏

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

 
 
 

日志

 
 

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

2009-05-18 21:42:46|  分类: RapidMiner |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在第一节中我们看到了RapidMinerXML文件中读取配置信息,然后将样本信息打印出来的过程. 整个过程我们是依赖于XML配置文件的,当然通过配置XML来实现对实验流程的控制是一个非常好的方法.然而,当希望基于它进行二次开发时,我们该如何做,这才是问题的关键.做数据挖掘的人都会知道,在做实验室我们需要不断地调整算法及实验框架,这个时候二次开发是最基本的要求.因此我在这一节简要的介绍一下基于RapideMiner的开发.

RapidMiner中所有的操作都是基于Operator来做的,无论是读取文件,构建分类器,或者是其它的一些工作. 那么当我们希望脱离XML配置文件来工作时,一个自然地想法就是自己初始化一个Operator对象,让它为我们服务,一切的工作由我们来控制.

那么在构建一个简单的分类器过程中会涉及到两类Operator,一类是读取数据信息的;一类是构建分类器.具体流程如下:

1.       构建好读取样本数据信息的Operator;

2.       读取样本数据信息

3.       构建分类器Operator

4.       用读取的样本数据训练分类器

5.       获得分类器训练的模型

代码如下:

package com.test;

 

import com.rapidminer.example.ExampleSet;

import com.rapidminer.operator.IOObject;

import com.rapidminer.operator.Model;

import com.rapidminer.operator.OperatorDescription;

import com.rapidminer.operator.io.ArffExampleSource;

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

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

 

/*

 * Date: 2009.5.18

 * by: Wang Yi

 * Email: wangyi19840906@yahoo.com.cn

 * QQ: 270135367

 *

 */

 

public class TestID3 {

    public static void main(String[] args){

       try{

           /*

            * 获得当前本地的classLoader

            */

           ClassLoader loader = Thread.currentThread().getContextClassLoader();

          

           /*

            * 定义OperatorDescirption对象,这时构建一个 operator对象的必要条件

            * 感觉在这里RapidMiner做的不是很好,它没有提供一个构建默认Operator的方法

            * 使二次开发变得繁琐

            */

           /*

            * 读取数据信息的Operator 在这里是专门为了读取weka中的信息

            */

           OperatorDescription arffDes = new OperatorDescription(loader,"arff","com.rapidminer.operator.io.ArffExampleSource",null,null,"IO.Examples","ArffExampleSource",null);

          

           /*

            * 获得一个分类器对象, 在这里专指ID3Learner的分类器对象

            */

           OperatorDescription classifierDes = new OperatorDescription(loader,"classifier","com.rapidminer.operator.learner.tree.ID3Learner",null,null,"Learner.Supervised.Trees","ID3",null);

          

          

           /*

            * Descirption对象构造对应的Operator对象

            */

           ArffExampleSource arffSource = new ArffExampleSource(arffDes);

          

           ID3Learner ID3 = new ID3Learner(classifierDes);

          

           /*

            * operator订制特定的参数,例如文件来源,类别属性,等等

            */

           arffSource.setParameter("data_file", "D:\\我的文档\\rm_workspace\\sample\\data\\contact-lenses.arff");

           arffSource.setParameter("label_attribute", "contact-lenses");

          

          

           /*

            * 读取样本文件信息,这里是通过operatorapply方法

            */

           IOObject[] ioObject = arffSource.apply();

           ExampleSet set = (ExampleSet)ioObject[0];

          

           System.out.println("example:" + set);

          

           /*

            * 通过ID3的学习会得到一个TreeModel,通过这个对象我们可以做很多工作,例如用它分类测试样本,获得树的根节点等等

            */

           TreeModel model = (TreeModel)(ID3.learn(set));

          

          

       }catch(Exception e){

           e.printStackTrace();

       }

    }

 

}

 

在开发这段代码的过程中,我发现在RapidMiner上做二次开发要比在weka上要繁琐多了.也许开发它的目的更多的是为了终端不进行二次开发的客户吧. RapidMiner在界面的人性化方面做的挺不错. 但是要想在上面做二次开发应该是一个相当的挑战.希望在这方面做的同仁要费一番心思了.!

  评论这张
 
阅读(1806)| 评论(2)
推荐 转载

历史上的今天

评论

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

页脚

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