【问题标题】:Apply function over a 'grid search' series of combinations在“网格搜索”系列组合上应用功能
【发布时间】:2018-08-13 08:55:36
【问题描述】:

我想针对通过“网格搜索”组合方法更改的数据测试简单线性回归模型的输出,以找到最佳数据准备。

假设我有 x 个测试变量,每个变量包含 n 行数据。 x 和 n 可能随不同的数据集而变化。我还有一个缩放向量 v,它的长度也会发生变化。

例如:

tbl <-  read.table(text = 
    "Field1 Field2
    100 200
    150 180
    200 160
    280 250
    300 300
    300 250",
header = TRUE) #length(x) is 2 here

v <- c(0, 0.1, 0.2) # length(v) is 3

我想要做的是循环遍历(或“应用”?)缩放向量 v 组合的每个子集,并在每次迭代中测试我的模型。

换句话说,有效地循环遍历每个 x 的可能值:

Field 1   Field 2
0.0       0.0
0.1       0.0
0.2       0.0
0.0       0.1
0.1       0.1
0.2       0.1
0.0       0.2
0.1       0.2
0.2       0.2

在每次迭代中,按字段 1 的列中的值缩放字段 1,并按字段 2 的值缩放字段 2。我的缩放函数实际上是filter(tbl, v, method="recursive") (thanks!) - 所以在第一次迭代中我的数据框将保持不变(Field1 和 Field2 的 v=0),在第二次迭代中,字段 1 将使用参数 v 应用过滤函数= 0.1 但字段 2 将保持不变 (v=0) ... 组合 4 将保持字段 1 不变 (v = 0) 但字段 2 将应用参数 v = 0.1 的过滤器。

我可以通过嵌套循环来强制执行此操作,但是我将拥有不同数量的 x 变量(可能介于 1 和 10 之间),并且 v 的长度也可能会有所不同。写出 10 个嵌套循环感觉走错路了。

我可以创建这些可能组合的矩阵,然后以某种方式将它们应用于我的数据框吗?如果是这样,我不清楚如何执行此操作,我们将不胜感激!

非常感谢。

【问题讨论】:

  • 我想你希望expand.grid 创造你的可能性
  • 我想我可以从 plyr 包中生成组合矩阵:expand.grid(rlply(length(x), v)。这给了我各种组合;但是如何应用这些组合呢?猜猜我可以在这个阶段循环吗?
  • 你可以直接使用apply。

标签: r loops matrix apply


【解决方案1】:

最后我用了一个半蛮力的答案。

首先,我创建了一个所有组合的网格

combo.matrix <- expand.grid(replicate(length(x), list(v), simplify = T))

然后我遍历这个网格的每一行,嵌套在每个 v 的循环内。

 for (r in 1:nrow(combo.matrix)) {

   new.df <- source.data  # Reset

   for (x in 1:length(v)) {

        new.df[,colnames(new.df) == v[x]] <- base::filter(
                new.df[,colnames(new.df) == v[x]], 
                combo.matrix[r, colnames(combo.matrix) == v[x]], 
                method="recursive")

    }

    # Run regression
    regression <- lm(lm.formula, data=new.df)
    reg.results$Adjusted.r2[r] <- summary(regression)$adj.r.squared
 }

apply 函数可能会更好,但我对它的工作方式没有信心。正确答案授予任何可以:) - 但除此之外,我很高兴。谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多