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-<VERSION>-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是去除了第一行標題的數據集文件。

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

以過採樣方法爲例,在新建的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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章