gpt4 book ai didi

带有光栅包的randomForest分类的R问题

转载 作者:行者123 更新时间:2023-12-04 09:34:04 25 4
gpt4 key购买 nike

我遇到了 randomForest 和光栅包的问题。首先,我创建分类器:

library(raster)
library(randomForest)

# Set some user variables
fn = "image.pix"
outraster = "classified.pix"
training_band = 2
validation_band = 1
original_classes = c(125,126,136,137,151,152,159,170)
reclassd_classes = c(122,122,136,137,150,150,150,170)

# Get the training data
myraster = stack(fn)
training_class = subset(myraster, training_band)

# Reclass the training data classes as required
training_class = subs(training_class, data.frame(original_classes,reclassd_classes))

# Find pixels that have training data and prepare the data used to create the classifier
is_training = Which(training_class != 0, cells=TRUE)
training_predictors = extract(myraster, is_training)[,3:nlayers(myraster)]
training_response = as.factor(extract(training_class, is_training))
remove(is_training)

# Create and save the forest, use odd number of trees to avoid breaking ties at random
r_tree = randomForest(training_predictors, y=training_response, ntree = 201, keep.forest=TRUE) # Runs out of memory, does not allow more trees than this...
remove(training_predictors, training_response)

到目前为止,一切都很好。通过查看错误率、混淆矩阵等,我可以看到森林是正确创建的。然而,当我尝试对一些数据进行分类时,我遇到了以下问题,它返回了 predictions 中的所有 NA。 :
# Classify the whole image
predictor_data = subset(myraster, 3:nlayers(myraster))
layerNames(predictor_data) = layerNames(myraster)[3:nlayers(myraster)]
predictions = predict(predictor_data, r_tree, type='response', progress='text')

并给出这个警告:
Warning messages:
1: In `[<-.factor`(`*tmp*`, , value = c(1, 1, 1, 1, 1, 1, ... :
invalid factor level, NAs generated
(keeps going like this)...

但是,直接调用 predict.randomForest 可以正常工作并返回预期的 predictions (这对我来说不是一个好的选择,因为图像很大,而且我无法将整个矩阵存储在内存中):
# Classify the whole image and write it to file
predictor_data = subset(myraster, 3:nlayers(myraster))
layerNames(predictor_data) = layerNames(myraster)[3:nlayers(myraster)]
predictor_data = extract(predictor_data, extent(predictor_data))
predictions = predict(r_tree, newdata=predictor_data)

我怎样才能让它直接与“光栅”版本一起工作? 我知道这是可能的,如 predict{raster} 的示例所示.

最佳答案

您可以尝试在 writeRaster 函数中嵌套 predict.randomForest 并根据光栅包中包含的 pdf 将矩阵写入块中的光栅。在此之前,在栅格函数中调用 predict 时尝试参数 'na.rm=TRUE'。您还可以为预测栅格中的 NA 分配虚拟值,然后稍后使用栅格包中的函数将它们重写为 NA。

至于调用 RF 时的内存问题,我在处理 BRT 时遇到了大量内存问题。它们在磁盘和内存中都是巨大的! (模型应该比数据更复杂吗?)我没有让它们在 32 位机器(WinXp 或 Linux)上可靠地运行。有时,调整应用程序的 Windows 内存分配会有所帮助,而迁移到 Linux 的帮助更大,但我从 64 位 Windows 或 Linux 机器中获益最多,因为它们对应用程序可以占用的内存量施加了更高(或没有)限制.通过这样做,您可以增加可以使用的树的数量。

关于带有光栅包的randomForest分类的R问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4198293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com