高次元問題 — データより変数が多いとき
60人の患者から2万個の遺伝子発現を測定する——これは現代のゲノム研究では珍しくありません。 しかしN=60、p=20,000という「p ≫ N」の状況では、 従来の機械学習の常識が通用しなくなります。 シンプルさ・スパース性・正しい評価という3つの原則が、 この「高次元の壁」を突破する鍵になります。
データより変数が多いとき何が起きる?
「もっとたくさんのデータを集めれば、もっと精度が上がる」——これは機械学習の基本的な直感です。 では逆に、データを集めるよりはるかに多くの変数を測定したらどうなるでしょうか?
ゲノムの研究を想像してください。60人のがん患者のサンプルから、2万個の遺伝子の発現量を測定したとします。 N=60人、p=20,000遺伝子。つまり p ≫ N です。 この状況では、従来の機械学習の「常識」が通用しなくなります。

アニメーションを見てください。同じ数の点でも、1次元では密集して見えるのに、 2次元・3次元と増えるにつれてどんどん孤立してしまいます。 20,000次元の空間に60点しかないとき、その「スカスカ」さは想像を絶するものになります。
「変数の数(p)がサンプルの数(N)よりはるかに大きい状況」——これがp ≫ N問題の核心です。
なぜ困るのか?
変数がサンプルより多い場合(p > N)、訓練データに完全にフィットする解が無限に存在してしまいます。 例えば、60人のデータに60個以上の変数があれば、訓練誤差ゼロのモデルを簡単に作れます。 しかしこのモデルは「本物のパターン」ではなく「ノイズ」を学んでいるため、 新しいデータには全く役立ちません。
これがp ≫ Nの核心的な問題:過学習のリスクが極端に高いのです。
解決策の鍵:シンプルさを優先する
直感に反するかもしれませんが、p ≫ Nの世界では「シンプルで強く正則化されたモデル」が 複雑なモデルより一般的に優れています。なぜでしょうか?
答えは「スパース性(疎性)」の仮定にあります。 2万個の遺伝子のうち、ある疾患に実際に関連しているのはおそらく数十〜数百程度でしょう。 残りのほとんどはノイズです。つまり「本当に重要な変数は少ない」という前提が、 多くの高次元問題では成り立ちます。 この仮定のもとで、単純化・正則化されたモデルが驚くほど強力になります。
対角線形判別分析(Diagonal LDA)
p ≫ Nの世界で、まず古典的な線形判別分析(LDA)がなぜ失敗するのかを考えてみましょう。
LDAは各クラスの平均ベクトルと、クラス内の共分散行列を推定することで境界を決めます。 しかし、変数がp=20,000個あると、共分散行列はp×p=20,000×20,000の行列になります。 これを推定するには最低でもp個のサンプルが必要ですが、N=60しかない—— つまり行列が特異行列(逆行列が存在しない)になってしまいます。
大胆な単純化:変数は互いに独立と仮定する
そこで登場するのが「対角LDA(Diagonal LDA)」です。 アイデアはシンプル:各変数(遺伝子)はクラス内で互いに独立している、と仮定します。
現実には遺伝子は互いに相関していますが、この大胆な仮定のもとで共分散行列は 対角行列(対角成分のみ非ゼロ)になり、推定がはるかに容易になります。

アニメーションで見たように、アイデアはとてもシンプルです。 テスト点がどちらのクラスの「中心」に近いかを測って、近い方に分類する。 これが対角LDAの直感です。
判別スコアの計算式
クラスkへのスコアを数式で表すと次のようになります:
式の各項の意味を見ていきましょう:
- x*_j:テスト点の第j変数の値
- x̄_kj:クラスkにおける第j変数の平均(セントロイド)
- σ̂²_j:第j変数の分散(クラスを超えた全体の分散)
- π̂_k:クラスkの事前確率(訓練データでの各クラスの割合)
直感的には「あなたのデータがクラスkの平均にどれだけ近いか」を測り、 近いほどそのクラスに分類する、という非常にシンプルな発想です。
現実のがんデータでの検証では、この単純な手法が驚くほど良く機能します。 複雑なモデルに勝ることも珍しくありません。
最近縮小セントロイド(Nearest Shrunken Centroids)
対角LDAはシンプルで効果的ですが、一つ問題があります: 20,000個の遺伝子を全て使って分類するため、「どの遺伝子が重要なのか」がわかりません。
さらに、多くの変数は実際にはノイズで、分類に全く役立っていません。 それどころか、ノイズの多い変数を使うことで精度が下がる可能性もあります。
セントロイドを縮小する
最近縮小セントロイド(Nearest Shrunken Centroids, NSC)は、対角LDAに「スパース性」を加えた手法です。 核心のアイデアは:各クラスのセントロイドを全体の平均方向に向けて縮小する、というものです。
具体的には、クラスkの第j変数のセントロイドと全体平均の差を取り、 その差が小さすぎる場合は0にしてしまいます(ソフト閾値処理)。 差がゼロになった変数は分類に使われません——つまり自動的に変数選択が行われます。

