這是機器學習實戰第7章的壹段程序,我也和妳碰到了壹樣的狀況,經過反復斷點測試,最終解決了問題,解決方法是把函數adaBoostTrainDS()返回值中的aggClassEst刪除即可!
原因如下:
def?adaClassify(datToClass,classifierArr):dataMatrix?=?mat(datToClass)
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)上面這段程序的for循環之前時,觀察變量classifierArr的內容:
([{'dim':?0,?'ineq':?'lt',?'thresh':?1.3,?'alpha':?0.6931471805599453},?{'dim':?1,?'ineq':?'lt',?'thresh':?1.0,?'alpha':?0.9729550745276565},?{'dim':?0,?'ineq':?'lt',?'thresh':?0.9,?'alpha':?0.8958797346140273}],?matrix([[?1.17568763],
[?2.56198199],
[-0.77022252],
[-0.77022252],
[?0.61607184]]))
可以發現classifierArr最頂層的維度不是弱分類器們,而是弱分類器與matrix
結合用於生成classifierArr的函數adaBoostTrainDS(dataArr,classLabels,numIt=40)的返回值,可以很快發現,此時除了返回weakClassArr之外,還返回了aggClassEst,這也就導致了classifierArr含有aggClassEst(也就是matrix),因此只需刪除函數adaBoostTrainDS()返回值中的aggClassEst即可!