1.介绍
Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)
2.算法逻辑
1、先通过对N个训练样本的学习得到第一个弱分类器; 2、将分错的样本和其他的新数据一起构成一个新的N个的训练样本,通过对这个样本的学习得到第二个弱分类器; 3、将1和2都分错了的样本加上其他的新样本构成另一个新的N个的训练样本,通过对这个样本的学习得到第三个弱分类器 4、最终经过提升的强分类器。即某个数据被分为哪一类要由各分类器权值决定。
3.实现(参考西瓜书及机器学习实战)
#adaBoost实现
def adaBoostTrain(dataArr,classLabels,numIt=40):
weakClassArr = []
m = np.shape(dataArr)[0]
D = np.mat(np.ones((m,1))/m) #初始化权重,每个feature都一样
aggClassEst = np.mat(np.zeros((m,1)))
#唯一的入参是迭代次数,要么error为 0跳出循环 ,要么循环次数达到numIt 的时候跳出循环
for i in range(numIt):
# 决策树桩算法,也可以换成其他的算法
bestStump,error,classEst = buildStump(dataArr,classLabels,D)
#print "D:",D.T
alpha = float(0.5*np.log((1.0-error)/max(error,1e-16)))#计算alpha值
bestStump['alpha'] = alpha
weakClassArr.append(bestStump)
#print "classEst: ",classEst.T
#重新计算权重
expon = np.multiply(-1*alpha*np.mat(classLabels).T,classEst)
D = np.multiply(D,np.exp(expon))
D = D/D.sum()
aggClassEst += alpha*classEst
aggErrors = np.multiply(np.sign(aggClassEst) != np.mat(classLabels).T,np.ones((m,1)))
errorRate = aggErrors.sum()/m
print "total error: ",errorRate
if errorRate == 0.0: break
print "weakClassArr:",weakClassArr
print "aggClassEst:", aggClassEst
return weakClassArr,aggClassEst
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。