コンテンツにスキップ

第10回: PLS-DA と交差検証

資料のダウンロード

ファイル 内容
exercise.py ハンズオン演習スクリプト

ヒントの使い方

python exercise.py --hint 1            # 方向性ヒント
python exercise.py --hint 1 --level 2  # より具体的なヒント
python exercise.py --hint 1 --level 3  # コード例
python exercise.py --check             # 提出前の自己チェック

演習問題への取り組み方

  1. 下の講義ノートを読む(事前学習・2時間目安)
  2. exercise.py を実行してグラフを確認する
  3. 演習問題(5問)に取り組む
  4. python exercise.py --check で確認する
  5. exercise.py を提出する(締切は授業後1週間)

詰まったとき

# ヒントを見る
python exercise.py --hint N --level 1

# AIに質問する
python ../../ask.py "質問内容"

解決しない場合は Q&A ページの投稿フォームを使ってください。


講義ノート

1. PLS-DAとは何か

PLS-DA(PLS Discriminant Analysis) は、第9回で学んだPLS回帰を分類問題に応用したものです。

PLS回帰では目的変数 y に連続値(例: 幸福感スコア)を使いましたが、PLS-DAでは y にクラスラベルをダミー変数として与えます。2クラス問題であれば「穏やか=0、活発=1」という形です。

通常の PLS回帰: X → y(連続値)
PLS-DA:        X → y(0 or 1 のダミー変数) → 閾値で分類

PLS-DAの分類の仕組みは次の通りです。

  1. y をダミー変数として PLSRegression を学習する
  2. 新しいサンプルに対して「回帰値」を予測する(連続値)
  3. 回帰値が閾値(通常 0.5)を超えたらクラス1、超えなければクラス0と判定する

なぜPLS-DAが有用か

今回のデータには「騒音レベル」「混雑度」「緑化率」など、互いに相関した特徴量が含まれています。このような多重共線性のある状況では、ロジスティック回帰の係数推定が不安定になりやすいです。PLS-DAはPLS回帰と同様に特徴量を潜在変数に圧縮してから分類するため、多重共線性に強いという利点があります。


2. 交差検証の必要性

過学習とは

機械学習モデルは、訓練データのノイズや偶然のパターンまで記憶してしまうことがあります。このとき、訓練データでは高い精度を示すが、未知のデータ(テストデータ)では精度が大きく落ちる現象を過学習(overfitting) と言います。

PLS-DAにおける過学習の典型例は「コンポーネント数を多くしすぎる」ことです。成分数が増えると、モデルはより細かいパターンを捉えますが、そのパターンがノイズである可能性も高まります。

交差検証による過学習の検出

交差検証(cross-validation) は、訓練データを複数のブロック(fold)に分割し、ローテーションしながら「学習 → 評価」を繰り返す手法です。今回は5-fold交差検証を使います。

データ全体を5等分
  Fold1: [val] [tr] [tr] [tr] [tr]  → 精度を記録
  Fold2: [tr] [val] [tr] [tr] [tr]  → 精度を記録
  Fold3: [tr] [tr] [val] [tr] [tr]  → 精度を記録
  Fold4: [tr] [tr] [tr] [val] [tr]  → 精度を記録
  Fold5: [tr] [tr] [tr] [tr] [val]  → 精度を記録
  → 5回の精度の平均を「検証精度」とする

コンポーネント数を1から順に増やしながら、訓練精度と検証精度の変化を観察します。

  • 訓練精度と検証精度がどちらも上昇している段階 → まだ情報が取り切れていない(学習不足)
  • 訓練精度は上昇し続けるが、検証精度が横ばいまたは低下し始める点 → 過学習の始まり

「検証精度が最大になるコンポーネント数」が最適な成分数です。


3. モデル評価指標の読み方

分類モデルの性能は複数の指標で総合的に評価します。

3.1 混同行列

