當前位置:成語大全網 - 新華字典 - TypeError: list indices must be integers, not str 如何解決?

TypeError: list indices must be integers, not str 如何解決?

這是機器學習實戰第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即可!