2

我有一个大数据集,我想根据特定变量的值(在我的情况下为生命周期)进行分区,然后在每个分区上运行逻辑回归。在使用 dplyr拟合几个回归模型中@tchakravarty 的回答之后,我编写了以下代码:

lifetimemodels = data %>% group_by(lifetime) %>% sample_frac(0.7)%>%
     do(lifeModel = glm(churn ~., x= TRUE, family=binomial(link='logit'), data = .))

我现在的问题是如何使用生成的逻辑模型来计算其余数据(未选择的 0.3 部分)的 AUC,这些数据应该再次按生命周期分组?

提前非常感谢!

4

1 回答 1

6

您可以调整您的dplyr方法以使用tidyrandpurrr框架。您查看分组/嵌套,以及创建列表框架以存储工作流程片段的mutate和函数。map

您正在寻找的测试/训练拆分是modelr为帮助purrr框架内建模而构建的包的一部分。特别是cross_vmcandcross_vkfold函数。

一个使用的玩具示例mtcars(仅用于说明框架)。

library(dplyr)
library(tidyr)
library(purrr)
library(modelr)

analysis <- mtcars %>%
  nest(-cyl) %>%
  unnest(map(data, ~crossv_mc(.x, 1, test = 0.3))) %>%
  mutate(model = map(train, ~lm(mpg ~ wt, data = .x))) %>%
  mutate(pred = map2(model, train, predict)) %>%
  mutate(error = map2_dbl(model, test, rmse))

这个:

  1. 需要 mtcars
  2. data嵌套到由调用的列表框架中cyl
  3. 通过映射到每个元素将每个元素data分成一个训练集crossv_mc,然后使用unnest它来制作testtrain列出列。
  4. 将模型映射lm到每个train,将其存储在model
  5. predict将函数映射到modeltrain存储在pred
  6. rmse将函数映射到错误设置modeltest存储。

那里可能有比我更熟悉工作流程的用户,所以请更正/详细说明。

于 2017-01-10T19:53:57.090 回答