22

ROCRでROC曲線をプロットする方法を教えてください。私は最初に実行する必要があることを知っています:

prediction(predictions, labels, label.ordering = NULL)

その後:

performance(prediction.obj, measure, x.measure="cutoff", ...)

予測とラベルの意味がわかりません。ctree と cforest を使用してモデルを作成しましたが、最終的に両方の ROC 曲線を比較したいと考えています。私の場合、クラス属性は y_n で、ラベルに使用する必要があると思います。しかし、予測はどうですか?私がやっていることのステップは次のとおりです(データセット名= bank_part):

pred<-cforest(y_n~.,bank_part)
tablebank<-table(predict(pred),bank_part$y_n)
prediction(tablebank, bank_part$y_n)

最後の行を実行した後、次のエラーが発生します。

Error in prediction(tablebank, bank_part$y_n) : 
Number of cross-validation runs must be equal for predictions and labels.

前もって感謝します!

別の例を次に示します。トレーニング データセット (bank_training) とテスト データセット (bank_testing) があり、以下のように randomForest を実行しました。

bankrf<-randomForest(y~., bank_training, mtry=4, ntree=2,    
keep.forest=TRUE,importance=TRUE) 
bankrf.pred<-predict(bankrf, bank_testing, type='response')

これで、bankrf.pred はラベル c=("0", "1") を持つ因子オブジェクトになります。それでも、ROC をプロットする方法がわかりません。予測の部分に行き詰まってしまうからです。これが私がすることです

library(ROCR) 
pred<-prediction(bankrf.pred$y, bank_testing$c(0,1) 

しかし、これはまだ正しくありません。エラー メッセージが表示されるためです。

Error in bankrf.pred$y_n : $ operator is invalid for atomic vectors
4

6 に答える 6

24

予測は分類の継続的な予測であり、ラベルは各変数のバイナリ トゥルースです。

したがって、次のようなものが機能するはずです。

> pred <- prediction(c(0.1,.5,.3,.8,.9,.4,.9,.5), c(0,0,0,1,1,1,1,1))
> perf <- performance(pred, "tpr", "fpr")
> plot(perf)

ROC を生成します。

編集:質問にサンプルの再現可能なコードを含めると役立つ場合があります(コメントを解釈するのに苦労しています)。

ここに新しいコードはありませんが... ROC をプロットするためによく使用する関数を次に示します。

 plotROC <- function(truth, predicted, ...){
   pred <- prediction(abs(predicted), truth)    
   perf <- performance(pred,"tpr","fpr")

   plot(perf, ...)
}
于 2012-07-13T12:29:37.137 に答える
7

@Jeffが言ったように、あなたの予測はROCRprediction関数に対して連続的である必要があります。require(randomForest); ?predict.randomForestは、デフォルトでpredict.randomForest、元のスケール (分類ではクラス ラベル) で予測を返し、predict.randomForest(..., type = 'prob')各クラスの確率を返すことを示しています。そう:

require(ROCR)
data(iris)
iris$setosa <- factor(1*(iris$Species == 'setosa'))
iris.rf <- randomForest(setosa ~ ., data=iris[,-5])
summary(predict(iris.rf, iris[,-5]))
summary(iris.preds <- predict(iris.rf, iris[,-5], type = 'prob'))
preds <- iris.preds[,2]
plot(performance(prediction(preds, iris$setosa), 'tpr', 'fpr'))

あなたが望むものを与えます。predict(..., type='probs')分類パッケージが異なれば、予測確率を取得するためのコマンドも異なりますpredict(..., type='prob')[,2]

于 2012-07-13T15:07:29.110 に答える
1

問題は、他の人が指摘したように、ROCR の予測は数値を期待することです。randomForestからの予測を(ROCR の予測の最初の引数として)挿入する場合、その予測はデフォルトtype='prob'の ではなくによって生成される必要type='response'があります。または、結果を数値に変換することもできますtype='response'(つまり、回答が 0/1 の場合)。しかし、それをプロットすると、ROCR は ROC 曲線上に意味のある点を 1 つ生成します。ROC 曲線上に多くのポイントを持つには、各予測に関連付けられた確率が本当に必要です。つまりtype='prob'、予測の生成に使用します。

于 2014-02-10T19:56:02.893 に答える
0

問題は、たとえば交差検証のために、複数の実行で予測関数を実行したい場合です。

この場合、prediction(predictions, labels, label.ordering = NULL) 関数の場合、「predictions」および「labels」変数のクラスはリストまたはマトリックスである必要があります。

于 2012-07-13T13:54:22.190 に答える
0

これを試してください:

library(ROCR)
pred<-ROCR::prediction(bankrf.pred$y, bank_testing$c(0,1)

機能予測は多くのパッケージに存在します。ROCR 内のものを使用するには、(ROCR::) を明示的に指定する必要があります。これは私のために働いた。

于 2016-09-29T17:43:31.567 に答える