2

Max Khun の Applied Predictive Modeling の本に従って、キャレットがどのように機能するかを学ぼうとしていますが、キャレットの混乱マトリックス関数がどのように機能するかを理解できませんでした。

次のように glmnet を使用して、8190 行と 1073 列のトレーニング データ セット (training[, fullSet]) をトレーニングしました。

glmnGrid <- expand.grid(alpha = c(0,  .1,  .2, .4, .6, .8, 1),
                    lambda = seq(.01, .2, length = 40))

ctrl <- trainControl(method = "cv", 
                 number = 10,
                 summaryFunction = twoClassSummary,
                 classProbs = TRUE,
                 index = list(TrainSet = pre2008),
                 savePredictions = TRUE)

glmnFit <- train(x = training[,fullSet], 
             y = training$Class,
             method = "glmnet",
             tuneGrid = glmnGrid,
             preProc = c("center", "scale"),
             metric = "ROC",
             trControl = ctrl)

次に、適合から混同行列を出力しました。

glmnetCM <- confusionMatrix(glmnFit, norm = "none")

混同行列を見たところ、次の結果が得られました。

               Reference
Prediction     successful unsuccessful
  successful          507          208
  unsuccessful         63          779

しかし、混同テーブルに 1757 個の観測値 (1757 = 507 + 208 + 63 + 779) しかない理由がわかりません。これは、キャレットの混乱マトリックス.トレインのドキュメントに、「トレインをモデルの調整に使用すると、混同マトリックス セルを追跡する」と記載されているためです。ホールドアウトサンプルのエントリー。」トレーニング データ セットには 8190 行があり、10 倍の CV を使用したため、混同行列は 819 データ ポイント (819 = 8190 / 10) に基づく必要があると考えましたが、そうではありません。

明らかに、キャレットのtrainControlまたはtrainがどのように機能するかを完全には理解していません。誰かが私が誤解したことを説明できますか?

どうもありがとうございました。

イ・ヨンジン

4

1 に答える 1

3

問題は制御パラメータにあります。method = "cv"andを使用してnumber = 10いますが、モデルに適合させるために使用される正確なリサンプルも指定しています (index引数を介して)。これは本からの助成金データだと思います。pre2008第 12 章では、8,190 個のサンプルのうち 6,633 個がトレーニングに使用されることをベクトルが示すデータ分割スキームについて説明します。モデルの調整中に 1,557 が除外されます。

> dim(training)
[1] 8190 1785
> length(pre2008)
[1] 6633
> 8190-6633
[1] 1557

非サンプルの予測はpre2008、表に表示されているものです。私たちが持っているものを再現しようとしている場合は、312 ページに正しい構文があります。

ctrl <- trainControl(method = "LGOCV",
                     summaryFunction = twoClassSummary,
                     classProbs = TRUE,
                     index = list(TrainSet = pre2008))

10 倍の CV を実行したい場合は、index引数を取り除きます。

tl;dr制御関数は 10 倍の CV を示していますが、index引数は 1,557 サンプルの 1 つのホールドアウトを使用する必要があることを示しています。

マックス

于 2014-04-11T18:45:16.043 に答える