分類器提升精確度主要就是通過組合,綜合多個分類器結果,對最終結果進行分類。
組合方法主要有三種:裝袋(bagging),提升(boosting)和隨即森林。
裝袋和提升方法的步驟:
1,基於學習數據集產生若干訓練集
2,使用訓練集產生若干分類器
3,每個分類器進行預測,通過簡單選舉(裝袋)或復雜選舉(提升),判定最終結果。
如上圖所示,對數據集D,取得D1~Dk個子集,然后用M1~Mk個不同分類器進行分類訓練,然后用測試集(新元組)得到預測結果,
最后對這k個結果使用少數服從多數原則判定。如用99種分類方法得到55個結果是1,44個結果是0,則判定最終結果為1。
在提升(boosting)算法中,可以看成是裝袋的改進,即可以理解為加權投票。這里具體介紹adaptive boosting算法
該算法基本和袋裝一致,就是新引入一個權重的概念,首先,在(1)初始化中,權重1/d,即每個元組(Di)權重一致,在地(9)~(11)步中,
對權重進行不斷刷新,這里我們可以發現,被正確分類的元組的權重是一直乘以一個小於1的數,即被正確分類的元組,在被選為訓練集Di的可能性降低,
分類器會關注“難以分類”的數據。我們是基於一個“某種分類器可能對某種特定的數據分類效果好”的信念上。
補充:元組概念:元組就是最小數據單位,比如人是一個元組,有身高,體重等屬性。
在對數據進行訓練后,就是用組合分類器。
這里我們看到,有出現一個權重,分類器的投票的權重,這個權重是依照分類器的准確率(錯誤率越低,權重越高)。
接下來是介紹決策樹的提升算法:隨機森林。
隨機森林實際非常直觀,就是用上文提到的隨機裝袋方法,對每個Di構建決策數,這里用CART算法建樹(只需要計算Gini指數),不剪枝。
然后對讓森林里所有的樹進行投票即可。
附上R語言的隨機森林事例:
//如果沒有安裝randomForest包,要先install.packages("randomForest")
library(randomForest) model.forest = randomForest(Species~.,data=iris) pre.forest=predict(model.forest,iris) table(pre.forest,iris$Species)
正確率高達100%
而用單一的決策樹
library(rpart) model.tree=rpart(Species~.,data=iris,method = "class") pre.tree=predict(model.tree,data=iris,type="class") table(pre.tree,iris$Species)
發現有一部分數據會被判錯。
ps:組合分類器的算法摘自韓佳煒《數據挖掘概念與技術》。