基于spark的adaboost实现

Adaboost介绍

Adaboost是adaptive boosting(自适应boosting)的缩写,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。它有一个明显的特点就是排除一些不必要的特征值,把模型训练放在关键特征值数据上。它的算法过程如下:


Adaboost从以上概念可以看出它有两种分类器,一种是y1称之为弱分类器,另外一种是Ym称之为强分类器以及一个参数叫alpha,这个值是基于每个弱分类器的错误率进行计算的,其中错误率计算公式如下:

Alpha的计算公式如下:

计算出alpha之后就需要对权重向量D进行更新,D的计算方法如下:

正确被分类的权重计算:

样本被错分之后的权重计算:

本系统的adaboost是基于单层决策树(decision dump)来构建弱分类器的,单层决策树的算法流程如下:

1、  假设数据特征值分为n列m行,错误率初始化为均值,例如100行数据,初始错误向量值为1/100;

2、  对每一列数据(即维度数据)选择出最大值和最小值;

3、  基于最大和最小值设置每一步的区间,假设100步长,那么步区间为:(max-min)/100

4、  遍历每一步区间,做二分类(1和-1),并记录下本次数据和步长的对比关系(大于或者小于)

5、  依据第4步算出的特征值(1或者-1)计算错误率;

6、  提取最小的错误率、维度、关系运算符以及特征值

我们下面要讲解的spark实现的adaboost算法就是实现上述的算法过程。

算法实现

算法实现和spark的自有MLlib的实现步骤基本相同,主要包括:数据加载、特征提取、模型训练。而adaboost算法模型训练之中又包含:弱分类器训练、权重更新、准确率计算三个部分,我们逐步讲解。

数据加载
public static JavaRDD<SimpleDataPoint> loadLibFileFormatData(
			JavaSparkContext sc, String dataFile, boolean labels0Based,
			boolean binaryProblem, int minNumPartitions) {
		 if (sc == null)
	            throw new NullPointerException("The Spark Context is 'null'");
	        if (dataFile == null || dataFile.isEmpty())
	            throw new IllegalArgumentException("The dataFile is 'null'");
	        
			//原始文件加载(本文件的特征值及标签是通过tab键分隔,最后一个是标签值)
	        JavaRDD<String> lines = sc.textFile(dataFile, minNumPartitions).cache();
	        JavaRDD<SimpleDataPoint> docs = lines.filter(new Function<String, Boolean>() {
				@Override
				public Boolean call(String v1) throws Exception {
					//首先进
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
AdaBoost是一种集成学习算法,它可以将多个弱分类器组合成一个强分类器。基于决策树实现AdaBoost的步骤如下: 1. 初始化训练数据的权值分布,使每个样本的权值相等。 2. 对于每个弱分类器: 2.1. 使用当前的权值分布训练一个决策树模型。 2.2. 计算分类误差率,更新样本的权值分布。 2.3. 计算弱分类器的权重。 3. 将所有弱分类器的加权组合作为最终的分类器。 具体细节如下: 1. 初始化训练数据的权值分布,使每个样本的权值相等。 在AdaBoost算法中,每个样本都有一个权值,初始时,每个样本的权值都相等,即$w_i=\frac{1}{N}$,其中$N$是样本总数。 2. 对于每个弱分类器: 2.1. 使用当前的权值分布训练一个决策树模型。 在训练决策树时,需要根据当前的权值分布来确定每个样本的重要性。可以使用加权的基尼指数或加权的信息增益来选择最优的划分特征。 2.2. 计算分类误差率,更新样本的权值分布。 计算分类误差率的公式为$e=\frac{\sum_{i=1}^N w_i I(y_i \neq f(x_i))}{\sum_{i=1}^N w_i}$,其中$I$是指示函数,$y_i$是样本$i$的真实标签,$f(x_i)$是弱分类器对样本$x_i$的预测结果。如果样本$i$被错误分类,则它的权值会增加,否则会减少。具体地,更新权值的公式为$w_i=w_i \exp(-\alpha y_i f(x_i))$,其中$\alpha$是弱分类器的权重,$y_i$是样本$i$的真实标签,$f(x_i)$是弱分类器对样本$x_i$的预测结果。 2.3. 计算弱分类器的权重。 弱分类器的权重的计算公式为$\alpha=\frac{1}{2} \ln \frac{1-e}{e}$,其中$e$是分类误差率。 3. 将所有弱分类器的加权组合作为最终的分类器。 最终的分类器的预测结果为$F(x)=\operatorname{sign}(\sum_{t=1}^T \alpha_t f_t(x))$,其中$T$是弱分类器的个数,$\alpha_t$是第$t$个弱分类器的权重,$f_t(x)$是第$t$个弱分类器对样本$x$的预测结果。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值