Machine Learning in Action ch.7.4 & 7.5 AdaBoost
7.4 전체 AdaBoost 알고리즘 구현하기
전에 구현했던 의사결정 스텀프를 가지고 AdaBoost 알고리즘을 구현할 것이다.def adaBoostTrainDS(dataArr,classLabels,numIt=40):
weakClassArr = []
m = shape(dataArr)[0]
D = mat(ones((m,1))/m) #init D to all equal
aggClassEst = mat(zeros((m,1)))
for i in range(numIt):
bestStump,error,classEst = buildStump(dataArr,classLabels,D)#build Stump
#print "D:",D.T
alpha = float(0.5*log((1.0-error)/max(error,1e-16)))#calc alpha, throw in max(error,eps) to account for error=0
bestStump['alpha'] = alpha
weakClassArr.append(bestStump) #store Stump Params in Array
#print "classEst: ",classEst.T
expon = multiply(-1*alpha*mat(classLabels).T,classEst) #exponent for D calc, getting messy
D = multiply(D,exp(expon)) #Calc New D for next iteration
D = D/D.sum()
#calc training error of all classifiers, if this is 0 quit for loop early (use break)
aggClassEst += alpha*classEst
#print "aggClassEst: ",aggClassEst.T
aggErrors = multiply(sign(aggClassEst) != mat(classLabels).T,ones((m,1)))
errorRate = aggErrors.sum()/m
print "total error: ",errorRate
if errorRate == 0.0: break
return weakClassArr,aggClassEst
위의 알고리즘은 입력 데이터 집합, 분류항목 표시, 그리고 반복 횟수를 나타내는 매개변수를 받아 실행된다.
위 함수는 의사 결정 스텀프들로 구축되었지만, 이 부분에 다른 분류기를 사용할 수 있도록 쉽게 변경할 수 있으며, 어떠한 분류기든 동작할 수 있다.
7.5 검사 : AdaBoost로 분류하기
이제 우리는 훈련함수에 있는 약한 분류기가 학습하도록 처리하고학습된 분류기에 사례를 적용해야한다.
약한 분류기의 결과는 각각에 해당하는 알파에 의해 가중치가 부여된다.
모든 약한 분류기로부터가중치가 부여된 결과들은 모두 함께 더해지고
가중치가 부여된 마지막 합계의 부호를 처리한다.
def adaClassify(datToClass,classifierArr):
dataMatrix = mat(datToClass)#do stuff similar to last aggClassEst in adaBoostTrainDS
m = shape(dataMatrix)[0]
aggClassEst = mat(zeros((m,1)))
for i in range(len(classifierArr)):
classEst = stumpClassify(dataMatrix,classifierArr[i]['dim'],\
classifierArr[i]['thresh'],\
classifierArr[i]['ineq'])#call stump classify
aggClassEst += classifierArr[i]['alpha']*classEst
print aggClassEst
return sign(aggClassEst)
댓글
댓글 쓰기