Adaboost是一種迭代算法,其核心思想是針對同一個訓練集訓練不同的分類器(弱分類器),然后把這些弱分類器集合起來,構成一個更強的最終分類器(強分類器)。其算法本身是通過改變數據分布來實現的,它根據每次訓練集之中每個樣本的分類是否正確,以及上次的總體分類的准確率,來確定每個樣本的權值。將修改過權值的新數據集送給下層分類器進行訓練,最后將每次訓練得到的分類器最后融合起來,作為最后的決策分類器。對adaBoost算法的研究以及應用大多集中於分類問題,同時也出現了一些在回歸問題上的應用。就其應用adaBoost系列主要解決了: 兩類問題、多類單標簽問題、多類多標簽問題、大類單標簽問題、回歸問題。它用全部的訓練樣本進行學習。
Adaboost算法優缺點:
優點
1) Adaboost是一種有很高精度的分類器
2) 可以使用各種方法構建子分類器,Adaboost算法提供的是框架
3) 當使用簡單分類器時,計算出的結果是可以理解的。而且弱分類器構造極其簡單
4) 簡單,不用做特征篩選
5) 不用擔心overfitting(過度擬合)
缺點
1) 容易受到噪聲干擾,這也是大部分算法的缺點
2) 訓練時間過長
3) 執行效果依賴於弱分類器的選擇
#########################Weka###########################
Adaboost m1是一個非常受歡迎的二元分類算法
#################R語言############################
library(adabag)
## rpart library should be loaded
data(iris)
iris.adaboost <- boosting(Species~., data=iris, boos=TRUE, mfinal=5)
iris.adaboost
## Data Vehicle (four classes)
data(Vehicle)
l <- length(Vehicle[,1])
sub <- sample(1:l,2*l/3)
mfinal <- 10
maxdepth <- 5
Vehicle.rpart <- rpart(Class~.,data=Vehicle[sub,],maxdepth=maxdepth)
Vehicle.rpart.pred <- predict(Vehicle.rpart,newdata=Vehicle[-sub, ],type="class")
tb <- table(Vehicle.rpart.pred,Vehicle$Class[-sub])
error.rpart <- 1-(sum(diag(tb))/sum(tb))
tb
error.rpart
Vehicle.adaboost <- boosting(Class ~.,data=Vehicle[sub, ],mfinal=mfinal, coeflearn="Zhu",
control=rpart.control(maxdepth=maxdepth))
Vehicle.adaboost.pred <- predict.boosting(Vehicle.adaboost,newdata=Vehicle[-sub, ])
Vehicle.adaboost.pred$confusion
Vehicle.adaboost.pred$error
#comparing error evolution in training and test set
errorevol(Vehicle.adaboost,newdata=Vehicle[sub, ])->evol.train
errorevol(Vehicle.adaboost,newdata=Vehicle[-sub, ])->evol.test
plot.errorevol(evol.test,evol.train)