対角LDAと最近傍縮小重心 — 2万遺伝子から本物の手がかりを見つける
がん患者63人から2,308個の遺伝子を測定した。診断に本当に役立つ遺伝子はそのうち何個か? 「対角LDA」と「最近傍縮小重心」は、p >> N という高次元の壁を突破しながら、 重要な特徴を自動的に選び出す。正則化の思想を分類問題に応用した、エレガントな解法だ。
針小棒大の問題 — 2万の変数で60人を分類する
2003年、スタンフォードの研究者が面白い実験をした。がん患者63人から、2,308個の遺伝子の発現量を測定した。 そしてこれを使って、4種類のがんを正確に分類しようとした。
ここで立ち止まって考えてほしい。
- サンプル数 N = 63人
- 特徴数 p = 2,308個の遺伝子

p >> N。変数がサンプルより40倍以上多い。これが高次元問題の典型だ。
なぜこれが問題なのか?第4章で学んだ線形判別分析(LDA)を思い出してほしい。 LDAはクラス内共分散行列 Σ を推定する必要がある。 しかし2,308個の変数があれば、Σ は2,308×2,308 = 約530万個のパラメータを持つ。 63個のデータ点でこれを安定的に推定することは不可能だ。
では、どうすればいいのか?
鍵は「問いを変えること」だ。
「全遺伝子が互いに相関している」という難しい仮定をやめ、「各遺伝子は独立に働く」というシンプルな仮定に切り替える。 この仮定のもとでLDAを行うのが対角LDA(Diagonal LDA)だ。
対角LDA — 「独立仮定」という合理的な妥協
対角LDAの判別スコアを見てみよう。少し難しそうに見えるが、実は単純なアイデアだ。

アニメーションで見た通り、「テスト点がどちらのクラスの重心に近いか」——これが判別の本質だ。 この考えを数式にすると:
この式は「テスト点 x* がクラス k の中心からどれだけ離れているか」を計算している。各特徴 j について:
- $x_j^*$:テストサンプルの特徴 j の値
- $\bar{x}_{kj}$:クラス k の特徴 j の平均(= クラス重心)
- $s_j^2$:特徴 j のクラス内分散
$s_j$ で割ることで、スケールが違う特徴を公平に比較している。 例えば「体重(kg)」と「血糖値(mg/dL)」を同じ土台で比べるようなものだ。
重要なのは、この式には特徴間の相関項がないこと。 従来のLDAでは $\Sigma^{-1}$ の逆行列が必要で、これが530万個のパラメータを要求した。 対角LDAは「特徴は独立」と仮定することで、 必要なパラメータを p 個(各特徴の分散)だけに削減した。
これは近似だが、p >> N では「正確な方程式を解けない」より 「近似でも安定的に解く」方が実用的に優れる。
縮小の魔法 — 重心を「引き寄せる」
対角LDAだけでは、まだ問題がある。
2,308個の遺伝子のうち、診断に本当に関係あるのはごく一部かもしれない。 残りの遺伝子は「ノイズ」だ。もしノイズだらけの遺伝子を全部使って分類すれば、精度は下がる。
最近傍縮小重心(Nearest Shrunken Centroids)はこの問題に対処する。 アイデアはシンプル:
各クラスの重心を、全体の平均に向かって「引き寄せる」

どれくらい引き寄せるかは、以下のスコアで決まる:
- $\bar{x}_{kj}$:クラス k での遺伝子 j の平均
- $\bar{x}_j$:全体での遺伝子 j の平均
- 分母:標準化するためのスケール係数
$d_{kj}$ が大きいほど、その遺伝子はクラスを区別する力が強い。 小さいほど、クラス間でほとんど差がない(ノイズに近い)。
次に、ソフトしきい値処理を適用する:
Δ はチューニングパラメータ。$|d_{kj}| < \Delta$ の遺伝子はゼロになる—— つまり、「この遺伝子は分類に関係ない」と自動判定される。
ソフトしきい値の幾何学 — 「なだらかなゼロ化」
では、どうやって重心を「引き寄せる」のか?その答えが「ソフトしきい値(soft thresholding)」というトリックだ。
「ソフトしきい値」という名前、何が「ソフト」なのだろうか? 比較のために「ハードしきい値」を考えてみよう。

- ハードしきい値:$|d_{kj}| < \Delta$ なら即座にゼロ、それ以外は元の値を保持
- ソフトしきい値:$|d_{kj}| < \Delta$ ならゼロ、それ以外は Δ だけ縮小した値を使う
違いは「段差」だ。ハードしきい値は Δ のところで値が突然変わる(不連続)。 ソフトしきい値は滑らかに変化する(連続)。
なぜソフトの方が良いのか?予測の安定性だ。 ハードしきい値では、$d_{kj}$ が Δ のわずか上か下かで結果が激変する。 ソフトしきい値では、入力が少し変わっても出力は少しだけ変わる。 これが予測モデルの「頑健性」に繋がる。
縮小後の重心は元の空間に戻す:
$\tilde{d}_{kj} = 0$ の遺伝子については、縮小後の重心は全体平均$\bar{x}_j$ と一致する。 クラス間で差がなくなるので、分類に使われなくなる——これが自動的な特徴選択だ。
実際の効果 — 2,308個から43個へ
この手法をスタンフォードの遺伝子データに適用してみよう。
Δ(しきい値)を少しずつ大きくしながら、使用する遺伝子数とテストの正確さを調べる。 Δを大きくするほど「この遺伝子はどのクラスでも同じ」と判断される遺伝子が増え、選ばれる遺伝子数が減る。

元の2,308個から、わずか43個の遺伝子を選択したとき、 テストデータでの誤り率は20サンプル中5件(25%)だった。 全遺伝子を使っても精度はほとんど変わらず、むしろシンプルなモデルの方が安定することが多い。
これが最近傍縮小重心の力だ:
- 特徴選択と分類が同時に行われる(2ステップを一気にこなす)
- 解釈可能(どの遺伝子が重要かわかる)
- 高次元でも機能する(p >> N の状況に適している)
Δの選び方
Δが小さすぎると全遺伝子を使うことになり、ノイズの影響を受ける(高バリアンス)。 Δが大きすぎると重要な遺伝子まで除外してしまい、判別力が落ちる(高バイアス)。 最適なΔは交差検証で見つける——訓練データで何種類かのΔを試し、 検証データで最も良い結果を示したΔを選ぶ。
まとめ — なぜこれが「正則化」なのか
振り返ると、最近傍縮小重心は第3章で学んだ正則化の思想を高次元問題に応用したものだ。
LASSOが回帰係数をゼロに引き寄せたように、 最近傍縮小重心はクラス重心の「差分」をゼロに引き寄せる。 効果は同じ:不要な特徴を自動的に除去する。

高次元問題では、「全ての特徴を使う」ことが必ずしも正しくない。 本当に重要な特徴だけを選び、それに集中することで、 より安定した、解釈可能な予測が可能になる。
これが、p >> N の世界で機械学習が生き残るための戦略だ。