2016-04-22 47 views
4

我正在構建一個CART模型,我正試圖調整rpart-CP和Maxdepth的兩個參數。當插入符號封裝在一個時間一個參數,做工精良當兩者都用它不斷拋出一個錯誤,我不能夠弄清楚爲什麼如何使用Caret包調整多個參數?

library(caret) 
data(iris) 
tc <- trainControl("cv",10) 
rpart.grid <- expand.grid(cp=seq(0,0.1,0.01), minsplit=c(10,20)) 
train(Petal.Width ~ Petal.Length + Sepal.Width + Sepal.Length, data=iris, method="rpart", 
     trControl=tc, tuneGrid=rpart.grid) 

我收到以下錯誤:

Error in train.default(x, y, weights = w, ...) : 
    The tuning parameter grid should have columns cp 

回答

4

方法「rpart」只能調整cp,方法「rpart2」用於maxdepth。沒有對minsplit或任何其他rpart控件進行調整。如果你想調整不同的選項,你可以編寫一個自定義模型來考慮這一點。

點擊here瞭解更多關於如何操作的信息。另請閱讀this answer關於如何使用列車功能中的rpart控件。

6

caret不能用集成方法做到這一點,所以你將不得不添加你自己的。

或者,您可以在mlr上試用此類似的機器學習框架,該框架允許許多重新採樣策略,調整控制方法和開箱即用的算法參數調整。有很多learners already implemented,有幾個不同的evaluation metrics to choose from

在您的特定問題,嘗試這個例子:

library(mlr) 
iris.task = classif.task = makeClassifTask(id = "iris-example", data = iris, target = "Species") 
resamp = makeResampleDesc("CV", iters = 10L) 

lrn = makeLearner("classif.rpart") 

control.grid = makeTuneControlGrid() 
#you can pass resolution = N if you want the algorithm to 
#select N tune params given upper and lower bounds to a NumericParam 
#instead of a discrete one 
ps = makeParamSet(
    makeDiscreteParam("cp", values = seq(0,0.1,0.01)), 
    makeDiscreteParam("minsplit", values = c(10,20)) 
) 

#you can also check all the tunable params 
getParamSet(lrn) 

#and the actual tuning, with accuracy as evaluation metric 
res = tuneParams(lrn, task = iris.task, resampling = resamp, control = control.grid, par.set = ps, measures = list(acc,timetrain)) 
opt.grid = as.data.frame(res$opt.path) 
print(opt.grid) 

mlr是令人難以置信的通用:包裝方法允許一個融合學習者調整策略,前處理,過濾和估算步驟,等等。

+1

我在使用'mlr'開始我的第一步,也許應該在'tuneParams'函數中使用學習者'lrn'。 –

+1

@EnriquePérezHerrero你絕對正確,謝謝你的支持! –

相關問題