2017-07-17 9 views
0

列の値に基づいて複数のランダムフォレストモデルを生成する関数を作成しようとしています。私たちを想定してみましょう:だから列の値に基づいて複数のモデルを作成する関数R

df <- data.frame(Name= c('Aaron','Bob','Nik','Peter','George'), 
          Work=c('A','B','B','C','A') 
          ,Age = c(45,28,64,27,54) 
          ,cl = c(1,2,2,3,1)) 

Name Work Age cl 
Aaron A 45 1 
Bob B 28 2 
Nik B 64 2 
Peter C 27 3 
George A 54 1 

、私はCLに基づいてデータのサブセットをしてからのようなCL値に基づいてモデルを構築する必要があります。上記の例では、私は3 CL values.Soを持って、最初の私は3つのサブセットにデータを分割します3つの異なるモデルを構築します。

Name Work Age cl    Name Work Age cl   Name Work Age cl 
Aaron A 45 1    Bob B 28 2    Peter C 27 3 
George A 54 1    Nik B 64 2 

私はこれを行うには機能の下に使用しています

for(i in unique(uk$v10v11)) { 
    nam <- paste("df", i, sep = ".") 
    assign(nam, uk[uk$v10v11==i,]) 
} 

私は私が私のDFを供給することができ、それがCLに基づいて複数のモデルを構築する必要があり、完全な機能を作りたいです。また、モデルごとに関数自体からランダムフォレストのパラメータを調整する必要があります。助けてください。

+2

あなたは 'list'を使って分割した後、[split]を使うことができます。また、[here](https://stackoverflow.com/questions/18913447/splitting-a-data-frame-by-a-variable) – akrun

+1

を見ることができます。トレーニングモデルとチューニングパラメータへの 'for loop'との比較 – Wen

+0

しかし、clにn個の数値がある可能性があります。私はどのように多くの値がclに現れるかわからない。 –

答えて

0

時間があればthis video from hadley wickhamを見ることをお勧めします。それはあなたの挑戦に非常に関連しています。

これはまた、ので、私の最初の考えはtidyverseを考慮することで、古典的な分割適用コンバイン問題のように思えます。基本的に新しい列がclでその値に基づいて、その行のランダムフォレストアルゴリズムの適切なが含まれて作成されてい

library(tidyverse) 
library(randomForest) 

df2 <- df %>% group_by(cl) %>% mutate(rfcol=list(randomForest(x=., 
            formula=.$cl~.$Work+.$Age))) 

:ここであなたを助けるかもしれないいくつかのコードがあります。 df2$rfcol[[2]]

を参照すると、group_by関数は、cl値に基づいてデータフレームを作成することから始めます。 ファンクション内の.ファンクションは、mutateにネストされ、グループ化された各データフレームを参照する方法です。

これが役に立ちます。しかし、もしあなたが時間があれば、hadley wickhamからそのビデオを見てみてください。これらのタイプの問題について詳しく考える方法を実際に説明します。

+0

私があなたが言及したビデオを見ました。本当に役に立ちます。しかし、私の大きな問題は、各モデルのパラメータを機能自体とは別に調整することです。 –

関連する問題