← 機械学習テキスト 一覧

🎓 レベル:標準 | 重要度:B(標準)

📎 前提:線形回帰(最小二乗法と確率的解釈)汎化と過学習・バイアスバリアンス分解 | 数理:単回帰分析(統計)

要点(BLUF)

1. 基底関数とは

線形回帰は y=w0+w1xy = w_0 + w_1 x のように入力 xx に直接比例する直線しか引けません。これを非線形に拡張する素直な方法が、入力をいったん別の特徴量に変換してから直線を引くことです。

入力 xxMM 個の関数で写した値 ϕ1(x),,ϕM(x)\phi_1(x),\dots,\phi_M(x) を新しい特徴量とみなし、それらの線形結合で予測します。

y(x,w)=j=0M1wjϕj(x)y(x,\mathbf{w}) = \sum_{j=0}^{M-1} w_j\,\phi_j(x)

ここで ϕ0(x)=1\phi_0(x)=1(定数項=バイアス)と置くのが慣例です。ϕj\phi_j基底関数(basis function)、このモデルを線形基底関数モデルと呼びます。

要するに:「生の xx」ではなく「xx を加工した特徴量 ϕ(x)\phi(x)」に対して直線(超平面)を当てるだけ。加工で曲げる、当てはめは線形のまま、という分業です。

flowchart LR
  X["入力 x"] --> P["基底変換 φ(x) = [φ0, φ1, ..., φM-1]"]
  P --> L["線形結合 Σ wj φj(x)"]
  L --> Y["予測 y(x, w)"]

この発想の利点は、「曲げる責任」を基底に、「重みづけの責任」を学習に分けられることです。どんな曲線族を表現したいか(多項式か、山型か、区間ごとか)は基底の選択で決まり、その中でデータに最も合う1本を選ぶのは線形回帰の最小二乗が担います。基底を差し替えるだけで、同じ学習エンジンのまま表現する関数の性格を変えられます。

2. 代表的な基底関数

多項式基底

ϕj(x)=xj\phi_j(x) = x^j とすると、

y(x,w)=w0+w1x+w2x2++wMxMy(x,\mathbf{w}) = w_0 + w_1 x + w_2 x^2 + \dots + w_M x^M

これが多項式回帰です。次数 MM が表現力のつまみで、MM を上げるほど複雑な曲線を描けます。

要するに:多項式回帰は「基底に 1,x,x2,1,x,x^2,\dots を選んだ線形基底関数モデル」の特別な場合にすぎません。

⚠️ 多項式基底は**大域的(global)**です。1つの wjw_j が定義域全体に効くため、ある一点を合わせようとすると遠くの形まで動き、高次では端で激しく振動します(後述)。

ガウス基底(RBF)

中心 μj\mu_j・幅 ss の山型の関数を並べます。

ϕj(x)=exp ⁣((xμj)22s2)\phi_j(x) = \exp\!\left(-\frac{(x-\mu_j)^2}{2s^2}\right)

各基底は中心付近だけに反応する**局所的(local)**な関数です。中心をデータの範囲に均等に配置し、その重ね合わせで曲線を作ります。

要するに:山をいくつも置いて高さ wjw_j を調整し、足し合わせて任意の形になじませるイメージです。局所的なので、ある領域の調整が遠くを壊しにくいのが多項式との違いです。

ss は滑らかさのつまみです。ss を小さくすると各山が鋭くなり細かい変化を表せますが過学習しやすく、ss を大きくすると山がなだらかになり全体がぼやけます。中心 μj\mu_j の数と ss が、多項式でいう「次数」に相当する複雑さのコントロールになります。

区分多項式・スプライン

定義域をいくつかの区間(区切り点をノットと呼ぶ)に分け、区間ごとに低次の多項式を当て、ノットでなめらかに(値・1階・2階微分が連続するように)つなぎます。これがスプラインです。代表は各区間を3次多項式にした3次スプライン

要するに:全域を1本の高次多項式で無理に通すのをやめ、「局所ごとに低次多項式を貼り合わせる」ことで、低い次数のまま柔軟さと安定性を両立させます。これも BB-スプラインなどの基底関数で表せば線形基底関数モデルの一種です。

