整洁模特的理由

约瑟夫·瑞克特

如果您是一名数据科学家,拥有一套您非常熟悉的建模工具,并且这些工具几乎总是足以完成您的工作,那么您可能很难想象是什么会诱使您放弃它们。改变有效的方法是一项很少能激发热情的任务。尽管如此,在这篇文章中,我想指出一些特点tidymodels这甚至可以帮助经验丰富的数据科学家提出理由tidymodels一试。

那么我们在谈论什么呢?tidymodels是一组集成的、模块化的、可扩展的包,它实现了一个框架,该框架有助于创建预测性随机模型。tidymodels的一等会员是tidyverse.他们坚持tidyverse语法和设计原则,促进一致性和精心设计的人机界面,而不是代码执行速度。然而,它们会自动在并行执行中构建,用于重采样、交叉验证和参数调优等任务。此外,他们不只是通过基本建模工作流的步骤工作,他们实现了使复杂的迭代工作流成为可能的概念结构而且可再生的。

如果你是一个R用户,你有建立预测模型,那么你很有可能熟悉脱字符号包中。研究整齐模型的一个直接途径是遵循导致形式的线索脱字符号欧洲防风草脱字符号这是经过15年多艰苦努力的结果,共有238个预测模型形成一个共同的框架。例如,所包含的任何一个模型都可以被替换lm在下面的表达式中。

lmFit <- train(Y ~ X1 + X2, data = training, method = "lm", trControl = fitControl)

这本身就是一件大事。欧洲防风草通过创建一个规范结构来改进这一想法,该规范结构标识了一类模型,允许用户轻松地更改算法,并允许模型在不同的“引擎”上运行。

spec_lin_reg <- linear_reg() %>% #线性模型规范set_engine("lm") #设置模型使用lm #拟合模型lm_fit <- fit(spec_lin_reg, Y ~ X1 + X2, data = my_data)

可以修改该规范以运行贝叶斯模型斯坦,或任意数量的其他线性模型后端,如glmnetkeras火花

set_stan <- spec_lin_reg %>% set_engine("stan", chains = 4, iter = 1000) #设置引擎参数fit_stan <- fit(spec_stan, Y ~ X1 + X2, data = my_data)

就其本身而言,parnsnip为探索多个模型提供了一个节省时间的框架。不必担心为不同模型算法开发的特殊语法,这真是太好了。但是,整洁模型的真正力量已经融入到食谱包中。食谱是将一系列预处理步骤绑定到训练数据集的结构。它们定义了变量在设计矩阵中扮演的角色,指定了需要进行哪些数据清理,以及需要进行哪些特性工程。

要了解所有这些是如何结合在一起的,让我们看看食谱中使用的tidymodels食谱使用纽约市航班数据集的教程,nycflights13.我们假设教程中的所有数据争论代码都已执行,然后我们开始使用代码来定义配方:

flights_rec <- recipe(arr_delay ~ ., data = train_data) %>% update_role(flight, time_hour, new_role = "ID") %>% step_date(date, features = c("dow", "month")) %>% step_rm(date) %>% step_dummy(all_nominal(), -all_outcomes()))

第一行将变量arr_delay标识为要预测的变量,将数据集train_data中的其他变量标识为预测器。第二行修改了这一点,将变量flight和time_hour的角色更新为标识符而不是预测符。第三和第四行通过创建一个新的日期变量并删除旧的日期变量继续进行特性工程。最后一行显式地将所有类别变量或因子变量转换为二进制虚拟变量。

配方已经准备好进行评估,但是如果建模师认为她可能想要为将来跟踪这个工作流,那么她可能会将配方和模型绑定在一起工作流()这样就把所有东西都保存为一个可复制的单元,就像这样的命令。

Lr_mod <- logistic_reg() %>% set_engine("glm") flights_wflow <- workflow() %>% add_model(Lr_mod) %>% add_recipe(flights_rec)

那么,拟合模型就是一件需要做的事情了适合使用工作流作为参数。

Flights_fit <- fit(flights_wflow, data = train_data)

至此,完成统计分析的一切都已就绪。建模师可以提取系数、p值等,计算性能统计数据,进行统计推断,并轻松地将工作流保存在可重复的文件中减价文档。然而真正的收益来自tidymodels当建模师继续构建预测模型时,这一点就很明显了。

下面的图表来自库恩和约翰逊(2019)说明了一个典型的预测建模工作流。

它表明,在继续预测新数据(测试集)上的模型性能之前,建模师将希望使用交叉验证或一些其他重采样技术来首先评估多个候选模型的性能,然后调优所选模型。这就是伟大力量的所在配方()而且工作流()构念变得显而易见。此外,通过合理化算法语法,提供可互换的模型构造,并允许建模者使用管道操作符增长食谱步骤链,鼓励使用多个模型进行实验;recipies有助于加强良好的统计实践

例如,尽管在预处理训练数据集之前,通常会在训练集和测试集之间分割可用数据,但也经常会看到将数据准备一次性应用于整个训练集的管道。数据清洗和准备过程单独应用于十倍交叉验证工作的每一次,这种情况并不常见。但是,这正是减轻数据imputation、定心和缩放以及许多其他准备步骤的有害影响的正确做法,这些步骤会导致偏差并限制模型的预测价值。这就是重新采样的全部意义所在,但是要保存必要的中间工件,并为建模团队中的其他人提供一组可重复的指令,这样做并不容易。

因为,在模型拟合之前,不会对食谱进行评估tidymodel工作流使原本费力且容易出错的流程变得非常简单。这是游戏规则的改变者!

接下来的两行代码为我们的示例设置并执行十次交叉验证。

Set.seed (123) folds <- vfold_cv(train_data, v = 10) flights_fit_rs <- fit_resamples(flights_wflow, folds)

然后,另一行代码收集折叠上的指标,并打印出准确性和ROC曲线下面积的统计数据。

collect_metrics (flights_fit_rs)

所以,这里我们有一个平庸的模型,我现在就停下来,只给你们展示了其中的一小部分tidymodels可以做到,但足够了,我希望能激励你仔细看看。tidymodels.org是一个精心制作的网站,有多层文档。有一些章节,开始指南、详细教程帮助页和一节关于制作贡献

建模的快乐!

你可以在下面留言或者在论坛里讨论这篇文章community.英格兰vs伊朗让球rstudio.com