キャレットパッケージを使用して実行されるGBMで、パフォーマンス測定値としてAUPRCを使用したいと思います。auprcなどのカスタマイズされたメトリックを使用するにはどうすればよいですか?

Pバーテンダー

分類子のバランスが取れていないため、gbmモデル適合のカスタムメトリックとしてAUPRCを使用しようとしています。ただし、カスタムメトリックを組み込むと、コードに次のエラーが表示されます。私が間違っていることがわからない。

また、auprcSummary()は、インラインで実行するとそれ自体で機能します。train()に取り込もうとするとエラーが発生します。

     library(dplyr) # for data manipulation
     library(caret) # for model-building
     library(pROC) # for AUC calculations
     library(PRROC) # for Precision-Recall curve calculations

    auprcSummary <- function(data, lev = NULL, model = NULL){
      index_class2 <- data$Class == "Class2"
      index_class1 <- data$Class == "Class1"
      the_curve <- pr.curve(data$Class[index_class2],
                    data$Class[index_class1],
                    curve = FALSE)
      out <- the_curve$auc.integral
      names(out) <- "AUPRC"
      out
      }

    ctrl <- trainControl(method = "repeatedcv",
                 number = 10,
                 repeats = 5,
                 summaryFunction = auprcSummary,
                 classProbs = TRUE)

    set.seed(5627)
    orig_fit <- train(Class ~ .,
              data = toanalyze.train,
              method = "gbm",
              verbose = FALSE,
              metric = "AUPRC",
              trControl = ctrl)

これは私が得ているエラーです:

     Error in order(scores.class0) : argument 1 is not a vector  

pr.curve()が入力(スコア/確率)として数値ベクトルのみを受け取るためですか?

誤用

このアプローチにより、適切なカスタムサマリー関数が生成されると思います。

library(caret) 
library(pROC) 
library(PRROC)
library(mlbench) #for the data set

data(Ionosphere)

pr.curve機能分類スコアは、いずれかとして、すなわち、クラスのそれぞれのデータポイントに対して別々に設けてもよいscores.class0ポジティブ/前景クラスからとのようなデータポイントのscores.class1負/背景クラスのデータ点について、または、すべてのデータポイントの分類スコアがとして提供されscores.class0、ラベルが数値として提供されます(正のクラスの場合は1、負のクラスの場合は0)weights.class0(不明な場合はお詫びする関数の助けを借りてこれをコピーしました) 。

私は後で提供することを選択しました-のすべての確率scores.class0とクラスの割り当てweights.class0

キャレットは、trainControlオブジェクトのclassProbs引数がTRUEに設定されている場合、クラス確率を含むデータ内の追加の列が存在すると述べています。以下のためのだから、Ionosphereデータ列goodbad存在しなければなりません。

levels(Ionosphere$Class)
#output
[1] "bad"  "good"

0/1ラベリングに変換するには、次のようにすることができます。

as.numeric(Ionosphere$Class) - 1

goodになり1
badます0

これで、カスタム関数のすべてのデータが得られました

auprcSummary <- function(data, lev = NULL, model = NULL){
  prob_good <- data$good #take the probability of good class
  the_curve <- pr.curve(scores.class0 = prob_good,
                        weights.class0 = as.numeric(data$obs)-1, #provide the class labels as 0/1
                        curve = FALSE)
  out <- the_curve$auc.integral
  names(out) <- "AUPRC"
  out
}

data$goodこのデータセットだけで機能するwhichを使用する代わりに、クラス名を抽出し、それを使用して目的の列を取得できます。

  lvls <- levels(data$obs)
  prob_good <- data[,lvls[2]]

summaryFunctionを更新するたびに、trainControlオブジェクトを更新する必要があることに注意することが重要です。

ctrl <- trainControl(method = "repeatedcv",
                     number = 10,
                     repeats = 5,
                     summaryFunction = auprcSummary,
                     classProbs = TRUE)

orig_fit <- train(y = Ionosphere$Class, x = Ionosphere[,c(1,3:34)], #omit column 2 to avoid a bunch of warnings related to the data set
                  method = "gbm",
                  verbose = FALSE,
                  metric = "AUPRC",
                  trControl = ctrl)

orig_fit$results
#output
  shrinkage interaction.depth n.minobsinnode n.trees     AUPRC    AUPRCSD
1       0.1                 1             10      50 0.9722775 0.03524882
4       0.1                 2             10      50 0.9758017 0.03143379
7       0.1                 3             10      50 0.9739880 0.03316923
2       0.1                 1             10     100 0.9786706 0.02502183
5       0.1                 2             10     100 0.9817447 0.02276883
8       0.1                 3             10     100 0.9772322 0.03301064
3       0.1                 1             10     150 0.9809693 0.02078601
6       0.1                 2             10     150 0.9824430 0.02284361
9       0.1                 3             10     150 0.9818318 0.02287886

合理的なようです

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