6

たとえば、R (pROC パッケージ) で multiclass.roc 関数を使用する場合、ランダム フォレストによってデータ セットをトレーニングしました。コードは次のとおりです。

# randomForest & pROC packages should be installed:
# install.packages(c('randomForest', 'pROC'))
data(iris)
library(randomForest)
library(pROC)
set.seed(1000)
# 3-class in response variable
rf = randomForest(Species~., data = iris, ntree = 100)
# predict(.., type = 'prob') returns a probability matrix
multiclass.roc(iris$Species, predict(rf, iris, type = 'prob'))

結果は次のとおりです。

Call:
multiclass.roc.default(response = iris$Species, predictor = predict(rf,     
iris, type = "prob"))
Data: predict(rf, iris, type = "prob") with 3 levels of iris$Species: setosa,   
versicolor, virginica.
Multi-class area under the curve: 0.5142

これは正しいですか?ありがとう!!!

「pROC」リファレンス: http://www.inside-r.org/packages/cran/pROC/docs/multiclass.roc

4

3 に答える 3

10

参照で見たように、multiclass.roc は「数値ベクトル (...)」を想定しており、そのドキュメントはrocそこからリンクされています (何らかの理由で提供されたリンクにはありません)。response"。3 列の数値行列を渡していますが、これは明らかに間違っており、pROC 1.6 以降はサポートされていません。以前は何をしていたのかわかりませんが、おそらくあなたが期待していたものではありません。

これは、数値モードの 1 つのアトミック ベクトルで予測を要約する必要があることを意味します。モデルの場合、以下を使用できますが、通常、因子を数値に変換することはあまり意味がありません。

predictions <- as.numeric(predict(rf, iris, type = 'response'))
multiclass.roc(iris$Species, predictions)

このコードが実際に行うことは、予測に対して 3 つの ROC 曲線を計算することです (1 つは setosa と versicolor、1 つは versicolor と virginica で、もう 1 つは setosa と virginica で)、それらの AUC を平均化します。

さらに 3 つのコメント:

  • 因子を数値に変換しても意味がありません。完全な分類がなく、レベルを並べ替えると、異なる結果が得られるからです。これが、pROC で自動的に行われない理由です。セットアップで考慮する必要があります。
  • 一般に、このマルチクラスの平均化は実際には意味がなく、バイナリ分類の観点から質問を再考することをお勧めします。pROC にはまだ実装されていない、より高度なマルチクラス メソッド (ROC サーフェスなどを使用) があります。
  • @cbeleites が述べたように、トレーニング データ (再代入) を使用してモデルを評価することは正しくないため、実際の例では、テスト セットを脇に置いておくか、交差検証を使用する必要があります。
于 2013-12-29T09:57:37.150 に答える
1

最小限の作業例のためだけに再代入の見積もりを行ったと仮定すると、コードは私には良さそうに見えます。

タイプ「prob」でoob予測をすぐに取得しようとしましたが、成功しませんでした。したがって、randomForest関数の外部で検証を行う必要があります。

個人的には、マルチクラス モデル全体を 1 つの無条件の数値にまとめようとはしません。しかし、それはまったく別の質問です。

于 2013-12-11T11:40:35.563 に答える
0

あなたのコードをコピーしたところ、AUC は 0.83 でした。何が違うのかわからない。

そうです、s100b列は確率ではありません。aSAH (動脈瘤くも膜下出血) データ セットは、臨床データ セットです。s100b は、脳のグリア細胞に見られるタンパク質です。データセットに関する研究論文から、s100b列は血液サンプルに含まれる可能性のある s100b タンパク質の濃度 (ug/l) を表しているようです。

于 2013-12-11T15:36:16.147 に答える