【问题标题】:How to predict new raster using model generated by cforest如何使用 cforest 生成的模型预测新栅格
【发布时间】:2015-04-22 18:51:56
【问题描述】:

我使用 randomForest 模型来预测类成员。 “x”由 10 个类组成,我用它们来训练从大型栅格堆栈/砖中提取的“training_predictors”值。具体的代码行是:

r_tree

然后我使用我应用于栅格堆栈“predictor_data”的模型“r_tree”运行“预测”,如下所示:

预测

输出是我用作专题图的栅格。

我想使用条件推理树模式“cforest”而不是 randomForest 来实现相同的目标。

我知道 'predict' 可以与 cforest 一起使用,但我无法生成光栅文件,例如上面所示的带有 randomForest 的光栅文件。

【问题讨论】:

    标签: r random-forest predict


    【解决方案1】:

    它应该可以正常运行,但您可能需要添加参数 OOB=TRUE,并确定因素(如果有)。

    示例数据

    p <- matrix(c(48, 48, 48, 53, 50, 46, 54, 70, 84, 85, 74, 84, 95, 85, 
       66, 42, 26, 4, 19, 17, 7, 14, 26, 29, 39, 45, 51, 56, 46, 38, 31, 
       22, 34, 60, 70, 73, 63, 46, 43, 28), ncol=2)
    
    a <- matrix(c(22, 33, 64, 85, 92, 94, 59, 27, 30, 64, 60, 33, 31, 9,
       99, 67, 15, 5, 4, 30, 8, 37, 42, 27, 19, 69, 60, 73, 3, 5, 21,
       37, 52, 70, 74, 9, 13, 4, 17, 47), ncol=2)
    
    # extract values for points
    xy <- rbind(cbind(1, p), cbind(0, a))
    v <- data.frame(cbind(xy[,1], extract(logo, xy[,2:3])))
    colnames(v)[1] <- 'pa'
    

    基本模型

    library(party)
    m1 <- cforest(pa~., control=cforest_unbiased(mtry=3), data=v)
    pc1 <- predict(logo, m1, OOB=TRUE)
    plot(pc1)
    

    带因子的模型

    v$red <- as.factor(round(v$red/100))
    logo$red <- round(logo[[1]]/100)
    m2 <- cforest(pa~., control=cforest_unbiased(mtry=3), data=v)
    f <- list(levels(v$red))
    names(f) <- 'red'
    pc2 <- predict(logo, m2, OOB=TRUE, factors=f)
    plot(pc2)
    

    顺便说一句,这几乎直接来自 raster::predict 的帮助文件

    【讨论】:

    • 您好,谢谢,但没有成功。我可以使用带有“大型 RasterStack”约 5 亿个元素的 randomForest 模型运行编辑,但是当我尝试使用 cforest 模型(基本)时,它似乎正在工作,但在等待几个小时后没有结果......使用相同的数据,除了该cforest需要一个data.frame。确实令人费解。皮埃尔
    • 嗯,上面显示它应该可以工作。如果它对您不起作用,那可能有几个原因。首先设置一个非常小的示例,仅针对几个单元格,并尝试首先将其作为 data.frame (data.frame( s[1:10] ) 运行(除非前 10 个单元格不适用),然后再运行小光栅(s[1:10, drop=FALSE])
    • 是的,我也有同样的想法。我用一个 100×100 的光栅文件进行了测试,我花了大约 10 分钟来完成“预测”。原始栅格为 2445×2852(约 75 个变量/层)。使用随机森林对象时,大约需要 40 分钟才能完成。好吧,如果 cforest 模型的预测率是正确的,那么需要将近 5 天才能获得完整的栅格。这比较令人费解。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    相关资源
    最近更新 更多