02.2.10
【ベンチマーク】高次元疎データの分類
SelectKBest(k=50) や L1 正則化の LogisticRegression のように有用な列を絞り込む処理が精度を大きく改善し、前処理なしの RBF カーネル SVM は 475 個のノイズ列に距離を乱されて過学習します。GaussianNB は特徴量を独立に扱うため、前処理の有無にかかわらず安定した精度を保ちます。読み終えると、「特徴量がサンプル数を超えたらモデルより先に次元を減らす」という判断を、ヒートマップの数字で説明できるようになります。テキスト分類・遺伝子発現データ・アンケートの自由記述など、特徴量がサンプル数を超えるデータセットは実務で珍しくない。こうした高次元疎データでは、モデルの選択以上に前処理(特徴選択・次元削減)が精度を左右する。
1. データの特徴 #
n=200 サンプル、p=500 特徴量の 3 クラス分類で、有用な特徴量は 20 個とその線形結合 5 個だけ、残り 475 個はクラスと無関係なノイズです。特徴量がサンプル数の 2.5 倍あるので、どのサンプルどうしの距離もノイズ 475 列の影響で似た値になり、k-NN や RBF カーネルのような距離ベースの手法は「近い点」を正しく見つけられません(次元の呪い)。
2. 合成データの生成 #
次のコードは make_classification で 200 × 500 のデータを作り、特徴量の分散のヒストグラム、F 値上位 2 特徴量の散布図、F 値上位 50 特徴量の棒グラフの 3 枚で「有用な列がどれだけ少ないか」を見ます。
| |

3. 比較するパイプライン #
| 前処理 | 分類器 |
|---|---|
| なし | Logistic(L1), Logistic(L2), SVM(linear), SVM(RBF), NaiveBayes, RandomForest |
| VarianceThreshold (中央値以上) | 同上 |
| SelectKBest (k=50) | 同上 |
| PCA (n=50) | 同上 |
合計: 4前処理 × 6分類器 = 24パイプライン
4. 実験と結果 #
次のコードは 24 本のパイプラインを同じ 5 分割で交差検証し、F1-macro の平均を 4 行 × 6 列のヒートマップに並べます。すべてのパイプラインの先頭に StandardScaler を置き、前処理は交差検証の各分割の中で学習データだけから当てはめます。
| |

読み方のポイント #
SelectKBest(k=50) や PCA(n=50) で 500 列を 50 列に絞ると、ほぼすべての分類器で F1-macro が改善します。L1 正則化の LogisticRegression は前処理なしでも比較的健闘しますが、これは内部でスパースな特徴選択を行い、475 本のノイズ列の係数を 0 にしているためです。RBF カーネルの SVM は前処理なしだと F1 が大幅に低下します。500 次元空間ではすべてのサンプル間距離がほぼ等しくなり、RBF カーネルの距離計算が機能しないからです。GaussianNB は前処理によらず安定しており、特徴量を独立に扱う仮定が、クラスと無関係なノイズ列の影響を打ち消す方向に働いています。
5. 誤差パターン分析 #
ヒートマップの最良と最悪に近い 3 つの組み合わせを、同じ 70/30 分割で学習・評価し、混同行列で「どのクラスをどのクラスと間違えたか」を比べます。
| |

前処理なしの RBF-SVM はオフダイアゴナル(誤分類)が多く、特にクラス間の混同が激しい。KBest + L1 Logistic は対角成分が支配的で、3 クラスとも安定して分類できている。
6. よくある失敗パターン #
最初の失敗は、前処理なしで RBF カーネルを使うことです。500 次元の空間ではすべてのサンプル間距離がほぼ等しくなり、カーネルが効きません。線形カーネルを使うか、SelectKBest や PCA で次元削減を先に行います。二つ目は、全特徴量でランダムフォレストを使うことです。動きはしますが、475 個のノイズ列がスプリット候補に入るため精度が落ちます。max_features を小さく設定するか、事前に特徴選択をしてください。
まとめ #
サンプル 200 件・特徴量 500 個のデータでは、分類器の選択より「500 列を 50 列に絞る前処理」のほうが F1-macro を大きく動かしました。SelectKBest(k=50) と PCA(n_components=50) はほぼ全モデルを改善し、L1 正則化の LogisticRegression は前処理なしでも自前の特徴選択で持ちこたえます。RBF カーネルの SVM は距離が均一化する高次元で最も崩れ、GaussianNB は独立仮定のおかげで最も安定しました。特徴選択は必ず Pipeline に入れて交差検証の中で行い、評価データのラベルを使ったリークを防いでください。