2017-01-25 4 views
0

私の変数がリアルタイムで変更を続けるので、私はランダムフォレストモデルを自動的に調整したいと思います。私はirisデータセットを使用しています。ランダムフォレストを自動的に調整する

私のコード私はfgl.resコードで、それは自動的に、すなわち5 irisでデータセットSpecies列インデックスを選択し、fgl.resコードに挿入することを望む上

jk = iris 

library(randomForest) 
library(caret) 

fgl.res <- tuneRF(lm[,-5], lm[,5], stepFactor=1.5) 

o/p: 
mtry = 2 OOB error = 5.33% 
Searching left ... 
Searching right ... 
mtry = 3 OOB error = 4% 
0.25 0.05 
mtry = 4 OOB error = 5.33% 
-0.3333333 0.05 

です。

そして(P/O)fgl.res出力の最初の行を使用すると"mtry = 2 OOB error = 5.33% "の値をとり、ランダムフォレストコードでそれを使用する、すなわち、以下に示すようにmtryoob.errorに値を割り当てる:

mod2<-randomForest(Species~., data=lm, ntree=50, mtry=2, oob.error=0.0533) 

Iは多くの方法を試しましたが、fgl.res出力からコードに自動的に値を挿入する方法については何も解決しません。

答えて

0

問題を正しく理解しているかどうかは分かりませんが、この方法を使用することもできます。
tuneRFを使用する場合は、OOBエラーが最も低いmtryを選択する必要があります。 私はinvisible(capture.output(...))関数を使用して、tuneRF関数を入力した後でコンソールに出力を非表示にします。

例:

# load library 
library(randomForest) 
library(caret) 

# data 
data_iris = iris 

# repeat the analysis 
set.seed(4543) 

# tuneRF 
invisible(capture.output(fgl.res <- tuneRF(x = data_iris[,-5], y= 
data_iris[,5], stepFactor=1.5))) 

# choose the best mtry based on the lowest OOB error 
best_mtry <- fgl.res[fgl.res[, 2] == min(fgl.res[, 2]), 1] 

# choose the lowest OOB error 
best_oob <- fgl.res[fgl.res[, 2] == min(fgl.res[, 2]), 2] 

# caluclate RF 
mod2<-randomForest(Species~., data=data_iris, ntree=50, mtry=best_mtry, 
oob.error=best_oob) 

あなただけfgl.res出力の最初の行を抽出し、mtryとOOB誤差の値を取りたい場合は、あなたが使用する必要があります。

# choose the best mtry based on the lowest OOB error 
best_mtry <- fgl.res[1, 1] 

# choose the lowest OOB error 
best_oob <- fgl.res[1, 2] 

私が知っています10ヶ月前にこの質問を投稿したことがありますが、このアプローチは他のユーザーには便利なことでしょう。

関連する問題