Weka-filter类-选择样本[5]

接上文的思路,我们研究如何使用weka的方法,选择样本


目前有3个方法可以研究下:RemovePercentage,RemoveRange,RemoveWithValues


RemovePercentage:顾名思义,根据百分比选择样本

RemoveRange:根据序号选择样本

RemoveWithValues:根据某字段的设定值选择样本


然后,为减少文章重复的内容,我们先看这几个方法的不同的构造函数部分:

(1)RemovePercentage 

	// 第一种方法,在remove类中设置option属性,-P 表示记录百分比,45表示前45%(6条)不选择
	RemovePercentage remove1=new RemovePercentage();
	remove1.setOptions(new String[]{"-P","45"});
				
	// 第二种方法,直接选择需要剔除的属性
	RemovePercentage remove2=new RemovePercentage();
	remove2.setPercentage(80);


(2)RemoveRange

	// 第一种方法,在remove类中设置option属性,-R 表示记录范围,1,5表示第1-5个记录不选择
	RemoveRange remove1=new RemoveRange();
	remove1.setOptions(new String[]{"-R","1,3-10"});
				
	// 第二种方法,直接选择需要剔除的属性
	RemoveRange remove2=new RemoveRange();
	remove2.setInstancesIndices("1,3-5");


(3)RemoveWithValues(仅适用于数值型变量,名义型变量需使用其他方法)

	// RemoveWithValues类,根据 字段属性的值 选择 样本记录
	// 第一种方法,在remove类中设置option属性,-C 表示作用的字段列,2表示第2属性		
	RemoveWithValues remove1=new RemoveWithValues();
	remove1.setOptions(new String[]{"-C","2","-S","80"});
				
	// 第二种方法,直接选择需要剔除的属性
	RemoveWithValues remove2=new RemoveWithValues();
	remove2.setAttributeIndex("2");
	remove2.setSplitPoint(75);


学习了如何使用这3种方法后,我们选择RemoveWithValues方法来演示,完整代码:


import java.io.FileReader;

import weka.core.Instances;
import weka.filters.unsupervised.instance.RemoveWithValues;

public class Filter4 {

	public static void main(String[] args) throws Exception {
		// RemoveWithValues类,根据 字段属性的值 选择 样本记录
		// 第一种方法,在remove类中设置option属性,-C 表示作用的字段列,2表示第2属性		
		RemoveWithValues remove1=new RemoveWithValues();
		remove1.setOptions(new String[]{"-C","2","-S","80"});
				
		// 第二种方法,直接选择需要剔除的属性
		RemoveWithValues remove2=new RemoveWithValues();
		remove2.setAttributeIndex("2");
		remove2.setSplitPoint(75);
				
		// 获取一份数据
		Instances data=new Instances(new FileReader("data/weather.numeric.arff"));
				
		// 显示原数据的容貌
		System.out.println("原数据有:"+data.numInstances()+"记录");
		for(int i=0;i<data.numInstances();i++){
			System.out.println(data.instance(i));
		}
		
		System.out.println("================================");
		
		// remove1用一下
		remove1.setInputFormat(data); // 设置remove使用的数据格式,如果不设置会报 No input instance format define 的错误
		Instances newdata=weka.filters.Filter.useFilter(data, remove1); // 应用remove
		System.out.println("第一种方法,根据第2列剔除小于80的样本,剩余"+newdata.numInstances()+"记录");
		for(int i=0;i<newdata.numInstances();i++){
			System.out.println(newdata.instance(i));
		}
		
		remove1.setInvertSelection(true); // 选择未选择(另一部分)的样本
		remove1.setInputFormat(data);
		newdata=weka.filters.Filter.useFilter(data, remove1);
		System.out.println("未选择的数据有:"+newdata.numInstances()+"记录");
		for(int i=0;i<newdata.numInstances();i++){
			System.out.println(newdata.instance(i));
		}
		
		System.out.println("================================");
				
		// remove2用一下
		remove2.setInputFormat(data); //设置remove使用的数据格式,如果不设置会报 No input instance format define 的错误
		newdata=weka.filters.Filter.useFilter(data, remove2); // 应用remove
		System.out.println("第二种方法,根据第2列剔除小于75的样本,剩余"+newdata.numInstances()+"记录");
		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、付费专栏及课程。

余额充值