Weka-无监督属性过滤器-AddCopyAddid[6-1]

在weka中过滤器分为无监督过滤器和有监督过滤器两种,每种类型又细分为属性过滤器和实例过滤器,

前者作用于数据中的属性,后者作用于数据集中的实例。


有监督过滤器使用时,会出现以下情况:测试集数据在有监督过滤器使用时已经使用,必然造成如同先偷看答案再考试的效果。

所以,对于模型的评价是有问题的。要合理地评估有监督离散化,最好使用weka的元学习器FilterClassifier。它仅使用训练数据来构造过滤器,

然后,使用训练数据计算得到的离散间隔来离散化测试数据,并予以评估。(这种方法在后期介绍)


本阶段,我们打算分4个部分研究无监督属性过滤器。


本部分先研究3个方法:Add,Copy,Addid


import java.io.BufferedReader;
import java.io.FileReader;

import weka.core.Instances;
import weka.filters.unsupervised.attribute.Add;
import weka.filters.unsupervised.attribute.AddID;
import weka.filters.unsupervised.attribute.Copy;

public class AddCopyAddid_test {
	public static void main(String[] args) throws Exception{
		// 读入数据
		Instances data=new Instances(new BufferedReader
				(new FileReader("data\\weather.numeric.arff")));
		System.out.println("==========原始数据============");
		for(int i=0;i<data.numInstances();i++)
			System.out.println(data.instance(i));
		System.out.println("======Add使用后数据(2,3列新增)=====");
		
		// 1,选择Add类,设置实例的参数
		Add f=new Add();
		/* 
		 * -T 表示生成的属性类型(STR字符型,NOM名义型,DAT时间型,NUM默认数值型)
		 * -N 表示 插入列的名字
		 * -L 表示 插入列是名义型变量的情况下,取值情况
		 * -C 表示插在哪个列的位置上
		 * -F 表示时间格式,默认:yyyy-MM-dd'T'HH:mm:ss
		 */
		f.setOptions(new String[]{"-T","NOM","-N","nomtest","-L","good,bad","-C","2"});
		f.setInputFormat(data);
		Instances newdata=weka.filters.Filter.useFilter(data, f);
		f.setOptions(new String[]{"-T","DAT","-N","timetest","-C","3","-F","2016-6-27"});
		f.setInputFormat(newdata);
		newdata=weka.filters.Filter.useFilter(newdata, f);
		
		for(int i=0;i<newdata.numInstances();i++)
			System.out.println(newdata.instance(i));
		System.out.println("=========Copy使用后数据(最后列)=========");
		
		// 2,选择Copy类,设置实例的参数
		Copy c=new Copy();
		/*
		 * -R 表示 1,3复制的列,复制后依次在最后
		 */
		c.setOptions(new String[]{"-R","1,3"});
		
		c.setInputFormat(data);
		newdata=weka.filters.Filter.useFilter(data, c);
		
		for(int i=0;i<newdata.numInstances();i++)
			System.out.println(newdata.instance(i));
		System.out.println("=========AddID使用后数据(第3列)=============");
		
		// 3,选择AddId类,设置实例的参数
		AddID ad=new AddID();
		/*
		 * -R 表示 1,3复制的列,复制后依次在最后
		 */
		ad.setOptions(new String[]{"-C","3","-N","ID"});
		
		ad.setInputFormat(data);
		newdata=weka.filters.Filter.useFilter(data, ad);
		
		for(int i=0;i<newdata.numInstances();i++)
			System.out.println(newdata.instance(i));
	}
}


 上图看结果: 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值