全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析与数据挖掘
1030 0
2020-07-30
一个例子accumulate()
与最有用的(集合)库一样,tidyverse提供了很多东西。我最近发现的一个有趣的地方是库accumulate()中的purrr函数,它允许您将函数应用于向量中的一系列值。这篇文章是使用线性回归模型进行使用的快速示例。
该文档对功能进行了相当简短的描述:
accumulate在左侧的列表上递归地应用函数,而accumulate_right在右侧的列表中应用函数。与reduce这两种功能不同,保留中间结果。
对的调用accumulate需要一个列表或原子向量,以及一个具有两个输入变量的函数,即先前迭代的输出和向量中的下一个元素(按此顺序)。尽管基数R已经具有cumsum()和cumprod()功能,但此功能的明显用途是累加和或乘积。您还可以利用R接受字符串作为公式的能力,然后用于accumulate()构建公式的字符向量,然后在每个模型上训练一个模型。
回归示例
对于回归模型,正向选择是一种迭代构建模型的过程,方法是查看哪个变量对模型的改进最大,将其添加到模型中,然后重复进行直到满足某些条件为止。这种改进通常基于\(p \)值或错误度量,但是(假设)您假设所有数值变量(即非因变量)都可能是按照绝对相关性的递减顺序添加变量。(出于多种原因,我知道这不是一个好主意,而我省略了应该进行的探索性分析,但让我们看看会发生什么。)
我们将使用该MASS库中的Boston数据集,并尝试使用几个数字列来预测房屋的中位数(省去几个指标变量或只有几个离散值)。首先,我们按大小从最大到最小的相关顺序获取列:
> library(MASS)
> library(tidyverse)
>
> data(Boston)
>
> cols_to_use <- c("crim"
> correlations <- cor(Boston[
> strongest_to_least_corr <- names(sort(abs(correlations)
> strongest_to_least_corr
[1] "lstat" "ptratio" "indus" "tax" "nox" "crim" "age" "zn" "black" "dis"
然后accumulate()可以帮助您轻松地构建公式字符串的右侧:
> predictor_strings <- accumulate(strongest_to_least_corr
> model_strings <- paste("medv ~"
> model_strings
[1] "medv ~ lstat"
[2] "medv ~ lstat + ptratio"
[3] "medv ~ lstat + ptratio + indus"
[4] "medv ~ lstat + ptratio + indus + tax"
[5] "medv ~ lstat + ptratio + indus + tax + nox"
[6] "medv ~ lstat + ptratio + indus + tax + nox + crim"
[7] "medv ~ lstat + ptratio + indus + tax + nox + crim + age"
[8] "medv ~ lstat + ptratio + indus + tax + nox + crim + age + zn"
[9] "medv ~ lstat + ptratio + indus + tax + nox + crim + age + zn + black"
[10] "medv ~ lstat + ptratio + indus + tax + nox + crim + age + zn + black + dis"
然后,我们为每个模型字符串训练线性回归,并查看经过调整和未经调整的\(R ^ 2 \):
> unadj_R2 <- numeric(10)
> adj_R2 <- numeric(10)
>
> for(i in 1:10){
> model <- lm(model_strings
> m <- summary(model)
> unadj_R2 <- m$r.squared
> adj_R2 <- m$adj.r.squared
> }
>
> R2_data <- data.frame(NumPredictors=1:10
> ggplot(data=R2_data
> geom_line(aes(y=AdjR2
> theme(legend.title = element_blank()) + scale_x_continuous(breaks = seq(1
R平方图。
如上所述,基于调整后的\(R ^ 2 \)从两个预测值减少到六个预测值,这并不是一个好主意,因此该方法显然存在问题。但这是accumulate()可以提供更简洁代码的情况,这是最终要点。

关注 CDA人工智能学院 ,回复“录播”获取更多人工智能精选直播视频!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群