【问题标题】:How to create model object in bagging?如何在 bagging 中创建模型对象?
【发布时间】:2015-11-04 14:29:15
【问题描述】:

我尝试为 Ensemble of Ensemble 建模创建一个函数:

library(foreach)
library(randomForest)
set.seed(10)
Y<-round(runif(1000))
x1<-c(1:1000)*runif(1000,min=0,max=2)
x2<-c(1:1000)*runif(1000,min=0,max=2)
x3<-c(1:1000)*runif(1000,min=0,max=2)
all_data<-data.frame(Y,x1,x2,x3)
bagging = function(dataFile, length_divisor = 4, iterations = 100)
{
    fit = list()
    predictions = foreach(m = 1 : iterations, .combine = cbind) %do% 
    {
        dataFile$Y = as.factor(dataFile$Y)
        rf_fit = randomForest(Y ~ ., data = dataFile, ntree = 100)
        fit[[m]] = rf_fit
        rf_fit$votes[,2]
    }
    rowMeans(predictions)
    return(list(formula = as.formula("Y ~ ."), trees = fit, ntree = 100, class = dataFile$Y, votes = predictions))
}
final_model = bagging(all_data)
predict(final_model, TestData) # It says predict doesn't support final_model object
# Error in UseMethod("predict") : no applicable method for 'predict' applied to an object of class "list"

上面写着——

UseMethod("predict") 中的错误:没有适用于 'predict' 的方法应用于“list”类的对象。

我需要上述函数bagging 来返回一个聚合模型对象,以便我可以预测新数据集。

【问题讨论】:

  • 如果您尝试创建一个新的“装袋”函数并希望它返回一个具有自己的预测方法的值,那么您需要分配一个由它返回的类值并创建一个 @ 987654323@-函数来处理结果。确实没有默认的预测功能。只有类特定的方法。

标签: r machine-learning


【解决方案1】:

您的bagging 函数只返回一个任意列表。 Predict 查找第一个参数的类以知道“正确的事情”要做。我假设您想从存储在列表中的 randomForest 对象进行预测?您可以使用Map() 遍历您的列表。例如

Map(function(x) predict(x, TestData), final_model$trees)

(未经测试,因为您似乎没有提供TestData

【讨论】:

  • TestData = all_data 尝试做Map()。它返回一个包含 100 个项目的列表,每个项目都有 1000 行的投票。但总的来说,bagging 会返回一个模型对象(这是 100 个模型的聚合结果)吗?我需要这样的结果。
  • 你根本没有定义 bagging,所以不清楚你认为这个函数应该做什么大你对统计模型有疑问,你应该问Cross Validated,否则更准确地了解你的编程问题是。
  • 我正在创建一个名为bagging() 的函数,它类似于glm()randomForest()。就像我正在创建自己的模型(例如,随机森林模型的装袋)。像randomForest()glm() 一样,我需要我的函数返回一个模型对象,该对象可以作为参数传递给predict() 函数。让我举个例子randomForest() 返回树、投票、类等的列表。但是,它是一个模型对象(随机森林类)对吗?我需要我的 bagging() 函数也以相同的方式工作。
猜你喜欢
  • 2017-04-07
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 2019-02-06
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
相关资源
最近更新 更多