AdaBoost(adaptive boosting 自适应boosting)的一般流程
(1)收集数据:可以使用任意方法收集数据
(2)准备数据:依赖于所使用的弱分类器类型,使用单层决策树,这种分类器可用处理任何数据类型。作为弱分类器,简单分类器的效果更好
(3)分析数据:可用使用任意方法
(4)训练算法:AdaBoost的大部分时间都在训练上,分类器将多次在同一数据集上训练弱分类器。
(5)测试算法:计算分类的错误率
(6)使用算法:同SVM一样,AdaBoost预测两个类别中的一个。如果想把它应用大多个类别场合,那么就要像多类SVM中的做法一样对AdaBoost进行修改
from numpy import *
def loadSimpData():
datMat = matrix(
[[ 1. , 2.1],
[ 2. , 1.1],
[ 1.3, 1. ],
[ 1. , 1. ],
[ 2. , 1. ]])
classLabels = [1.0 , 1.0, -1.0, -1.0, 1.0]
return datMat, classLabels
datMat,classLabels = loadSimpData()
print(datMat)
[[ 1. 2.1]
[ 2. 1.1]
[ 1.3 1. ]
[ 1. 1. ]
[ 2. 1. ]]
print(classLabels)
[1.0, 1.0, -1.0, -1.0, 1.0]
基于单层决策树构建弱分类器的伪代码
将最小错误率minError设为+ $ \infty $
对数据集中的每一个特征(第一层循环):
对每个步长(第二层循环):
对每个不等号(第三层循环):
建立一棵单层决策树并利用加权数据集对它进行测试:
将如果错误率低于minError,则将当前单层决策树设为最佳单层决策树
返回最佳单层决策树
math.log(0.97/0.03)
3.4760986898352733
math.log(0.95/0.05)
2.9444389791664403
math.log(0.95/0.05)
2.9444389791664403
程序清单7-1 单层决策树生成函数
def stumpClassify(dataMatrix,dimen,threshVal,threshIneq):
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((