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