2012-07-13 43 views
21

ROCRを使用してROC曲線をプロットする方法を教えてもらえますか? 私が最初に実行する必要があることを知っている:私はちょうど予測とラベルを意味しているものをクリアしていないですROCRパッケージを使用したRのROC曲線

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

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

、その後に。私はctreeとcforestを使ってモデルを作成し、両方のROCカーブを最後に比較したいと思います。私の場合、class属性は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. 

ありがとう!ここで

は別の例です:=今bankrf.predラベルCと因子オブジェクトである

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

:私は、トレーニングデータセット(bank_training)とテストデータセット(bank_testing)を持っていると私は以下のようにランダムフォレストを走りました( "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 
+5

本格的な自己完結型の例を提供した場合は、より多くの聴衆があなたを助けてくれるかもしれません。それを行う方法のヒントについては、http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-exampleを参照してください。 –

答えて

23

を取得する原因、ラベルは各変数のバイナリ真実です。

したがって、次のようなものが動作するはずです:

> 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を生成します。

EDIT:質問に再現性のあるサンプルコードを含めると便利です(コメントを解釈するのが難しい)。

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

    plot(perf, ...) 
} 
+0

[編集]私はまだそれを取得しません。私はトレーニングデータセット(bank_training)とテストデータセット(bank_testing)を持っており、以下のようにrandomForestを実行しました: bankrf <-randomForest(y〜、bank_training、mtry = 4、ntree = 2、 keep .forest = TRUE、重要= TRUE) bankrf.pred <-predict(bankrf、bank_testing) ライブラリ(ROCR) PRED <-prediction(bankrf.pred $ yを、$ yをbank_testing) しかし、これはまだ間違っています、予測の形式にエラーがあるというエラーメッセージが表示されるためです。 – spektra

0

問題は、あなたがのために複数の実行上の予測機能を実行したいということがあります

あり、ここで新しいコードはませんが...ここでは、私はROCプロットするためにかなり頻繁に使う機能ですクロスバリデーションの例。

予測(予測、ラベル、label.ordering = NULL)関数の場合、予測変数とラベル変数のクラスはリストまたは行列でなければなりません。

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]などの場合もありますので、呼び出す関数ごとにヘルプファイルをチェックしてください。

1

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

4

これは、あなたがそれを行うことができる方法である。

は(「data_file.csv」)、csvファイルに当社のデータを持っていますが、ここでは完全なパスを与える必要があります。このファイルには列ヘッダーがあります。 「default_flag」、「var1」、「var2」、「var3」です.default_flagは0または1で、その他の変数は任意の値を持ちます。 Rコード:

rm(list=ls()) 
df <- read.csv("data_file.csv") #use the full path if needed 
mylogit <- glm(default_flag ~ var1 + var2 + var3, family = "binomial" , data = df) 

summary(mylogit) 
library(ROCR) 

df$score<-predict.glm(mylogit, type="response") 
pred<-prediction(df$score,df$default_flag) 
perf<-performance(pred,"tpr", "fpr") 
plot(perf) 
auc<- performance(pred,"auc") 
auc 

ノートのdf $スコアはあなたのデフォルト確率を与えること。 はあなたが別のデータでテストするには、このロジット(同じ回帰係数)を使用したい場合には、クロスバリデーションのために設定DF2、

df2 <- read.csv("data_file2.csv") 

df2$score<-predict.glm(mylogit,newdata=df2, type="response") 

pred<-prediction(df2$score,df2$default_flag) 
perf<-performance(pred,"tpr", "fpr") 
plot(perf) 
auc<- performance(pred,"auc") 
auc 
0

を使用すると、この方法を試してください。

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

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

関連する問題