1.集成方法
集成方法是将不同的分类器组合在一起将测试数据集进行分类的方法,可以是不同算法的集成或是同一算法在不同设置下的集成,也可以将数据集不同部分分配给不同分类器的集成。集成方法主要包括bagging和boosting两种方法,而AdaBoost算法是基于boosting思想的机器学习算法。
2.boosting介绍
boosting所使用的多个分类器类型都是一致的,根据被已有1分类器错分的那些数据来获得新的分类器。boosting分类的结果是基于所有分类器的加权求和结果的,所以分类器的权重并不相等,每个权重代表的是其对应分类器在上一轮迭代中的成功度。
3.AdaBoost介绍
AdaBoost的流程如下:
首先需要给训练数据中的每个样本都要赋予一个权重,这些权重构成了向量D,在算法的最开始,D向量中每个值都是相等的。再通过训练数据训练出分类器,但此时的分类器是弱分类器,不会满足我们的需求,这里可以得到每个分类器的错误率。根据第一次得到的错误率,我们可以更新每一个样本的权重,第一次分对的样本的权重会降低,分错的样本的权重会提高。Adaboost算法也给了每个分类器分配了权重alpha,alpha值的更新也是根据错误率进行计算。
错误率:
分类器权重alpha:
正确分类的样本权重:
错误分类的样本权重:
其中i代表第i个样本,t代表第t次的分类。
Adaboost算法流程如下:
将输出结果代入下一次迭代,直到训练错误率为0或者分类器的个数达到了用户的规定,Adaboost算法结束。
4.Adaboost具体实现(python3)
我们选择单层决策树作为Adaboost的弱分类器:
def stumpClassify(dataMatrix,dimen,threshVal,threshIneq):#just classify the data
retArray = ones((shape(dataMatrix)[0],1))
if threshIneq == 'lt':
retArray[dataMatrix[:,dimen] <= threshVal] = -1.0
else:
retArray[dataMatrix[:,dimen] > threshVal] = -1.0
return retArray
def buildStump(dataArr,classLabels,D):
dataMatrix = mat(dataArr); labelMat = mat(classLabels).T
m,n = shape(dataMatrix)
numSteps = 10.0; bestStump = {}; bestClasEst = mat(zeros((m,1)))
minError = in