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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值