1. ホーム
  2. r

[解決済み】bstTreeの予測値の混乱行列、エラー:'The data must contain some levels that overlap reference'.

2022-02-09 04:19:57

質問事項

bstTreeメソッドを使ってモデルを学習し、混同行列を出力しようとしています。

set.seed(1234)
splitIndex <- createDataPartition(attended_num_new_bstTree$adverse_effects, p = .80, list = FALSE, times = 1)
trainSplit <- attended_num_new_bstTree[ splitIndex,]
testSplit <- attended_num_new_bstTree[-splitIndex,]

ctrl <- trainControl(method = "cv", number = 5)
model_bstTree <- train(adverse_effects ~ ., data = trainSplit, method = "bstTree", trControl = ctrl)


predictors <- names(trainSplit)[names(trainSplit) != 'adverse_effects']
pred_bstTree <- predict(model_bstTree$finalModel, testSplit[,predictors])


plot.roc(auc_bstTree)

conf_bstTree= confusionMatrix(pred_bstTree,testSplit$adverse_effects)

しかし、エラー 'Error in confusionMatrix.default(pred_bstTree, testSplit$adverse_effects) が発生しました。 データは、参照に重なるいくつかのレベルを含んでいなければなりません'。

 max(pred_bstTree)
[1] 1.03385
 min(pred_bstTree)
[1] 1.011738

> unique(trainSplit$adverse_effects)
[1] 0 1
Levels: 0 1

どうすればこの問題を解決できますか?

> head(trainSplit)
   type New_missed Therapytypename New_Diesease gender adverse_effects change_in_exposure other_reasons other_medication
5     2          1              14           13      2               0                  0             0                0
7     2          0              14           13      2               0                  0             0                0
8     2          0              14           13      2               0                  0             0                0
9     2          0              14           13      2               1                  0             0                0
11    2          1              14           13      2               0                  0             0                0
12    2          0              14           13      2               0                  0             0                0
   uvb_puva_type missed_prev_dose skintypeA skintypeB Age DoseB DoseA
5              5                1         1         1  22 3.000     0
7              5                0         1         1  22 4.320     0
8              5                0         1         1  22 4.752     0
9              5                0         1         1  22 5.000     0
11             5                1         1         1  22 5.000     0
12             5                0         1         1  22 5.000     0

解決方法は?

<ブロッククオート

max(pred_bstTree) [1] 1.03385
min(pred_bstTree) [1] 1.011738

とエラーがすべてを物語っています。ROCをプロットすることは、単に閾値の違いによる影響を確認することです。例えば、閾値が0.5の場合、0.7は1(真クラス)、0.3は0(偽クラス)に変換され、閾値に基づいた丸めが行われます。閾値は(0,1)の範囲にあります。

あなたの場合、最小予測値が1より大きいので、閾値に関係なく、常にすべての観測値が真クラスになります(@phiverが分類ではなく回帰を行っているかどうか疑問に思ったのはそのためです)。予測に0がなければ、'予測'のレベルもなく、それは、'予測'のゼロレベルと一致します。 adverse_effects というエラーが発生します。

PS: データを投稿していただかないと、エラーの根本的な原因を特定することは困難です。