【问题标题】:caret: performing grouped regression with train()插入符号:使用 train() 执行分组回归
【发布时间】:2017-02-06 11:52:06
【问题描述】:

希望这不是一个完全愚蠢的问题。我有一个数据集df, n = 2228, p = 19,它描述了5 马品种的特征。我想将连续变量 price 建模为每个 breed 的其他 17 个预测变量(甚至是分类变量和连续变量)的函数,方法是首先将数据拆分为 trainingtest

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)

【问题讨论】:

  • 代码对我来说看起来很合理,你的问题是什么?在插入符号中查看createDataPartition(),它旨在处理培训/测试拆分
  • @NathanDay 抱歉,问题已澄清
  • 明白了,我不知道如何使用插入符号对多个组进行即时训练。你总是可以使用splitlapply 来完成它,但我敢打赌这里有人可以提供更清洁的解决方案

标签: r machine-learning regression r-caret


【解决方案1】:

我建议尝试使用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")) 

很难知道这是否可行,但值得一试。

【讨论】:

    【解决方案2】:

    试试:

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

    【讨论】:

      【解决方案3】:

      我认为你想做的事情是这样的

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

      针对每种类型的马,然后将它们分成测试集和训练集。

      如果您希望进行线性回归,也许您可​​能希望对价格的对数进行建模,因为它可能会出现偏差。

      【讨论】:

      • 谢谢,将考虑对price 变量进行日志转换。据我所知,我能够令人满意地将数据集拆分为训练和测试。我澄清了这个问题。很抱歉给您带来不便。
      • 如果您想按品种拟合模型,那么您需要为每个品种设置不同的数据集。除非您想将品种用作分类变量并具有许多交互作用,以便每个变量对于每个品种的行为都不同。明白了吗?
      猜你喜欢
      • 2019-01-16
      • 2018-05-15
      • 2019-04-19
      • 2019-06-02
      • 2017-05-19
      • 2018-11-11
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      相关资源
      最近更新 更多