📐 数学導出 詳細

回帰モデルの数式がなぜそうなるかを、ステップバイステップで導出します。

← 線形回帰に戻る ← Ridge に戻る ← Lasso に戻る

1. 線形回帰の最小二乗法 — なぜこの式で解けるのか

行列 $X$ とは何か

$n$ 個のデータ、$p$ 個の特徴量があるとき:

$$X = \begin{pmatrix} x_{11} & x_{12} & \cdots & x_{1p} & 1 \\ x_{21} & x_{22} & \cdots & x_{2p} & 1 \\ \vdots & \vdots & \ddots & \vdots & \vdots \\ x_{n1} & x_{n2} & \cdots & x_{np} & 1 \end{pmatrix} \in \mathbb{R}^{n \times (p+1)}$$ 各行 = 1つのデータサンプル。各列 = 1つの特徴量。最後の列の「1」はバイアス項 $b$ のため。

$$y = \begin{pmatrix} y_1 \\ y_2 \\ \vdots \\ y_n \end{pmatrix}, \quad w = \begin{pmatrix} w_1 \\ w_2 \\ \vdots \\ w_p \\ b \end{pmatrix}$$ $y$ = 正解ベクトル、$w$ = 求めたい重み+バイアス。
具体例: 家の価格予測 (面積, 築年数 → 価格)
$X = \begin{pmatrix} 80 & 5 & 1 \\ 120 & 10 & 1 \\ 60 & 20 & 1 \end{pmatrix}$, $y = \begin{pmatrix} 3000 \\ 4500 \\ 2000 \end{pmatrix}$
$Xw = y$ → $w = [w_{\text{面積}}, w_{\text{築年数}}, b]^T$ を見つけたい。

なぜ $(X^TX)^{-1}X^Ty$ で解けるのか — 導出

Step 1: 損失関数を行列形式で書く

$L(w) = \displaystyle\sum_{i=1}^n (y_i - \hat{y}_i)^2 = \|y - Xw\|^2 = (y - Xw)^\top (y - Xw)$

各データ点の二乗誤差の合計 = ベクトルのノルムの二乗

Step 2: 展開する

$L(w) = y^\top y - 2 w^\top X^\top y + w^\top X^\top X w$

$(a-b)^2 = a^2 - 2ab + b^2$ の行列版

Step 3: $w$ で微分して 0 に設定する

$\dfrac{\partial L}{\partial w} = -2 X^\top y + 2 X^\top X w = 0$

「最小値では微分=0」(凸関数なので最小値が唯一)

Step 4: $w$ について解く

$X^\top X w = X^\top y$
$\hat{w} = (X^\top X)^{-1} X^\top y$ ← これが最小二乗法の解析解

$(X^\top X)^{-1}$ が存在する = $X^\top X$ が正則(逆行列を持つ)場合のみ成立。
→ 正則でない場合(多重共線性)は解けない → Ridge で解決。

2. Ridge 回帰 — なぜ $\lambda I$ で正則になるのか

多重共線性 (Multicollinearity) とは

問題: 特徴量 $x_1$ と $x_2$ が強く相関している場合。

例: 「家の面積(m²)」と「部屋数」は強く相関する。
→ $X^TX$ の行列式がほぼ0になる(正則でない = 逆行列が不安定)。

結果: $\hat{w} = (X^TX)^{-1}X^Ty$ の値が極端に大きく振れる(不安定な解)。
→ 学習データにはフィットするが、新しいデータで予測が暴走する

Ridge の解析解と「正則になる」の意味

Ridge の損失関数:
$L(w) = \|y - Xw\|^2 + \lambda \|w\|^2$

第2項 $\lambda\|w\|^2 = \lambda w^\top w$ がペナルティ。大きな重みを罰する。

微分して0に設定:
$\dfrac{\partial L}{\partial w} = -2X^\top y + 2X^\top X w + 2\lambda w = 0$