混同行列は予測と実際の組み合わせを集計した表です。

予測: 穏やか 予測: 活発
実際: 穏やか 真陰性 (TN) 偽陽性 (FP)
実際: 活発 偽陰性 (FN) 真陽性 (TP)

ここから以下の指標が計算できます。

指標 計算式 意味
正確度(Accuracy) (TP+TN) / 全体 全体のうち正しく分類した割合
精度(Precision) TP / (TP+FP) 「活発」と予測したうち本当に活発な割合
再現率(Recall) TP / (TP+FN) 本当に「活発」なサンプルを正しく検出した割合
F1スコア 2×Prec×Rec / (Prec+Rec) 精度と再現率の調和平均

正確度だけでは不十分な場合があります。たとえばクラス不均衡(穏やか 900 件 vs 活発 100 件)のとき、すべて「穏やか」と予測するだけで正確度 90% になります。そのため、精度・再現率・F1も確認することが重要です。

3.2 ROC曲線とAUC

ROC曲線は、分類閾値を 0 から 1 まで動かしたときの「真陽性率(TPR)vs 偽陽性率(FPR)」の軌跡です。

TPR(感度)= TP / (TP + FN)  ← 活発を正しく活発と判定した率
FPR(1-特異度)= FP / (FP + TN) ← 穏やかを誤って活発と判定した率

AUC(Area Under the Curve) は ROC曲線の下の面積で、0 から 1 の値をとります。

AUC 解釈
1.0 完全な識別力(現実ではほぼ起こらない)
0.9〜1.0 非常に良好
0.7〜0.9 良好
0.5〜0.7 やや低い
0.5 ランダム(無意味なモデル)

AUCは閾値に依存しないため、異なるモデルを比較する際に特に有効です。


4. 本日の演習で確認すること

過学習の可視化

コンポーネント数 vs 精度のグラフで次のパターンを探してください。

精度
 1.0 ┤        訓練精度────────────────
 0.9 ┤               ╱
 0.8 ┤              ╱  検証精度──────── ← ここで頭打ち
 0.7 ┤             ╱
 0.6 ┤            ╱
      ─────────────────────────────
      1  2  3  4  5  6  7  8  コンポーネント数

訓練精度がほぼ 1.0 近くまで上昇しても検証精度が改善されなくなったら、それ以降のコンポーネントはノイズを学習している証拠です。

PLS-DA の得点空間

PLS-DAのX得点行列 T の第1・第2成分を2次元散布図にプロットすると、クラスの分離状況を視覚的に確認できます。この可視化はバイプロット(第6回)の応用で、PLS-DAの分類がどの方向でクラスを分けているかを直観的に理解できます(発展課題)。


5. まとめと次回への接続

今回のポイントを整理します。

  1. PLS-DA は PLS回帰の目的変数をダミー変数にしたもので、多重共線性のある特徴量群から2クラスを判別できる。
  2. 交差検証 は訓練データだけでモデルの汎化性能を推定する方法で、「コンポーネント数ごとの検証精度曲線」で過学習を可視化できる。
  3. 混同行列・AUC は正確度だけでは見えない分類の質(どのクラスを誤りやすいか、閾値によらない識別力)を評価する。

次回(第11回)はインタラクティブ時系列チャートを扱います。Plotly を使い、今回のデータ(週次時系列)を動的に可視化します。時系列データの特徴(季節性、トレンド)を視覚的に伝えるための設計原則も学びます。


参考文献・リソース

  • Barker, M., & Rayens, W. (2003). Partial least squares for discrimination. Journal of Chemometrics, 17(3), 166–173.
  • Kuhn, M., & Johnson, K. (2013). Applied Predictive Modeling. Springer. (特に第12章: 判別分析)
  • scikit-learn ドキュメント: StratifiedKFold, ConfusionMatrixDisplay, roc_curve
    https://scikit-learn.org/stable/modules/cross_validation.html
    https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html