【问题标题】:Aggregation of multiple functions results聚合多个函数结果
【发布时间】:2013-03-14 15:06:41
【问题描述】:

我有预测变量列表和带有数据的 data.frame。我想做的是使用这个预测器并将它们的结果与一些聚合函数结合起来。我该怎么做?

示例数据如下:

预测变量列表 p1 .. pn. (在我的例子中是树)

每个预测变量返回两列:给定行的“分类概率”和“1 - 分类概率”。

我想对每个预测器返回的“分类概率”求和,并将其与“1 - 分类概率”相加。

样本数据:

library('rpart');
size = 10;
samplesize=100;
mydata=data.frame(age=sample(10:40, samplesize, replace=TRUE), weight=rnorm(samplesize, mean = 60, sd = 20), girth=rnorm(samplesize, mean = 60, sd = 20))
mydata=cbind(mydata, dec=((mydata$weight > 40) | (mydata$girth > 60)))
attributes = colnames(mydata)[1:length(colnames(mydata)) - 1] 


model <- list();
for(i in 1:size) {
  attr = sample(1:length(attributes), sample(1:length(attributes)));
  fmla <- as.formula(paste("dec ~ ", paste(attributes[attr], collapse= "+")));
  tree <- rpart(fmla, data=mydata, method="class", control=model$rc);
  model[[i]] <- tree;
}

model 是预测变量列表,mydata 是实际数据。我现在可以预测:

predict(model[[1]], mydata)

替代方案

我在这里无法实现的主要事情是聚合函数的结果。我可以在这里给出更简单的情况:

f <- function (x, n) {
  data.frame(first = x + n, second=x * n);
}

并希望获得结果列的总和 first 以及 second 列中的值的总和(对于每一行不是全局的)以进行以下调用:

f(1:4, 2)
f(1:4, 3)
..
f(1:4, n)

【问题讨论】:

    标签: r


    【解决方案1】:

    这可能是替代方案:

    f <- function (x, n) {
      data.frame(first = x + n, second=x * n);
    }
    
    n <- 10
    
    l <- lapply(2:n, f, x = 1:4)
    
    ### t(sapply(l, colSums))
    
    Reduce('+', l)
    

    【讨论】:

    • 是的,当我调整解决方案时,它看起来也将解决我的第一个问题。谢谢:)
    • 对不起...我没有注意到这个...结果仍然以错误的维度求和。我最后需要 2x4 矩阵而不是 2xn。我已经使用 Reduce 函数解决了这个问题:“Reduce('+', l)”
    • 好的,从问题中不明白。将您的解决方案添加到答案中。感谢Reduce 功能!
    猜你喜欢
    • 2014-02-23
    • 2020-08-20
    • 2018-07-09
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 2022-09-28
    相关资源
    最近更新 更多