$(X^\top X + \lambda I) w = X^\top y$

$\hat{w} = (X^\top X + \lambda I)^{-1} X^\top y$ ← Ridge の解析解
なぜ $+\lambda I$ で正則になるのか?

$X^\top X$ の固有値が $\lambda_1, \lambda_2, \dots, \lambda_p$ だとすると:
$(X^\top X + \lambda I)$ の固有値は $\lambda_1 + \lambda, \lambda_2 + \lambda, \dots, \lambda_p + \lambda$

$\lambda > 0$ なので、全ての固有値が必ず正になる
→ 行列式 $\neq 0$ → 逆行列が常に存在する (= 正則)。

言い換え: $\lambda I$ を足すことで、行列の対角成分が底上げされ、
「ほぼ0の固有値」が「$\lambda$ 以上の正の値」に引き上げられる。
→ 逆行列の計算が安定する。
直感的な説明:

$\lambda = 0$: 普通の線形回帰。データにピッタリ合わせようとする。
$\lambda$ が大きい: 重みを小さく保とうとする力が強い。データへのフィットより「重みの小ささ」を優先。
$\lambda \to \infty$: 全ての重みが 0 に → 何も学習しない(未学習)。

→ $\lambda$ は「データへのフィット」と「モデルの単純さ」のトレードオフを制御する。
→ 最適な $\lambda$ はCross Validationで見つける。

3. Lasso 回帰 — 座標降下法と ISTA

なぜ解析解がないのか

Lasso の損失関数:
$L(w) = \|y - Xw\|^2 + \lambda \displaystyle\sum_j |w_j|$

$|w_j|$ (絶対値) は $w_j = 0$ で微分不可能(尖った点)。

→ 「微分=0に設定して解く」という手法が使えない。
反復的最適化(座標降下法やISTA)で近似的に解く。

座標降下法 (Coordinate Descent) とは

アイデア: 全ての $w_j$ を同時に最適化するのは難しい。
1つの $w_j$ だけを最適化し、他は固定する。これを全 $j$ で繰り返す。

1変数の Lasso 解(ソフト閾値関数):
$\hat{w}_j = S_{\lambda'}(z_j) = \begin{cases} z_j - \lambda' & (z_j > \lambda') \\ 0 & (|z_j| \leq \lambda') \\ z_j + \lambda' & (z_j < -\lambda') \end{cases}$

$z_j = \dfrac{1}{n} \displaystyle\sum_i x_{ij} (y_i - \hat{y}_i^{(-j)})$ ← $w_j$ 以外での残差

$S$ = ソフト閾値関数。$|z_j|$ が $\lambda'$ より小さければちょうど 0 にする(スパース化の仕組み)。
直感的な説明:

1. $w_1$ 以外を固定して、$w_1$ だけを最適化
2. $w_2$ 以外を固定して、$w_2$ だけを最適化
3. ... $w_p$ まで繰り返す
4. 1に戻る(収束するまで繰り返し)

各ステップで1変数だけの問題になるので、ソフト閾値関数で解析的に解ける
→ 全体は反復的だが、各ステップは高速。scikit-learn の Lasso はこの方法。

ISTA (Iterative Shrinkage-Thresholding Algorithm)

アイデア: 勾配降下 + ソフト閾値の組合せ。

$w^{(t+1)} = S_{\lambda \eta} \left( w^{(t)} - \eta \nabla_w \|y - Xw^{(t)}\|^2 \right)$

1. 勾配降下で1ステップ進む(MSE部分の勾配)
2. ソフト閾値関数で L1 ペナルティを適用($|w_j|$ 部分)

近接勾配法 (Proximal Gradient Method) の特殊ケース。
改良版 FISTA (Fast ISTA) は Nesterov の加速勾配を使い、収束が $O(1/t^2)$ に改善。
座標降下 vs ISTA:

座標降下: 実用的に最速。scikit-learn の標準。小〜中データ向き
ISTA/FISTA: 大規模データ・分散計算向き。理論的に収束保証あり

