1. ホーム
  2. r

[解決済み] randomForestのROC曲線誤差

2022-02-18 05:32:04

質問内容

下記からROC曲線を作成しようとしています。Error in prediction(bc_rf_predict_prob, bc_test$Class) というエラーが表示されます。 クロスバリデーションの実行回数は、予測値とラベルに対して同じでなければなりません。

library(mlbench) #has the Breast Cancer dataset in it
library(caret)
data(BreastCancer) #two class model

bc_changed<-BreastCancer[2:11] #removes variables not to be used


#Create train and test/holdout samples (works fine)
set.seed(59)
bc_rand <- bc_changed[order(runif(699)), ] #699 observations
bc_rand <- sample(1:699, 499) 
bc_train <- bc_changed[ bc_rand,]
bc_test  <- bc_changed[-bc_rand,]

#random forest decision tree (works fine)
library(caret)
library(randomForest)
set.seed(59) 
bc_rf <- randomForest(Class ~.,data=bc_train, ntree=500,na.action = na.omit, importance=TRUE)

#ROC
library(ROCR)
actual <- bc_test$Class 
bc_rf_predict_prob<-predict(bc_rf, type="prob", bc_test) 
bc.pred = prediction(bc_rf_predict_prob,bc_test$Class) #not work- error

Error-Error in prediction(bc_rf_predict_prob, bc_test$Class) : クロスバリデーションの実行回数は、予測とラベルで同じでなければなりません。

をした時に出ているのだと思います。

bc_rf_predict_prob<-predict(bc_rf, type="prob", bc_test) 

結果として、2列のBenignとその確率のリスト、2列目のMalignantとその確率のリストを持つ行列が得られます。私の論理では、確率のベクトルだけを持つべきです。

どのように解決するのですか?

によると ROCRライブラリ・ドキュメントの9ページ は、その prediction 関数には2つの必須入力があります。 predictionslabels であり、同じ寸法でなければならない。

行列やデータフレームの場合,すべてのクロスバリデーションの実行は同じ長さでなければならない.

このため str(bc_rf_predict_prob) > [1] matrix [1:200, 1:2] を意味します。 str(bc_test$Class) は、一致する次元を持つ必要があります。

の最初の列ベクトルだけが必要なようですね。 bc_rf_predict_prob しかし、データを見てみないと確かなことは言えません。