Github项目 hadoop-imbalanced-preprocessing 如何运行

源起:

hadoop-imbalanced-preprocessing是基于MapReduce实现的随机过采样,随机欠采样和SMOTE算法的程序,它主要解决在大数据环境下类别不平衡问题的数据预处理的问题。该项目直接集成在Mahout项目的代码里面。如果对hadoop 的MapReduce框架和Mahout了解很少的话,会对这个代码很难入手,不知道如何运行它。

解决方案:

我一开始没有去了解Mahout方法,就直接去运行这个程序,结果遇到了很多问题。

首先,在UndersamplingMapper.java有一行代码是这样的,

dataset = UndersamplingBuilder.loadDataset(conf);
我想当然的把Dataset理解为了整个数据集,其实它是Mahout自己的方法生成的对数据集的一个JSON格式的描述。要得到这个描述,可以使用命令行的方式运行下面的指令,可参考 Classifying with random forests
$HADOOP_HOME/bin/hadoop jar $MAHOUT_HOME/core/target/mahout-core--job.jar org.apache.mahout.classifier.df.tools.Describe -p testdata/KDDTrain+.arff -f testdata/KDDTrain+.info -d N 3 C 2 N C 4 N C 8 N 2 C 19 N L
有了dataset的描述信息以后,就可以去执行程序了。

首先,准备好数据集iris.info 是我上一步生成的Dataset的描述文件,iris2.csv是去除了第一行标题的数据集文件。

Github项目 hadoop-imbalanced-preprocessing 如何运行_第1张图片

第二步,在org.apache.mahout.classifier.df.mapreduce包下,建立一个新的Java文件

Github项目 hadoop-imbalanced-preprocessing 如何运行_第2张图片

以过采样方法为例,在新建的Java文件中输入以下代码:

package org.apache.mahout.classifier.df.mapreduce;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.log4j.BasicConfigurator;
import org.apache.mahout.classifier.df.mapreduce.UndersamplingBuilder;
import org.apache.mahout.classifier.df.mapreduce.resampling.UndersamplingMapper;
import org.apache.mahout.classifier.df.mapreduce.resampling.UndersamplingReducer;

public class App {
	public static void main(String[] args) throws Exception {

		BasicConfigurator.configure();

		Path dataPreprocessingPath = new Path(
				"hdfs://192.168.217.128:9000/user/pangying/testdata/DataSet10010with.csv");
		Path datasetPath = new Path(
				"hdfs://192.168.217.128:9000/user/pangying/testdata/DataSet10010.info");
		Path dataPath = new Path(
				"hdfs://192.168.217.128:9000/user/root/output/smote/traffic");
		Configuration conf = new Configuration();
		conf.set("fs.dafaultFS", "hdfs://192.168.217.128:9000");
		conf.set("yarn.resourcemanager.hostname", "192.168.217.128");
		conf.addResource(new Path("core-site.xml"));
		int npos = 10;
		int nneg = 100;
		String posclass = "malicious";
		String negclass = "benign";
		OversamplingBuilder ub = new OversamplingBuilder(dataPreprocessingPath,
				dataPath, datasetPath, conf, npos, nneg, negclass);
		ub.build();
	}

}

根据自己的具体情况,更改相关的参数就可以了。

END

你可能感兴趣的:(大数据分布式框架)