モデルの性能ってどうやって評価するんですか?
モデルの汎化性能(未知データへの対応力)を正しく測るための手法がいくつかあるよ。学習に使ったデータで評価すると「カンペを見てテストを受ける」状態になるから、学習に使っていないデータで評価する必要があるんだ。
ホールドアウト法ってどういう方法ですか?
データを学習用とテスト用に1回だけ分割して評価する、最もシンプルな方法だよ。
ホールドアウト法の弱点を補う方法はありますか?
データをK個に分割して、K回評価を繰り返す方法があるよ。すべてのデータが必ず1回はテストに使われるので、評価の偏りが少ないんだ。
K=データ数にした交差検証。1つだけテスト、残り全部で学習をデータの数だけ繰り返す。最も偏りが少ないが計算コストが非常に大きい。データが非常に少ないときに使う。
分割回数:1回
評価の信頼性:低い(分割に依存)
計算コスト:低い
データが少ないとき:不向き
データが多いとき:十分使える
分割回数:K回
評価の信頼性:高い(平均を取る)
計算コスト:高い(K回学習)
データが少ないとき:有効
データが多いとき:計算コストが無駄になりがち
混同行列って何ですか?
分類モデルの予測結果を「正解/不正解」x「Positive/Negative」で整理した2x2の表だよ。覚え方は、True/Falseが予測の当たり/外れ、Positive/Negativeがモデルの予測結果だね。
| 予測:Positive | 予測:Negative | |
|---|---|---|
| 実際:Positive | TP(True Positive) 正しく陽性と判定 | FN(False Negative) 見逃し |
| 実際:Negative | FP(False Positive) 誤検出 | TN(True Negative) 正しく陰性と判定 |
True/False → 予測が当たった/外れた
Positive/Negative → モデルが陽性/陰性と予測した
| 指標 | 計算式 | 意味 |
|---|---|---|
| 正解率(Accuracy) | (TP+TN) / 全体 | 全体のうち正しく判定した割合 |
| 適合率(Precision) | TP / (TP+FP) | 「陽性」と予測したうち本当に陽性の割合 |
| 再現率(Recall) | TP / (TP+FN) | 実際の陽性のうち正しく見つけた割合 |
| F値(F1 Score) | 2x適合率x再現率 / (適合率+再現率) | 適合率と再現率の調和平均 |
適合率と再現率はどう使い分けるんですか?
片方を上げると片方が下がるトレードオフの関係にあるんだ。誤検出を減らしたいなら適合率を重視、見逃しを減らしたいなら再現率を重視するよ。
誤検出(FP)を減らしたい場面
例:スパム判定(正常メールをスパムにしたくない)
見逃し(FN)を減らしたい場面
例:がん検診(がんを見逃したくない)
データの偏りが大きいと正解率だけでは不十分。例:1000件中がん患者が10人 → 全員「がんでない」と予測するだけで正解率99%になるが、がんの検出には全く役に立たない。こういう不均衡データでは適合率・再現率・F値を見る必要がある。
ROC曲線って何ですか?適合率や再現率とは違うんですか?
ROC曲線は、分類モデルの閾値(しきい値)を変化させたときの性能を可視化するグラフだよ。横軸に偽陽性率(FPR: False Positive Rate)、縦軸に真陽性率(TPR: True Positive Rate = 再現率)をとってプロットするんだ。
偽陽性率って何ですか?
実際にはNegativeなのに、間違ってPositiveと予測してしまった割合だよ。混同行列で言うと FPR = FP / (FP + TN) で計算する。「本当は健康なのに病気と誤判定された人の割合」というイメージだね。
| 指標 | 計算式 | 意味 |
|---|---|---|
| 真陽性率(TPR) | TP / (TP + FN) | 実際のPositiveのうち正しく検出した割合(= 再現率) |
| 偽陽性率(FPR) | FP / (FP + TN) | 実際のNegativeのうち誤ってPositiveと判定した割合 |
AUCって何ですか?
AUC(Area Under the Curve)は、ROC曲線の下側の面積のこと。0から1の値をとり、1に近いほど良いモデルだよ。AUC = 0.5 は「当てずっぽう(ランダム予測)」と同じ性能で、ROC曲線が左上に近いほど(=AUCが大きいほど)優れた分類器ということだね。
AUC = 1.0 : 完璧な分類器(理想)
AUC = 0.9〜1.0 : 非常に良い
AUC = 0.7〜0.9 : まあまあ良い
AUC = 0.5 : ランダム予測と同じ(当てずっぽう)
AUC < 0.5 : ランダムより悪い(予測が逆になっている可能性)
ROC曲線が左上に近いほど良い分類器(TPRが高く、FPRが低い)。
AUCは閾値に依存しない総合的な評価指標なので、異なるモデル同士の比較に便利。
不均衡データでは、ROC曲線よりもPR曲線(Precision-Recall曲線)の方が適している場合もある。
ハイパーパラメータって普通のパラメータと何が違うんですか?
人間が学習の前に設定するパラメータだよ。モデルが学習中に自動で決める「パラメータ(重みなど)」とは別物なんだ。
誰が決める:モデルが学習で自動的に決める
例:重み(w)、バイアス(b)
いつ決まる:学習の最中
誰が決める:人間が事前に設定する
例:学習率、層の数、kの値
いつ決まる:学習の前
| 手法 | ハイパーパラメータの例 |
|---|---|
| ニューラルネットワーク | 学習率、中間層の数、ノード数、エポック数、バッチサイズ |
| SVM | C(正則化パラメータ)、カーネルの種類 |
| 決定木 | 木の深さ、最小サンプル数 |
| k-NN | kの値 |
| K-Means | クラスタ数K |
| 正則化 | λ(ペナルティの強さ) |
| 手法 | 説明 |
|---|---|
| グリッドサーチ | 候補を格子状に全組み合わせ試す。確実だが遅い |
| ランダムサーチ | ランダムに組み合わせを試す。グリッドより効率的なことが多い |
| ベイズ最適化 | 過去の結果から次に試す値を賢く選ぶ。効率が高い |
通常、交差検証法と組み合わせて最適なハイパーパラメータを探す。
データは学習用とテスト用の2つに分ければ良いんですよね?
実は2分割だけでは問題があるんだ。ハイパーパラメータを「テストデータの結果を見ながら調整」することになり、テストデータへの情報漏れが起きてしまう。テストデータに合わせたチューニング=カンニングと同じだよ。だから3分割が必要なんだ。
| データ | 役割 | いつ使う |
|---|---|---|
| 学習データ(Training) | モデルのパラメータ(重みなど)を学習する | 学習中に何度も使う |
| 検証データ(Validation) | ハイパーパラメータの調整・モデル選択に使う | 学習の途中で何度も使う |
| テストデータ(Test) | 最終的な汎化性能を評価する | 最後に1回だけ |
学習データ = 教科書・問題集(何度も繰り返し勉強する)
検証データ = 模擬試験(実力チェック→勉強法を調整)
テストデータ = 本番試験(最後に1回だけ受ける)
模試の結果が悪ければ勉強法(=ハイパーパラメータ)を変える。でも本番の問題を事前に見て対策するのはカンニング(=テストデータの情報漏れ)。
交差検証法を使う場合、学習データの中をさらにK分割して検証データの役割を果たす。テストデータは別に確保しておく。つまり「検証データ」は交差検証で自動的に作られるケースも多い。