線形回帰のまとめ(House Prices を題材に)

本書は、Kaggle の House Prices コンペティションを題材とした学習の過程で整理した、線形回帰に関する内容をまとめたものである。記号・式・実装上の注意点を、機械学習の理論と実践の対応が分かるように記述する。

1. 問題設定

1.1 目的変数と説明変数

役割 内容 コード上の変数
目的変数 住宅の販売価格 SalePrice(対数変換後) y_log = np.log1p(train["SalePrice"])
説明変数 Id と SalePrice を除く 79 列 X
使用しない列 Id(単なる連番であり、予測に寄与しない) —
  • 評価指標が「予測値の対数と正解値の対数の RMSE」であるため、最初から対数価格を予測する。
  • np.log1p(x) は $\log(1 + x)$ を表し、逆変換は np.expm1(x)($\exp(x) - 1$)である。1p は「1 plus」、m1 は「minus 1」の意である。提出時には、予測値を np.expm1 で元の価格に戻す。
  • test.csv には SalePrice 列が存在しない。これが予測の対象である。

1.2 基準線

特徴量を一切用いず、全サンプルを対数価格の平均で予測した場合の RMSE は 0.3993 である(対数価格の標準偏差に等しい)。これが「何も学習しない予測」の基準線となる。

2. モデルと記号

サンプル数を $n$、特徴量数を $d$ とする。

記号 意味 形
$X$ 特徴量行列($i$ 行目がサンプル $i$ の特徴量 $\mathbf{x}_i$) $n \times d$
$\mathbf{y}$ 正解(目的変数)のベクトル $n \times 1$
$\mathbf{w}$ 重み(学習で求める) $d \times 1$
$b$ 切片(学習で求める) スカラー
$\hat{\mathbf{y}}$ 予測値のベクトル $n \times 1$

線形回帰の予測は次式で与えられる。

\[\hat{\mathbf{y}} = X\mathbf{w} + b, \qquad \hat{y}_i = \mathbf{w}^\top \mathbf{x}_i + b\]
  • $X$ と $\mathbf{y}$ はデータとして与えられる固定値であり、推定の対象は $\mathbf{w}$ と $b$ である。
  • $\mathbf{w}$ の要素数は特徴量数 $d$ に等しく、サンプル数 $n$ には依存しない。同一の $\mathbf{w}$ をすべてのサンプルに共通して用いる。
  • 全結合層(nn.Linear)との対応:線形回帰は、活性化関数を持たず出力が 1 個の全結合層に等しい。重み行列 $W$($d_{\text{in}} \times d_{\text{out}}$)において $d_{\text{out}} = 1$ とした場合が、重みベクトル $\mathbf{w}$ である。

3. 最小二乗法と MSE

  • 最小二乗法:残差の 2 乗和 $\sum_{i=1}^{n}(y_i - \hat{y}_i)^2$ を最小にする重みを求める方法。
  • MSE(平均二乗誤差):その 2 乗和を $n$ で割った $\frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2$。

$n$ は定数であるから、MSE を最小にする重みと 2 乗和を最小にする重みは一致する。したがって「MSE の最小化 = 最小二乗法」と言える。

4. 正規方程式

2 乗和 $J(\mathbf{w}) = |\mathbf{y} - X\mathbf{w}|^2$ を $\mathbf{w}$ で微分して $0$ とおく(以下、切片は特徴量に定数列を加えることで $\mathbf{w}$ に含めて扱う)。

\[\nabla_{\mathbf{w}} J = -2X^\top(\mathbf{y} - X\mathbf{w}) = 0 \quad\Longrightarrow\quad X^\top X\,\mathbf{w} = X^\top \mathbf{y}\]

これを正規方程式と呼ぶ。$X^\top X$ が逆行列を持つとき、解は次のとおり一意に定まる。

