2017-09-21 13 views
6

ラスタイメージを分類するためにRパッケージレンジャーを使用してランダムフォレストを作成しています。予測関数はエラーを生成し、以後再現可能な例を提供します。ランダムフォレスト(パッケージレンジャー)のイメージ分類(ラスタスタック)

library(raster) 
library(nnet) 
library(ranger) 
data(iris) 

# put iris data into raster 
r<-list() 
for(i in 1:4){ 
    r[[i]]<-raster(nrows=10, ncols=15) 
    r[[i]][]<-iris[,i] 
} 
r<-stack(r) 
names(r)<-names(iris)[1:4] 

# multinom (an example that works) 
nn.model <- multinom(Species ~ ., data=iris, trace=F) 
nn.pred<-predict(r,nn.model) 

# ranger (doesn't work) 
ranger.model<-ranger(Species ~ ., data=iris) 
ranger.pred<-predict(r,ranger.model) 

指定されたエラーは、V IN

エラー[細胞、] <です - predv:私の実際のデータとの誤差が

ですが、マトリックス上の添字の数が正しくありません

p [-naind、]のエラー< - 置き換えられる項目の数が正しくありません。私の心を交差 交換長の倍数

唯一のものはranger.predictionオブジェクトが関心の予測以外のいくつかの要素が含まれていることです。とにかく、レンジャーを使用してラスタスタックを予測する方法は?

+0

私は正しさのために、出力をチェックしていなかったので、これは全く結果を生成しないかもしれませんが、... [rangerパッケージのgithubリポジトリ](https://github.com/imbs-hl/ranger/issues)の問題です。 – lampros

+0

レンジャーの 'predict'は' data.frame'や 'gwaa.data'としてデータを期待しています('?predict.ranger'参照)、おそらくここに問題がありますか? –

答えて

2

ことがいじるの少し後

library(randomForest) 
rf.model<-randomForest(Species ~ ., data=iris) 
rf.pred<-predict(r,rf.model) 
+0

ありがとう@Antonisしかし、レンジャー関数は、私が興味を持っている引数case.weightsで大文字小文字の重みを受け取ります。randomForest do not。だから私はレンジャーを使っている。 – hagc

3

を助け場合は代わりにレンジャーのランダムフォレストで私のために働い:

pacman::p_load(raster, nnet, ranger) 

data(iris) 

# put iris data into raster 
r<-list() 
for(i in 1:4){ 
    r[[i]]<-raster(nrows=10, ncols=15) 
    r[[i]][]<-iris[,i] 
} 
r<-stack(r) 
names(r)<-names(iris)[1:4] 

# multinom (an example that works) 
nn.model <- multinom(Species ~ ., data=iris, trace=F) 
nn.pred <- predict(r,nn.model) # predict(object, newdata, type = c("raw","class"), ...) 

# ranger (doesn't work) 
ranger.model <- ranger(Species ~ ., data=iris) 
ranger.pred <- predict(ranger.model, as.data.frame(as.matrix(r))) 

as.data.frame(as.matrix(r))はそれをやりました!

免責事項:私はあなたが開いた場合は、あなたの質問に答えを得ることができると思います

identical(iris$Species, ranger.pred$predictions) 
+0

ありがとうございます。@ m-dzですが、出力(つまりranger.pred)はラスタではありません。しかし、実際には、(1)ラスタをdata.frameに変換し、(2)dfのエントリを分類し、(3)ラスタに変換するというアプローチを使用しています。しかし、私は大きなラスターではうまくいかないでしょうか? – hagc

+0

残念ながら私はここで答えは分かりませんが、確かに 'predict.ranger'は入力としてラスタを取ることができません...おそらくそれは悪くないでしょうか? –

関連する問題