アニメーションの棒グラフは各変数の「差の大きさ」を表しています。 赤い線が閾値Δです。この線より低い棒は全てゼロに縮み、 残った棒(黄色)の変数だけが分類に使われます。
この式の意味を読み解くと:
- d_kj: クラスkのセントロイドと全体平均の標準化された差
- Δ: 閾値(クロスバリデーションで決定)
- (z)_+: 正の部分(zが負なら0)——これが「ゼロへの縮小」を実現します
閾値Δを大きくするほど、使われる変数が少なくなります。最適なΔはクロスバリデーションで選びます。
実際の効果:2,308遺伝子 → 43遺伝子
著者らが行ったがん分類実験では、2,308個の遺伝子から、 Δ=4.3に設定することで43個の遺伝子だけを使って 分類できました。しかもこの43遺伝子での分類精度は、全遺伝子を使った場合と同等でした。
9,000個以上の遺伝子を「これは分類に関係ない」と自動的に除外—— これが縮小セントロイドの力です。
高次元でのモデル評価の重要性
p ≫ Nの世界で、もう一つ見落とされがちな落とし穴があります:変数選択とモデル評価を混在させてはいけない。
よくある間違い
多くの研究で繰り返されてきた誤ったアプローチを見てみましょう:
- 全データでt検定を行い、p値の小さい上位500遺伝子を選ぶ
- この500遺伝子でモデルを構築する
- 同じデータでクロスバリデーションを行い精度を評価する
これはなぜ間違いか? クロスバリデーションでテストデータとして使うサンプルも、 すでにステップ1の変数選択に使われているからです。 つまり「テストデータのリーク(情報漏洩)」が起きています。

正しいアプローチ
クロスバリデーションの各フォールドで、次の順序を守る必要があります:
- 訓練データのみで変数選択を行う
- 選ばれた変数でモデルを構築する
- バリデーションデータで評価する
この手順を守ることで、真の汎化性能を正しく推定できます。
p ≫ Nの状況では、「正しいクロスバリデーション」と「間違ったクロスバリデーション」の差が 非常に大きくなります。誤った方法では、実際より大幅に楽観的な精度が報告されてしまいます。 実際の研究でこの間違いは頻繁に起きており、再現性の問題の一因になっています。
まとめ — 高次元の知恵

アニメーションが示すように、高次元問題(中央)に対して3つの戦略が広がっています。 第18章前半の主要な教訓をまとめましょう。
1. シンプルさを優先する
複雑なモデルより単純なモデルが高次元では往々にして勝ります。 対角LDAのように、一見「非現実的に単純な仮定」でも、高次元では有効に機能します。 なぜなら、複雑さはノイズを学ぶだけだからです。
2. スパース性を活用する
高次元データには「本当に重要な変数は少ない」というスパース性の仮定が多くの場合成り立ちます。最近縮小セントロイドのように、 自動的に変数選択を行う手法が強力です。 2万個の遺伝子から43個に絞っても精度が落ちない——これがスパース性の力です。
3. 評価を正しく行う
変数選択はクロスバリデーションの内部で行い、 情報漏洩を防ぐ。これを怠ると、楽観的すぎる精度推定になります。 p ≫ Nの状況ではこの差が特に大きく、誤った評価は研究の信頼性を大きく損なわせます。
これらの原則は、次のセクションで学ぶさらに高度な手法 (L1/L2正則化分類器、教師あり主成分分析、多重検定)でも一貫して適用されます。 高次元の世界は難しいですが、「シンプルに、スパースに、正しく評価する」という方針があれば、 実際に有用なモデルを構築できます。
次のセクションでは、この「スパース性」の原則をさらに強力な枠組みで再発見します。 L1正則化(Lasso)やL2正則化(Ridge)を使えば、同じアイデアをより広い問題に一般化できます—— そしてその結果は、初学者の想像を超えて強力なものになるでしょう。