\[\hat{\mathbf{w}} = (X^\top X)^{-1} X^\top \mathbf{y}\]
  • 反復的な学習は不要であり、閉じた形で一度に求まる(深層学習における勾配降下法との相違点)。
  • $J$ のヘッセ行列 $2X^\top X$ は半正定値であり、$J$ は下に凸である。したがって、上の停留点で $J$ は最小となる。

5. 最尤推定との関係

誤差が正規分布に従うと仮定する。

\[y_i = \mathbf{w}^\top \mathbf{x}_i + \varepsilon_i,\quad \varepsilon_i \sim N(0, \sigma^2) \quad\Longleftrightarrow\quad y_i \sim N(\mathbf{w}^\top \mathbf{x}_i,\ \sigma^2)\]

このとき対数尤度は次式となる。

\[\log L(\mathbf{w}) = n\log\left(\frac{1}{\sqrt{2\pi\sigma^2}}\right) - \frac{1}{2\sigma^2}\sum_{i=1}^{n}(y_i - \mathbf{w}^\top \mathbf{x}_i)^2\]

第 1 項は $\mathbf{w}$ を含まない定数である。したがって、最大化すべき関数は

\[g(\mathbf{w}) = -\frac{1}{2\sigma^2}\sum_{i=1}^{n}(y_i - \mathbf{w}^\top \mathbf{x}_i)^2\]

であり、係数 $-\frac{1}{2\sigma^2}$ は負の定数であるから、$g$ の最大化は 2 乗和の最小化と同値である。ゆえに、誤差が正規分布に従うと仮定した最尤推定は、最小二乗法と一致する。

一変量正規分布の最尤推定との対応は次のとおりである。

一変量正規分布 回帰
データ $x_i$ 正解 $y_i$
平均 $\mu$(全データ共通で 1 つ) 予測 $\hat{y}_i = \mathbf{w}^\top \mathbf{x}_i$(サンプルごとに異なる)

$\mu$ を全サンプル共通の 1 つとした場合の解は標本平均であり、これが 1.2 節の基準線に対応する。

損失関数と分布の仮定

損失は「データがどの分布から生成されると考えるか」によって決まる。

タスク 仮定する分布 損失
回帰 正規分布 MSE
二値分類 ベルヌーイ分布 バイナリ交差エントロピー
多クラス分類 カテゴリカル分布 交差エントロピー

6. 一次独立・一次従属と解の一意性

6.1 基本的な関係

$X$ の $d$ 本の列は、$n$ 次元空間のベクトルとみなせる。$n$ 次元空間において一次独立にできるベクトルは最大 $n$ 本であるから、

\[\operatorname{rank}(X) \le \min(n, d)\]

が成り立つ。解 $\mathbf{w}$ が一意に定まる条件は、$\operatorname{rank}(X) = d$($X$ の列がすべて一次独立)であり、これは $X^\top X$ が逆行列を持つことと同値である。

6.2 同値性の確認

  • $X$ の列が一次従属($X\mathbf{v} = 0$ となる $\mathbf{v} \ne 0$ が存在)ならば、$X^\top X\mathbf{v} = X^\top(X\mathbf{v}) = 0$ となり、$X^\top X$ も逆行列を持たない。
  • 逆に $X^\top X\mathbf{v} = 0$ ならば、$\mathbf{v}^\top X^\top X\mathbf{v} = |X\mathbf{v}|^2 = 0$ より $X\mathbf{v} = 0$ が得られる。

したがって、「$X$ の列が一次独立」「$\operatorname{rank}(X) = d$」「$X^\top X$ が逆行列を持つ」は同値である。なお、一次従属かどうかを判定する対象は $X$ の列であって、$X^\top X$ ($d \times d$ の正方行列)そのものではない。

6.3 $n$ と $d$ の関係

