題外話
回家近二十天,一天都沒看書。。。
終于又回來了,終于有更新了。。。
慚愧,把書背回去又背回來。。。
暑假過完一本書的革命任務此時變得更加緊迫。。。
基于單層決策樹的AdaBoost訓練及測試
boosting是通過集中關注被已有分類器錯分的那些數據來獲得新分類器的。
具體不再贅述,書上很詳細,主要就是下面一張圖:
兩步走:
一是基于單層決策樹的AdaBoost進行訓練得到各弱分類器的α和一個字典。
二是基于已獲得的各弱分類器的α和字典計算類別估計累計值對數據進行分類。
示例:
在病馬數據集上應用AdaBoost來分類,測試錯誤率達到穩定值,迭代次數過多會導致過擬合。
非均衡分類問題
其他分類性能度量指標:正確率,召回率,ROC曲線
前面幾章都是基于錯誤率來衡量分類器任務的成功程度。這種度量掩蓋了樣例如何被錯分的事實,現在引入一些指標:正確率,召回率,ROC曲線,AUC。(具體定義和分析不贅述,書上很詳細)
為了畫出ROC曲線,分類器必須提供每個樣例被判成陽性或陰性的可信程度值,而這些值在最后輸出成離散分類標簽時就被清除了。樸素貝葉斯能夠提供一個可能性,而在Logistic回歸中輸入到Sigmoid函數中的是一個數值,在AdaBoost和SVM中,都會計算出一個數值然后輸入到sign()函數中,所有這些數值都可以用于衡量給定分類器的預測強度。
為了創建ROC曲線,首先要將分類樣例按照其預測強度排序。先從排名最低的樣例開始,所有排名更低的樣例被判為反例,而所有排名更高的樣例被判為正例。然后,將其移到排名次低的樣例中,如果該樣例屬于正例,那么對真陽率進行修改,如果該樣例屬于反例,那么對假陽率進行修改。
PS:書上寫道:上述過程聽起來容易讓人混淆,但閱讀一下代碼就一目了然了。我想說:看了上面只是感覺混淆,看到代碼就是完全看不懂了。。。還是回頭看看周志華的西瓜書吧,還好有個印象知道大概意思,不然真是蒙了。
下圖:對病馬數據集訓練后,有10個弱分類器時AdaBoost算法性能結果
下圖:對病馬數據集訓練后,有50個弱分類器時AdaBoost算法性能結果
注:AUC是曲線下面積,它給出的是分類器平均性能,當然它不能完全替代對整條曲線的觀察,一個完美分類器的AUC是1.0,隨機猜測的AUC是0.5。
基于代價函數的分類器決策控制
用于處理非均衡分類的代價方法,有一種叫做 代價敏感的學習。就是分類正確和分類錯誤的代價值是不一樣的。這樣就可以選擇代價最小的分類器。
在AdaBoost中,可以基于代價函數來調整錯誤權重向量D。
在樸素貝葉斯中,可以選擇具有最小期望代價而不是最大概率的類別作為最后的結果。
在SVM中,可以在代價函數中對于不同的類別選擇不同的參數c。
處理非均衡問題的數據抽樣方法
另外一種針對非均衡問題調節分類器的方法,就是對分類器的訓練數據進行改造。這可以通過欠抽樣和過抽樣來實現。即用欠抽樣和過抽樣來調節數據集中的正例和反例數目。