2017-03-17 23 views
2

私は素晴らしいmlrパッケージを、タイタニックdata setで調べています。私の問題は、ランダムなフォレストを実装することです。具体的には、cutoff(つまり、指定されたクラスに純粋でないリーフを割り当てるしきい値)を調整したいと思います。問題は、cutoff引数が2つの値をとることですが、単一値の場合はmlrにハイパーパラメータを設定することしかできません。MLRパッケージのrandomForestカットオフを調整する

コード:

library(mlr) 
library(dplyr) 

dTrain <- read.csv('path/to/data/') 

#Defining the Task 
trainTask <- makeClassifTask(data = dTrain %>% 
          select(-Name, -Ticket, -Cabin) %>% 
          filter(complete.cases(.)), 
         target = "Survived", 
         id = "PassengerId") 

#Defining Learning 
rfLRN <- makeLearner("classif.randomForest") 

#Defining the Parameter Space 
ps <- makeParamSet(
makeDiscreteParam("cutoff", values = list(c(.5,.5), c(.75,.25))) 
) 

が問題だった。これは、しかし、私はこれらの2つの値を渡す方法がわからないんだけど、cutoff、ある2つの値を必要とします。上記の試みは間違っています。私はいくつかの他のパラメータメーカー、すなわちmakeDiscreteVectorParamなどを試しましたが、役に立たないです。任意のヒント?

代わりにmtryのようなパラメータ(特定の分割点から選択するフィーチャの数)を調整しようとすると、すべて正常に動作します。あなたはこれらの分類カットオフ、例えばに名前を割り当てる必要がありますように

#Defining the Hyperparameter Space 
ps = makeParamSet(
    makeDiscreteParam("mtry", values = c(2,3,4,5)) 
) 

#Defining Resampling 
cvTask <- makeResampleDesc("CV", iters=5L) 

#Defining Search 
search <- makeTuneControlGrid() 

#Tune! 
tune <- tuneParams(learner = rfLRN 
       ,task = trainTask 
       ,resampling = cvTask 
       ,measures = list(acc) 
       ,par.set = ps 
       ,control = search 
       ,show.info = TRUE) 
+1

を同様の問題を持つ人のために、より良いアプローチは '使用することですmakeDiscreteParam( "cutoff")ではなく、makeNumericParam( "cutoff"、lower = .2、upper = .8、trafo = function(x、1-x) 50、.50)、b = c(.75、.25)) '。 –

答えて

2

が見える:

#Defining the Parameter Space 
ps <- makeParamSet(
    makeDiscreteParam("cutoff", values = list(
    a=c(.50,.50), 
    b=c(.75,.25))) 
) 

出力:

> tune <- tuneParams(learner = rfLRN 
+     ,task = trainTask 
+     ,resampling = cvTask 
+     ,measures = list(acc) 
+     ,par.set = ps 
+     ,control = search 
+     ,show.info = TRUE) 
[Tune] Started tuning learner classif.randomForest for parameter set: 
      Type len Def Constr Req Tunable Trafo 
cutoff discrete - - a,b - TRUE  - 
With control class: TuneControlGrid 
Imputation value: -0 
[Tune-x] 1: cutoff=a 
[Tune-y] 1: acc.test.mean=0.828; time: 0.0 min 
[Tune-x] 2: cutoff=b 
[Tune-y] 2: acc.test.mean=0.776; time: 0.0 min 
[Tune] Result: cutoff=a : acc.test.mean=0.828 
関連する問題