関係 連立方程式としての見方($n$ 本の式、$d$ 個の未知数) $X$ の列 解
$d > n$ 式が不足する 必ず一次従属 無数に存在し、訓練データを完全に再現できる
$d = n$ 式と未知数が同数 独立であれば成立 一意に定まるが、訓練誤差は 0(補間)
$d < n$ 式が余る(過剰決定) 独立の可能性はあるが保証はされない 独立であれば一意。残差が残るため、最小二乗解を求める

「式が足りない」(連立方程式の見方)と「列が一次従属」(列ベクトルの見方)は、同一の事実を行と列の異なる側面から述べたものである。$n \ge d$ は一次独立となるための必要条件であって、十分条件ではない。

6.4 $n \ge d$ でも一次従属となる原因

  • 全カテゴリを残した one-hot 表現(同一変数のダミー列の和が常に 1 となり、切片列と重複する)
  • 他の列の線形結合として作った特徴量(例:総面積 = 1 階面積 + 2 階面積 + …)
  • 定数列、重複列

6.5 一次独立であっても生じる問題(多重共線性)

列がほぼ一次従属である場合、$X^\top X$ は逆行列を持つが、数値的に不安定である。重みの絶対値が大きくなり、データのわずかな変化で解が大きく変動する。$n$ が $d$ に近い場合にも、同様に過剰適合しやすい。

6.6 対処法

対処 効果
列の削減(drop="first"、重複列・定数列の除去、特徴量選択) 構造的な従属の解消
擬似逆行列(LinearRegression の実装) 一意でない解のうち、重みのノルムが最小のものを選ぶ
Ridge(L2 正則化) $\lambda > 0$ により、必ず逆行列を持つ
Lasso(L1 正則化) 不要な特徴量の重みを 0 にする(スパース性)
データの追加 $n$ を増やし、$d$ との差を広げる

7. 正則化(Ridge)

Ridge は、2 乗和に重みの大きさへの罰則を加えた関数を最小化する。

\[J_{\text{ridge}}(\mathbf{w}) = \|\mathbf{y} - X\mathbf{w}\|^2 + \lambda\|\mathbf{w}\|^2\]

微分して $0$ とおくと

\[(X^\top X + \lambda I)\,\mathbf{w} = X^\top \mathbf{y} \quad\Longrightarrow\quad \hat{\mathbf{w}}_{\text{ridge}} = (X^\top X + \lambda I)^{-1} X^\top \mathbf{y}\]

を得る。

  • $\lambda > 0$ ならば $X^\top X + \lambda I$ は必ず逆行列を持つため、列が一次従属であっても、$d > n$ であっても、解は一意に定まる。
  • $\lambda$ を大きくするほど重みは $0$ に近づき、モデルの実効的な自由度は低下する(過剰適合の抑制)。$\lambda \to 0$ では最小二乗解に近づく。
  • 切片は通常、罰則に含めない。
  • 深層学習では、同じ考え方が weight decay(例:AdamW の weight_decay)として現れる。

標準化の影響

切片を持つ正則化なしの線形回帰では、列を標準化しても予測値は変わらない(重みの値のみが変わる)。一方、Ridge や Lasso では罰則が重みの大きさに作用するため、標準化の有無によって予測値も変わる。

8. パラメータとハイパーパラメータ

区分 例 決め方
パラメータ $\mathbf{w}$、$b$ 訓練データから損失を最小化して求める
ハイパーパラメータ Ridge の $\lambda$、木の深さなど 学習の外で決める。交差検証などで選択する

誤差の分散 $\sigma^2$ は尤度に含まれるパラメータであるが、$\mathbf{w}$ の推定には影響しない。$\mathbf{w}$ を求めた後、残差から $\hat{\sigma}^2 = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2$ として推定できる。

9. 特徴量の表現(one-hot)

カテゴリ変数 $a$(3 カテゴリ)と数値変数 $b$ を持つサンプルを考える。$a$ が 1 番目のカテゴリで $b = 3$ の場合、特徴量ベクトルは次のとおりである。