ノットの数と位置が複雑さのつまみです。ノットを増やすほど局所的な変化を表せますが、増やしすぎれば過学習します。端の外側を直線に固定した自然3次スプラインは、データの少ない境界付近で曲線が暴れるのを防ぐ実務的な工夫としてよく使われます。

graph TD
  BF["基底関数モデル<br/>y = Σ wj φj(x)"] --> POLY["多項式基底<br/>φj = x^j(大域的)"]
  BF --> GAUSS["ガウス基底 RBF<br/>山型(局所的)"]
  BF --> SPL["スプライン<br/>区間ごと低次多項式を接続"]

3種類の性格を整理すると次のとおりです。

基底効き方強み弱み
多項式 xjx^j単項式大域的単純・解釈しやすい高次で振動・悪条件
ガウス(RBF)山型局所的なめらか・局所調整が安定中心・幅の設定が必要
スプライン区間ごとの低次多項式局所的低次のまま柔軟・端が安定ノット位置・数の設計が必要

局所的な基底(ガウス・スプライン)は「ある領域をいじっても遠くが壊れにくい」ため、同じ柔軟さでもバリアンスを抑えやすいのが実務上の利点です。

3. なぜ最小二乗がそのまま使えるのか

基底関数 ϕj\phi_j がどれだけ非線形でも、それは事前に計算できる固定の値です。学習で動かすのは重み wjw_j だけ。モデルが ww について線形(y=jwjϕjy=\sum_j w_j \phi_j)である限り、線形回帰とまったく同じ計算になります。

データ {(xi,yi)}i=1n\{(x_i,y_i)\}_{i=1}^n に対し、ijij 成分が ϕj(xi)\phi_j(x_i)計画行列 Φ\Phi を作ると、

w^=(ΦΦ)1Φy\hat{\mathbf{w}} = \big(\Phi^\top \Phi\big)^{-1}\Phi^\top \mathbf{y}

という、線形回帰の正規方程式とまったく同じ閉形式解が得られます(XXΦ\Phi に置き換わっただけ)。

要するに:「線形」とは入力に対してではなくパラメータに対して線形という意味。だから非線形な曲線でも、解き方は線形回帰の使い回しでよいのです(数理の土台は 単回帰分析 統計)。

具体例:3点を2次多項式で

x={1,0,1}x=\{-1,0,1\}ϕ={1,x,x2}\phi=\{1,x,x^2\} なら計画行列は

Φ=(111100111)\Phi=\begin{pmatrix} 1 & -1 & 1 \\ 1 & 0 & 0 \\ 1 & 1 & 1 \end{pmatrix}

各行が1つのデータ点、各列が1つの基底です。あとは w^=(ΦΦ)1Φy\hat{\mathbf{w}}=(\Phi^\top\Phi)^{-1}\Phi^\top\mathbf{y} に通すだけで、2次曲線の係数 w0,w1,w2w_0,w_1,w_2 が一発で求まります。基底を {1,x,x2,x3}\{1,x,x^2,x^3\} に増やせば列が1本増えるだけで、手続きは何も変わりません。

4. 次数と過学習

次数 MM(=基底の数)を上げると仮説集合が広がり、訓練データへの当てはまりは良くなりますが、ノイズまで拾って過学習します。これは 汎化と過学習・バイアスバリアンス分解 のバイアス-バリアンスのトレードオフそのものです。

極端に言えば、データ点が nn 個あるとき次数 M=n1M=n-1 の多項式は全点をぴったり通せて訓練誤差をゼロにできます(補間)。しかしそれは真の関係ではなくノイズまで暗記しただけで、未知データでの誤差はむしろ悪化します。訓練誤差がいくらでも下がってしまうからこそ、評価は検証誤差で行う必要があるのです。

xychart-beta
    title "多項式の次数と当てはまり"
    x-axis ["1次", "3次", "5次", "9次", "15次"]
    y-axis "誤差" 0 --> 100
    line [70, 30, 15, 8, 3]
    line [72, 35, 30, 55, 92]

