打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
RapidMiner学习二 (简单的分类器构建)
RapidMiner学习二 (简单的分类器构建) 2009-05-18 21:42
在第一节中我们看到了RapidMiner从XML文件中读取配置信息,然后将样本信息打印出来的过程. 整个过程我们是依赖于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();
/*
* 定义Operator的Descirption对象,这时构建一个 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");
/*
* 读取样本文件信息,这里是通过operator的apply方法
*/
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在界面的人性化方面做的挺不错. 但是要想在上面做二次开发应该是一个相当的挑战.希望在这方面做的同仁要费一番心思了.!
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
关于Unity.Object的非空判断
在线教育资讯-产业标准--【原义光】精通SCORM系列之二:SCORM RET概述
Download RapidMiner Community Edition 5.0.010 Free
内存管理(整理笔记)
newnewnew(transfered) - fleeting_ash的日志 - 网易博...
浅谈C++对象的拷贝与赋值操作
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服