\[\mathbf{x} = (1, 0, 0, 3)\]
  • one-hot が 1 である列の重みのみが予測に寄与するため、カテゴリごとに異なる切片を加える働きをする。
  • 実装(ColumnTransformer)では、数値列、カテゴリ列の順に並ぶため、$(3, 1, 0, 0)$ の順になるが、列順は予測に影響しない。
  • 数値列は標準化される(例:平均 5、標準偏差 2 の場合、$3 \to -1$)。one-hot 側は変換されない。
  • 欠損は “Missing” というカテゴリで補完するため、列が 1 つ増える。

10. 競技者間で結果が分かれる要因

$X^\top X$ が逆行列を持つ場合、同一の $X$ と $\mathbf{y}$ を用いれば、全員が同一の $\mathbf{w}$ を得る(乱数も初期値も存在しない)。したがって、結果の差は次の要因から生じる。

要因 例
列(特徴量)の選択・作成 欠損の多い列の除外、欠損の補完方法、順序カテゴリの数値化、総面積・築年数などの新特徴量、偏った数値列の対数変換、型の修正(MSSubClass など)
行(サンプル)の選択 外れ値の除外(広いのに安い数行など)。2 乗誤差は少数の外れ値の影響を受けやすい。除外できるのは train のみであり、test の行は除外できない
目的変数の変換 log1p の有無
モデルと正則化 Ridge・Lasso・LightGBM の選択と $\lambda$ などの値
アンサンブル 複数モデルの平均など
検証の設計 分割数、繰り返しの有無

訓練データ上で最小の誤差を与える解が、未知のデータで最良であるとは限らない。このため、競技では検証データ上の性能に基づく特徴量・モデル・正則化の選択が、順位を分ける主要因となる。

データ漏洩(リーク)への注意

補完値や標準化の平均・標準偏差を全データで計算すると、検証データの情報が学習側に漏れる。前処理は各 fold の学習データのみで fit する必要がある(Pipeline と ColumnTransformer を用いることで実現できる)。外れ値の除外も、評価に用いる検証側の行は残しておく。

11. 過剰適合の見え方と確認事項

  • 自由度の高いモデルでは、訓練誤差は極めて小さくなるが、未知データに対する誤差は大きくなる(過剰適合)。
  • 本題材では、5 分割交差検証により、1 回の学習に用いる行数は約 1168 行(1460 の 4/5)である。one-hot 後の特徴量数 $d$ は数百に達するため、$d < n$ であっても $d/n$ は小さくない。訓練誤差と検証誤差の差が、過剰適合の程度を示す。
  • 全カテゴリを残した one-hot であるため、$X$ の列は構造的に一次従属となる。

一次従属の確認コード

Xt = pre.fit_transform(X)
Xt = Xt.toarray() if hasattr(Xt, "toarray") else Xt   # 疎行列なら密行列に変換
A = np.c_[np.ones(len(Xt)), Xt]                       # 切片列を加える
print("形:", A.shape, " rank:", np.linalg.matrix_rank(A))

rank が列数($d + 1$)より小さければ列は一次従属であり、その差が冗長な列の本数に相当する。

12. 要点

  1. 線形回帰で推定するのは重み $\mathbf{w}$($d$ 個)と切片 $b$ であり、$X$ と $\mathbf{y}$ は固定のデータである。
  2. 最小二乗法は、誤差に正規分布を仮定した最尤推定と一致する。
  3. 解は正規方程式 $X^\top X\mathbf{w} = X^\top\mathbf{y}$ により閉じた形で求まり、$X$ の列が一次独立であれば一意である。
  4. $d > n$、one-hot の全カテゴリ保持、線形結合による特徴量の作成は、列を一次従属にする。
  5. Ridge は $\lambda I$ を加えることで解を一意にし、同時に過剰適合を抑える。
  6. 競技における差は、$X$ の構成(列・行の選択)、モデル、正則化、検証設計から生じる。