実務では scikit-learn の Lasso (座標降下) をそのまま使えばOK。

4. 回帰モデル6種 — 各項の物理的意味

① 線形回帰

$$\underbrace{\hat{y}}_{\text{予測値}} = \underbrace{w_1}_{\substack{\text{面積の}\\\text{影響度}}} x_1 + \underbrace{w_2}_{\substack{\text{築年数の}\\\text{影響度}}} x_2 + \underbrace{b}_{\substack{\text{ベース値}\\\text{(切片)}}}$$
各項の意味:
• $w_j$ = 特徴量 $x_j$ が1単位増えたとき、予測がどれだけ変わるか(偏回帰係数
• $b$ = 全特徴量が0のときの予測値(切片/バイアス
• 例: $w_{\text{面積}} = 40$ → 面積が1m²増えると価格が40万円上がる

損失関数: $$\underbrace{L(w)}_{\substack{\text{全体の}\\\text{ダメさ}}} = \frac{1}{n} \sum_{i=1}^n \underbrace{(y_i - \hat{y}_i)^2}_{\substack{\text{各データ点の}\\\text{予測ズレの二乗}}}$$ • 二乗する理由: ①正負を相殺させない ②大きなズレをより強く罰する
• $\frac{1}{n}$: データ数で割って平均化

② Ridge 回帰 (L2 正則化)

$$L(w) = \underbrace{\frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2}_{\substack{\text{データフィット項}\\\text{予測精度を上げたい}}} + \underbrace{\lambda}_{\substack{\text{ペナルティ}\\\text{の強さ}}} \underbrace{\sum_{j=1}^p w_j^2}_{\substack{\text{重みの二乗和}\\\text{大きい重みを罰する}}}$$
各項の意味:
第1項 (データフィット): 予測と正解のズレ → 小さくしたい
第2項 (L2ペナルティ): 重みの大きさ → 小さく保ちたい
$\lambda$ (ラムダ): 2つのバランスを制御する「つまみ」

$\lambda = 0$ → 線形回帰と同じ(ペナルティなし)
$\lambda$ 大 → 重みが小さくなる(過学習防止、しかし未学習リスク)
$\lambda \to \infty$ → 全重みが0に(何も学ばない)

$w_j^2$ (二乗)を使うのは: 全ての重みを均等に小さくする力が働く。
  → どの特徴量も少しずつ使い、完全に0にはならない

③ Lasso 回帰 (L1 正則化)

$$L(w) = \underbrace{\frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2}_{\text{データフィット}} + \underbrace{\lambda}_{\text{強さ}} \underbrace{\sum_{j=1}^p |w_j|}_{\substack{\text{重みの絶対値和}\\\text{→ 0にする力}}}$$
Ridge との決定的な違い:
• Ridge は $w_j^2$(放物線状)→ 0に近づけるが、ちょうど0にはならない
• Lasso は $|w_j|$(V字型)→ ちょうど0になる(尖った先端にハマる)

なぜ0になると嬉しいか:
→ $w_j = 0$ は「特徴量 $j$ を使わない」と同義 = 自動的な特徴選択
→ 100個の特徴量 → 実は重要な10個だけ残る → 解釈しやすいモデルに

④ Elastic Net

$$L(w) = \underbrace{\text{MSE}}_{\text{フィット}} + \lambda \left[ \underbrace{\alpha \sum_j |w_j|}_{\substack{\text{L1部分}\\\text{スパース化}}} + \underbrace{(1-\alpha) \sum_j w_j^2}_{\substack{\text{L2部分}\\\text{安定化}}} \right]$$
$\alpha$ の意味:
• $\alpha = 1$ → 純粋な Lasso (スパース化重視)
• $\alpha = 0$ → 純粋な Ridge (安定性重視)
• $0 < \alpha < 1$ → 両方のいいとこ取り

Lasso の弱点を補完:
Lasso は相関する特徴量グループ (面積 ↔ 部屋数) から1つしか選ばない。
Elastic Net の L2 部分が「グループをまとめて残す」ことを可能にする。

⑤ ロジスティック回帰

$$\underbrace{P(y=1 \mid x)}_{\substack{\text{クラス1の}\\\text{確率}}} = \underbrace{\sigma}_{\substack{\text{シグモイド}\\\text{関数}}} \left( \underbrace{w \cdot x + b}_{\substack{\text{線形回帰と同じ}\\\text{(実数を出力)}}} \right) = \frac{1}{1 + e^{-(w \cdot x + b)}}$$
各部分の意味:
$w \cdot x + b$: 線形回帰と全く同じ計算。実数 $(-\infty, +\infty)$ を出力
$\sigma(\cdot)$: シグモイド関数で $[0, 1]$ に圧縮 → 確率として解釈可能
• $w \cdot x + b > 0$ → $\sigma > 0.5$ → クラス1と予測
• $w \cdot x + b < 0$ → $\sigma < 0.5$ → クラス0と予測
• $w \cdot x + b = 0$ → $\sigma = 0.5$ → 決定境界 (ちょうど半々)

多クラス版 (Softmax): $$P(y=k) = \frac{e^{z_k}}{\sum_{j=1}^K e^{z_j}}$$ • 各クラスのスコア $z_k$ を指数関数で正にし、合計が1になるよう正規化
NN の最終層と完全に同じ操作

クロスエントロピー損失: $$L = -\frac{1}{n}\sum_{i=1}^n \underbrace{y_i \log \hat{y}_i}_{\substack{\text{正解=1の時}\\\text{予測が1に近いほど}\\\text{損失小}}} + \underbrace{(1-y_i) \log(1-\hat{y}_i)}_{\substack{\text{正解=0の時}\\\text{予測が0に近いほど}\\\text{損失小}}}$$ • $y_i=1$ のとき: $\hat{y}_i \to 1$ で $\log(1) = 0$ (損失ゼロ = 完璧)
• $y_i=1$ のとき: $\hat{y}_i \to 0$ で $\log(0) = -\infty$ (損失爆発 = 最悪)
• MSE ではなくクロスエントロピーを使う理由: 勾配がシンプルになる ($\hat{y} - y$)

⑥ 自己回帰 AR / ARIMA

$$\underbrace{x_t}_{\substack{\text{今の値}}} = \underbrace{c}_{\substack{\text{定数}\\\text{(トレンド)}}} + \underbrace{\phi_1 x_{t-1}}_{\substack{\text{1ステップ前}\\\text{の影響}}} + \underbrace{\phi_2 x_{t-2}}_{\substack{\text{2ステップ前}\\\text{の影響}}} + \cdots + \underbrace{\varepsilon_t}_{\substack{\text{ノイズ}\\\text{(予測不能な}\\\text{ランダム成分)}}}$$
各項の意味:
$c$: 定数項。時系列の長期的トレンド(例: 株価の長期上昇傾向)
$\phi_k$: $k$ ステップ前の値の影響度。$|\phi_k| < 1$ で安定(定常)
$\varepsilon_t$: ホワイトノイズ(予測不能なランダム成分)

ARIMA(p,d,q) の3つの数字:
p = AR の次数(何ステップ前まで見るか)
d = 差分の回数(非定常 → 定常に変換する回数)
q = MA の次数(過去ノイズの影響)

: ARIMA(2,1,1) → 1回差分を取り、2ステップ前まで参照、1つ前のノイズも使う

GPT との関係:
GPT は「次の単語を予測する自己回帰モデル」。
AR が「次の数値を予測する」のと本質的に同じ構造。

← 線形回帰に戻る ← Ridge に戻る ← Lasso に戻る ← Elastic Net に戻る ← ロジスティックに戻る ← AR/ARIMA に戻る