ipred
包提供是了決策樹的一個bagging實現(xiàn)
library(ipred)
set.seed(300)
mybag = bagging(Good.Loan ~. , data = credit, nbagg = 25)
credit_pred = predict(mybag, credit)
table(credit_pred, credit$Good.Loan)
訓練數(shù)據(jù)的模型已經相當好了熏矿!
不過還是要用CV的方法祭饭,檢驗對未來數(shù)據(jù)的性能缀踪。
我們考慮用10-fold CV 下的 bagged tree 方式虐译。
library(caret)
set.seed(300)
ctrl = trainControl(method = 'cv', number = 10) # number 相當于 10-fold
train(Good.Loan ~., data = credit, method = 'treebag', trControl = ctrl)
kappa 值 0.3669041
除了決策樹的bag雷酪, caret 包還提供了通用的bag()
函數(shù)。
該函數(shù)利用一個控制對象來配置bagging的過程释涛,該對象定義了三個函數(shù)加叁,用于適配(fitting)的函數(shù),
預測函數(shù)唇撬,
聚合函數(shù)(aggregrating the votes)
以SVM為例它匕,kernlab
包提供了ksvm()
函數(shù)
那么bag()
函數(shù)要求我們提供 訓練svm, 預測以及統(tǒng)計votes的功能窖认。
caret
包提供了svmBag
對象用于這一目的:
str(svmBag) # 一個list 包含了三個函數(shù)
svmBag$fit
因此我們可以從用如下方法構建bag 的控制對象:
bagctrl <- bagControl(fit = svmBag$fit, # 訓練
predict = svmBag$pred, # 預測
aggregate = svmBag$aggregate) # 聚集
利用該對象來控制 bagging 過程
set.seed(300)
svmbag = train(Good.Loan ~., data = credit,
method = 'bag', trControl = ctrl, bagControl = bagctrl)
svmbag