評価基準とスコア
2クラス分類を例に挙げる。
片方のクラスだけ極端に多い場合、単純に精度が高いから良いモデルとは決めきれない。
極端に多いクラスの方だけを予測してしまえば、高い精度を保てるからである。
混同行列
精度 = TP + TN / TP + TN + FP + FN
で表される。
精度以外に良いモデルかどうかを判断する基準
陽性であると予測されたものがどのくらい実際に陽性であったかを測定する。
適合率 = TP / TP + FP
実際の陽性のサンプルのうち、陽性と予測されたものの割合を定義
再現率 = TP / TP + FN
再現率と適合率はトレードオフの関係にある。
適合率と再現率の一方だけでは全体像がつかめないため、これら2つをまとめる方法の1つがf-スコア、f-値である。
F = 2 × 適合率 × 再現率 / 適合率 + 再現率
これはf値の変種の1つでf1値とも呼ばれる。
適合率-再現率カーブ
precision(適合率)、recall(再現率)、threshold(閾値)
precision, recall, threshold = precision_recall_curve(
y_test, svc.decision_function(X_test))
横軸に適合率、縦軸に再現率をとったグラフ
右上に近いほど良いモデルである。閾値の違いでモデルの良さがかなり変わる。
このグラフの下の領域を積分して求めたものを平均適合率という。
平均適合率をaverage_precision_scoreで求める。
適合率-再現率カーブを計算して、複数のスレッショルドを考えるので、decision_functionもしくはpredict_probaの結果を渡す必要がある。
ROCカーブ (receiver operating characteristics curve)
ROCカーブは偽陽率(False positive rate: FPR)と真陽率(True positive rate: TPR)に対してプロットする。
FPR = FP / FP + TN
TPR = TP / TP + FN
左上に近いほど良いモデルである。
AUC(area under the curve)
roc_auc_scoreでROCカーブの下の領域を積分した値を計算する。
roc_auc_scoreもaverage_precision_scoreと同様に、decision_function、predict_probaを渡す必要がある。
多クラス 分類の基準
micro平均
偽陽性、偽陰性、真陽性の総数を計算し、適合率、再現率、f値を計算する。
macro平均
重みをつけないでクラス ごとのf値を平均する。
クラスのサイズを考慮しない。
weighted平均
重みをつけてf値を平均する。
モデルの評価を高くするには閾値の設定が重要である。