Weka 的非监督属性 filters介绍(二)

哈哈,第一篇博客的阅读量上不去耶,看来需要学习weka的专业技术人才太少了哈,加油哟。

本篇博客对于Weka的非监督属性的API的应用举了个栗子,不说了,看代码:

用了iris数据集分类,效果还不错哟,AUC 0.99左右。

创作不易,打赏随意!!

import java.util.Random;


import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSource;
import weka.filters.unsupervised.attribute.*;
import weka.filters.Filter;
import weka.clusterers.*;
import weka.classifiers.Evaluation;
import weka.classifiers.bayes.NaiveBayes;
public class classify {
	
	// 导入数据集
	public static Instances GetData(String path,int ClassIndex) throws Exception {
		DataSource datasource=new DataSource(path);
		Instances dataset=datasource.getDataSet();
		dataset.setClassIndex(ClassIndex);
		return dataset;
		
	}
	// 使用AddCluster过滤器,返回新数据集
	public static Instances AddClusterFilter(Instances dataset,Clusterer cluster) throws Exception{
		AddCluster addcluster=new AddCluster();
		addcluster.setClusterer(cluster);
		addcluster.setInputFormat(dataset);
		Instances newdata=Filter.useFilter(dataset, addcluster);
		return newdata;
	}
	
	
	// 使用AddExpression过滤器,返回新数据集
	public static Instances AddExpressionFilter(Instances dataset,String expr) throws Exception{
		AddExpression addexpression=new AddExpression();
		addexpression.setExpression(expr);
		addexpression.setInputFormat(dataset);
		Instances newdata=Filter.useFilter(dataset, addexpression);
		return newdata; 
		
	}
	
	// 使用InterquartileRange过滤器,返回新数据集
	public static Instances InterquartileRangeFilter(Instances dataset,int[] value) throws Exception{
		InterquartileRange interquartile=new InterquartileRange();
		interquartile.setAttributeIndicesArray(value);
		interquartile.setInputFormat(dataset);
		Instances newdata=Filter.useFilter(dataset, interquartile);
		return newdata;
		
	}
	
	
	
	public static void main(String[] arg) throws Exception {
		String path="D:\\wekanew\\Weka-3-8-4\\data\\iris.arff";
		Instances dataset=GetData(path,4);// 导入数据
		dataset=AddClusterFilter(dataset,new SimpleKMeans());//使用AddCluster过滤器
		String expr="(log(a1)+log(a2)+log(a3))/3";
		dataset=AddExpressionFilter(dataset,expr);//使用AddExpression过滤器
		int[] value= {0,1,2};
        dataset=InterquartileRangeFilter(dataset,value);//使用InterquartileRange过滤器
		NaiveBayes nb=new NaiveBayes();//朴素贝叶斯分类器
		int seed=1;
		int folds=3;
		Random rand = new Random(seed);
		Instances randData = new Instances(dataset);
		randData.randomize(rand);
		// 3折交叉验证
		for(int n=0;n

 

你可能感兴趣的:(Weka 的非监督属性 filters介绍(二))