4

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)

この時点まで、すべてが良好です。エラー率や混同行列などを見ると、フォレストが正しく作成されていることがわかります。しかし、一部のデータを分類しようとすると、次の問題が発生し、すべてのNAが返されますpredictions

# 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)

「ラスター」バージョンで直接動作させるにはどうすればよいですか?予測{ラスター}の例に示されているように、これが可能であることを私は知っています。

4

1 に答える 1

0

writeRaster関数内にpredict.randomForestをネストして、ラスターパッケージに含まれているpdfに従って、マトリックスをラスターとしてチャンクで書き込むことができます。その前に、ラスター関数でpredictを呼び出すときに、引数'na.rm=TRUE'を試してください。予測ラスターのNAにダミー値を割り当て、後でラスターパッケージの関数を使用してそれらをNAとして書き換えることもできます。

RFを呼び出すときのメモリの問題に関しては、BRTを扱う際のメモリの問題がたくさんありました。それらはディスクとメモリに巨大です!(モデルはデータよりも複雑である必要がありますか?)32ビットマシン(WinXpまたはLinux)で確実に実行することはできませんでした。アプリケーションへのWindowsメモリ割り当てを微調整することが役立つ場合があり、Linuxに移行することでさらに役立つ場合がありますが、64ビットWindowsまたはLinuxマシンは、アプリケーションが使用できるメモリの量に高い(またはまったく)制限を課していないため、最大限に活用しています。 。これにより、使用できるツリーの数を増やすことができる場合があります。

于 2010-11-18T02:11:35.480 に答える