2016-09-28 11 views
0

これは完全にばかげた質問ではありません。私は5馬の品種の特性を記述するデータセットdf, n = 2228, p = 19を持っています。最初にデータをtrainingtestに分割することによって、という連続変数を、それぞれbreedの他の17個の予測変数(カテゴリと連続の混在さえも含む)の関数としてモデル化したいと思います。キャレット:列車でグループ化された回帰を実行する

library(tidyverse) 
library(caret) 
library(glmnet) 
# pre- processing reveals no undo correlation, linear dependency or near 
# zero variance veriables 
train <- df %>% group_by(breed) %>% sample_frac(size = 2/3) %>% droplevels() 
test <- anti_join(df, train) %>% droplevels() 
# I imagine I should be somehow able to do this in the following step but can't 
# figure it out 
model <- train(price ~ ., data = train, method = "glmnet") 
test$pred <- predict(model, newdata = test) 

は、私の知る限り、私は(上記のコードを参照してください)breedでデータを分割全く問題がありません。しかし、私はbreedでグループ化されたモデルをどのようにフィットさせるのか分かりません。私は何をしたいことはnlmeすなわちlmList(price ~ . |breed, data = df)

+0

コードは妥当なようですが、あなたの質問は何ですか?トレーニング/テストの分割を処理するために設計されたキャレットで 'createDataPartition()'をチェックアウトしてください。 – Nate

+0

@NathanDay申し訳ありません、明確な質問 – user6571411

+1

gotcha、私はキャレット付き複数のグループのためのオンザフライでトレーニングを行う方法がわかりません。あなたはいつでも 'split'と' lapply'を使ってそれを突き抜けることができますが、ここにいる誰かがよりクリーンなソリューションを提供できると確信しています – Nate

答えて

1

は、私はあなたが何をしたいと思いますパッケージから以下に類似している馬の種類ごとに

horse_typex <- df %>% filter(breed == typex) 

のようなもので、その後にこれらを分割テストとトレーニングのセット。

線形回帰を行いたい場合は、おそらく、斜めになる可能性があるので、代わりに価格のログをモデル化するとよいでしょう。

+0

ありがとう、 'price'変数を変換するログを考えてください。私が知る限り、私は満足にデータセットをトレーニングとテストに分けることができました。私はその質問を明確にした。ご不便おかけしてすみません。 – user6571411

+0

モデルを品種別に適合させる場合は、モデルごとに異なるデータセットが必要です。あなたがカテゴリー変数として品種を使用したくない場合や、各変数が各品種ごとに異なる動作をするように多くの相互作用がある場合を除きます。それを得る? – Stephen

0

試してみてください。私はpurrr

library(purrr) 

models <- train %>% 
      split(.$breed) %>% 
      map(~train(.$price ~ ., data = ., method = "glmnet")) 

またはdplyr

models <- train %>% 
      group_by(breed) %>% 
      do(train(price ~ ., data = ., method = "glmnet")) 

とを使用しようとお勧めします

models <- dlply(df, "breed", function(d_breed) 
    train(price ~ ., data = d_breed, method = "glmnet")) 
0

これが動作するかどうかを知ることは困難であるが、それは価値があります試してみる。

関連する問題