上の線が訓練誤差(次数とともに単調減少)、下から立ち上がる線が検証誤差(高次でU字に増加)。谷が「ちょうどよい次数」。検証誤差で次数を選ぶのが鉄則です(バイアスバリアンスの実証)。

高次多項式の落とし穴:ルンゲ現象

多項式基底にはもう一つ、過学習とは別の数値的な弱点があります。次数を上げると計画行列 Φ\Phi悪条件(ill-conditioned)になり、係数 wjw_j がわずかなデータの違いで桁違いに変動します。その結果、たとえ訓練点をすべて通っていても、点と点の間(とくに定義域の端)で曲線が大きく振動します。これをルンゲ現象と呼びます。

要するに:高次多項式は「データを通すこと」はできても「データの間を素直に補間すること」が苦手。表現力の高さがそのまま不安定さにつながるため、局所基底や正則化で抑えるのが定石です。

5. 正則化との併用で高次でも安定

「次数を下げる」以外に、高次のまま重みを抑える手もあります。L2正則化(Ridge)を入れた最小二乗は、

w^=(ΦΦ+λI)1Φy\hat{\mathbf{w}} = \big(\Phi^\top \Phi + \lambda I\big)^{-1}\Phi^\top \mathbf{y}

となり、λI\lambda I を足すぶん ΦΦ\Phi^\top\Phi の悪条件がやわらぎ、係数が暴れにくくなります(数値的にも安定)。

要するに:基底の数(次数)と正則化の強さ λ\lambda は、どちらも複雑さを調整するつまみ。高次の基底で表現力を確保しつつ λ\lambda でバリアンスを抑える、という組み合わせが実務的です(詳細は 正則化(Ridge・Lasso・Elastic Net))。

スパース性が欲しい場合は L1 正則化(Lasso)を使うと、不要な高次の基底の重みがちょうど 0 になり、「実質的に使う基底を選ぶ」効果も得られます。

6. 使いどころと基底の選び方

固定基底の限界と、その先

ここまでの基底はすべて人が事前に決め打ちしたものでした。これは入力が1次元なら問題になりませんが、入力の次元が増えると基底の数が爆発的に必要になります(次元の呪い)。たとえば dd 次元入力で全次数 MM までの多項式項を並べると、項数はおよそ dMd^M のオーダーになり、現実的でなくなります。

この限界を超える発想が「基底そのものをデータから学習する」ことです。ニューラルネットワークは、隠れ層が ϕj(x)\phi_j(x) に相当する基底を学習で形作り、その線形結合で出力する——いわば「基底が固定でなく可変な線形基底関数モデル」と見ることができます。固定基底モデルは、その意味で深層学習へ続く出発点でもあります。

要するに:基底関数モデルは「特徴量をどう作るか」と「どう重みづけるか」を分けた最初の一歩。後者を線形回帰に任せ、前者を学習で獲得する方向に進めたのがニューラルネットワークです。

まとめ

基底関数モデルは、入力 xxϕ(x)\phi(x) に写すことで、線形回帰の枠組みのまま非線形な関係を表現する仕組みです。多項式・ガウス・スプラインなど基底を選ぶだけで表現力を変えられ、パラメータについては線形なので最小二乗がそのまま使えます。表現力を上げれば過学習に向かうので、検証誤差で複雑さを選び、正則化を併用して安定させる——これが基底関数モデルを使いこなす勘所です。

⚠️ よくある誤解

対応するシミュレーション

simulations/polynomial_basis.py:sin 波のデータに、(1) そのまま(直線)、(2) 多項式基底 [1,x,x2,][1,x,x^2,\dots]、(3) ガウス基底で線形回帰を当てて比べます。直線は曲線に追従できないが、入力を基底で“変換”してから線形回帰すると x について非線形な曲線を当てられること=「線形回帰の“線形”は重みについての線形で、入力についてではない」ことを可視化します。基底を増やすと過学習するので正則化(正則化(Ridge・Lasso・Elastic Net))と組み合わせます。

基底関数で線形回帰を非線形化

関連ノート