混同行列を用いた[R,大きな分岐]評価モデルの評価
10943 ワード
資料
上の資料を参考にしました.
混同行列は分類モデルを評価する指標である. 混同行列は,解析モデルで求めた分類の予測種別とデータの実際の分類種別をクロステーブル形式に整理した行列または評価指標である.
依存変数は汎用モデルであることに注意してください.
ここではRのIonosphereデータを用いて予測値を作成する.
混同行列を用いて両者を比較した.
必要なコースはすべて事前にダウンロードされます.
「融合マトリクス」(ConfusionMatrix)はcaretパッケージに含まれています.
seedを設定してランダム値を抽出する必要があります.
p=0.7は70%を基準とする
トレーニングデータ:7、テストデータ:3、これは7対3を意味します.
念のため本物かどうかを検証します!
今回はそれをLogistic回帰モデルに適用し,値を予測する.
また,論理回帰モデルの依存変数はカテゴリ化されているため,クラスを依存変数に設定し,残りを独立変数に設定する.
サブセットを使用してV 1およびV 2列を削除し、論理回帰モデルを作成します.
次は予測で、予測関数を使用します.
論理回帰モデル
predicate関数でtype=「response」と入力し、予測を行い、0~1の確率で解きます.
BUMZU型にする
ここで、中間値を0.5に設定し、0.5以上1に近い場合は「good」、0.5未満または0に近い場合は「bad」に設定します.
ConfusionMatrix関数の最初のパラメータは予測データであり、2番目のパラメータは実際のデータである.
このモデルの予測精度は0.8269であり,82.69%と考えられる.
今回はランダムな森で予測してみましょう.
しかし、混同行列の結果は異なる.
結果は,論理回帰モデルよりも優れていることを示した.
上の資料を参考にしました.
緒論
依存変数は汎用モデルであることに注意してください.
ここではRのIonosphereデータを用いて予測値を作成する.
混同行列を用いて両者を比較した.
パッケージのインストール
必要なコースはすべて事前にダウンロードされます.
install.packages("mlbench")
install.packages("rlang")
install.packages("caret")
install.packages("randomForest")
library(mlbench)
data(Ionosphere)
df = Ionosphere
データ配信
「融合マトリクス」(ConfusionMatrix)はcaretパッケージに含まれています.
seedを設定してランダム値を抽出する必要があります.
set.seed(2)
library(caret)
idx = caret::createDataPartition(df$Class, p = 0.7)
df_train = df[idx$Resample1, ]
df_test = df[-idx$Resample1, ]
インデックス変数idx
を作成します.p=0.7は70%を基準とする
トレーニングデータ:7、テストデータ:3、これは7対3を意味します.
念のため本物かどうかを検証します!
nrow(Ionosphere)
nrow(df_train)
nrow(df_test)
Ionosphereの合計列数は351で、両方の和が完全に一致していることがわかります.> nrow(Ionosphere)
[1] 351
> nrow(df_train)
[1] 247
> nrow(df_test)
[1] 104
ロジック回帰モデル
今回はそれをLogistic回帰モデルに適用し,値を予測する.
model_glm = glm(Class ~ . , data = subset(df_train, select = c(-V1, -V2)), family = "binomial")
pred_glm_test = predict(model_glm, newdata = df_test, type = "response")
head(pred_glm_test)
前述したように,混同行列を用いるためには,従属変数がカテゴリに属さなければならない.また,論理回帰モデルの依存変数はカテゴリ化されているため,クラスを依存変数に設定し,残りを独立変数に設定する.
サブセットを使用してV 1およびV 2列を削除し、論理回帰モデルを作成します.
次は予測で、予測関数を使用します.
論理回帰モデル
model_glm
回帰式とテストデータdf_test
を追加predicate関数でtype=「response」と入力し、予測を行い、0~1の確率で解きます.
> head(pred_glm_test)
1 8 11 13 16 20
0.9160221 0.6103701 0.9757966 0.9897865 0.1838459 0.8888246
予測結果のデータ.pred_glm_test_class = factor(ifelse(pred_glm_test >= 0.5, 1, 0))
levels(pred_glm_test_class) <- c("bad", "good")
head(pred_glm_test_class)
混同行列を使用するには、予測結果を因子型に変更する必要があります.BUMZU型にする
ここで、中間値を0.5に設定し、0.5以上1に近い場合は「good」、0.5未満または0に近い場合は「bad」に設定します.
> head(pred_glm_test_class)
1 8 11 13 16 20
good good good good bad good
Levels: bad good
次に,この予測モデルを混同行列に入れて評価した.ConfusionMatrix関数の最初のパラメータは予測データであり、2番目のパラメータは実際のデータである.
cfm_glm = caret::confusionMatrix(pred_glm_test_class, df_test$Class)
cfm_glm
> cfm_glm
Confusion Matrix and Statistics
Reference
Prediction bad good
bad 23 4
good 14 63
Accuracy : 0.8269
95% CI : (0.7403, 0.8941)
No Information Rate : 0.6442
P-Value [Acc > NIR] : 3.278e-05
Kappa : 0.5981
Mcnemar's Test P-Value : 0.03389
Sensitivity : 0.6216
Specificity : 0.9403
Pos Pred Value : 0.8519
Neg Pred Value : 0.8182
Prevalence : 0.3558
Detection Rate : 0.2212
Detection Prevalence : 0.2596
Balanced Accuracy : 0.7810
'Positive' Class : bad
Accouncyから精度がわかります.このモデルの予測精度は0.8269であり,82.69%と考えられる.
ランダム森林
今回はランダムな森で予測してみましょう.
library(randomForest)
model_rf = randomForest(Class ~ . , data = subset(df_train, select = c(-V1, -V2) ))
pred_rf_test = predict(model_rf, newdata = df_test, type="response")
cfm_rf = caret::confusionMatrix(pred_rf_test, df_test$Class)
head(pred_rf_test)
儀式自体が同じなので、あまり違いはありません.ランダム森林モデルを使用するだけです.> head(pred_rf_test)
1 8 11 13 16 20
good bad good good bad bad
Levels: bad good
headの結果は同じですしかし、混同行列の結果は異なる.
> cfm_rf
Confusion Matrix and Statistics
Reference
Prediction bad good
bad 32 2
good 5 65
Accuracy : 0.9327
95% CI : (0.8662, 0.9725)
No Information Rate : 0.6442
P-Value [Acc > NIR] : 5.263e-12
Kappa : 0.8505
Mcnemar's Test P-Value : 0.4497
Sensitivity : 0.8649
Specificity : 0.9701
Pos Pred Value : 0.9412
Neg Pred Value : 0.9286
Prevalence : 0.3558
Detection Rate : 0.3077
Detection Prevalence : 0.3269
Balanced Accuracy : 0.9175
'Positive' Class : bad
ランダムツリー分類の精度は93.27%,精度は0.9327であった.結果は,論理回帰モデルよりも優れていることを示した.
Reference
この問題について(混同行列を用いた[R,大きな分岐]評価モデルの評価), 我々は、より多くの情報をここで見つけました https://velog.io/@lifeisbeautiful/R-빅분기-혼동행렬-비교テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol