mahout决策树之Partial Implementation源码分析 part1

昨天决策树Partial Implementation实战演示了三个部分:1、Describe ;2、BuildForest;3、TestForest;

今天主要分析下Describe的源码,看下这个类做了什么事情。

打开Describe的源码可以看到这个类主要可以分为三个部分,如下:

(1)生成描述:

String descriptor = DescriptorUtils.generateDescriptor(description);
(2)生成dataset:

Dataset dataset = generateDataset(descriptor, dataPath, regression);
(3)存储dataset:

DFUtils.storeWritable(new Configuration(), fPath, dataset);
下面分别介绍:

第(1)步是把-d参数转换的,比如输入为:3 N I N N 2 C L 5 I,转换为N N N I N N C C L I I I I I;

第(2)步,生成dataset,首先先介绍下dataset:

Dataset有五个参数:atrribute,values, nbInstance,ignored,labelId;

(a) attribute主要存储的是把-d参数转换后的值,比如-d N 3 C 2 N C 4 N C 8 N 2 C 19 N L N,转换后为:NUMERICAL,CATEGORICAL,CATEGORICAL,CATEGORICAL,NUMERICAL,NUMERICAL,CATEGORICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,CATEGORICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,CATEGORICAL,CATEGORICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,NUMERICAL,CATEGORICAL,NUMERICAL;

(b) values主要存储的是Categorical的值,比如kdd的数据其中的values如下:

icmp,udp,tcp,
vmnet,shell,smtp,ntp_u,kshell,aol,imap4,urh_i,netbios_ssn,tftp_u,uucp,mtp,nnsp,echo,tim_i,ssh,iso_tsap,time,netbios_ns,systat,login,hostnames,efs,supdup,http_8001,courier,ctf,finger,nntp,ftp_data,red_i,ldap,http,pm_dump,ftp,exec,klogin,auth,netbios_dgm,other,link,X11,discard,private,remote_job,IRC,pop_3,daytime,pop_2,gopher,sunrpc,rje,name,domain,uucp_path,http_2784,Z39_50,domain_u,csnet_ns,eco_i,whois,bgp,sql_net,printer,telnet,ecr_i,urp_i,netstat,http_443,harvest,
S3,RSTR,SF,RSTO,SH,OTH,S2,RSTOS0,S1,REJ,S0,
1,0,
1,0,
1,0,
1,0,
phf,buffer_overflow,teardrop,guess_passwd,loadmodule,multihop,smurf,spy,normal,land,portsweep,back,warezclient,ftp_write,nmap,satan,rootkit,perl,imap,neptune,warezmaster,ipsweep,pod,

可以看出最后一行为Label的取值范围;

(c) nbInstance表示的是原始数据的样本数;

(d) ignored存储的是被忽略的属性,比如glass.data 被忽略的属性的id为0,(一般如果第一列属性是样本的id,则一般都被忽略)

(e) labeld存储的是Label所在的列,比如kdd的数据labelId为41;

第(3)步是把上面生成的dataset存入文件中,可以在类Dataset中查看write方法,如下:

    out.writeInt(attributes.length); // nb attributes
    for (Attribute attr : attributes) {
      WritableUtils.writeString(out, attr.name());
    }
	for(int ig:ignored){
		System.out.print(ig+",");
	}
    DFUtils.writeArray(out, ignored);

    // only CATEGORICAL attributes have values
    System.out.println("values:");
    for (String[] vals : values) {
      if (vals != null) {
        WritableUtils.writeStringArray(out, vals);
      }
    }
    out.writeInt(labelId);
    out.writeInt(nbInstances);
上面的代码中的每个out.writeXxx(),就是把相关信息保存在文件中;




分享,成长,快乐




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值