Shikata Ga Nai

Private? There is no such things.

28. 線形回帰モデルを理解しよう!

Hello there, ('ω')ノ

📌 1. 線形回帰とは?

線形回帰(Linear Regression) は、入力データ(特徴量)を使って、
「連続値(数値)」を予測するための統計モデル です。

例えば、以下のようなケースで活用されます。

📌 線形回帰の活用例

問題 説明
住宅価格予測 面積や部屋数をもとに価格を予測
売上予測 広告費をもとに売上を予測
気温予測 過去のデータから翌日の気温を予測

「入力データが増えたら、出力がどれくらい変わるか?」をモデル化するのが線形回帰!


📌 2. 線形回帰の数式

✅ 単回帰(シンプルな1変数の回帰)

最も基本的な線形回帰は、1つの入力変数(X)を使って出力(Y)を予測します。

[ Y = wX + b ]

記号 意味
( Y ) 予測したい値(目的変数)
( X ) 入力データ(説明変数)
( w ) 傾き(回帰係数、重み)
( b ) 切片(Y軸との交点)

例えば、
📌 「広告費(X)」と「売上(Y)」の関係を予測する」 というケースでは、

  • ( w ) が大きい → 広告費を増やすと売上が大きく上がる
  • ( b ) が大きい → 広告費がゼロでも、ある程度の売上がある

「Xが増えたら、Yがどれくらい増えるのか?」を表すのが線形回帰!


✅ 重回帰(複数の変数を使う回帰)

1つの変数だけでなく、複数の変数を使う場合は 「重回帰(Multiple Regression)」 と呼びます。

[ Y = w_1X_1 + w_2X_2 + w_3X_3 + ... + w_nX_n + b ]

例えば、住宅価格を予測する場合、
📌 「面積(X₁)・駅からの距離(X₂)・築年数(X₃)」 などの複数の特徴を使うと、

  • 面積(X₁)が広いほど、価格(Y)は高くなる
  • 駅から遠い(X₂が大きい)ほど、価格(Y)は下がる
  • 築年数(X₃)が古いほど、価格(Y)は下がる

複数の特徴量を組み合わせて、より正確な予測ができる!


📌 3. Pythonで線形回帰を実装

✅ データを準備

まずは、scikit-learn の California Housingデータセット を使って、
住宅価格を予測する線形回帰モデルを作ってみます!

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# データセットの読み込み
data = fetch_california_housing()
X = data.data   # 特徴量(面積・部屋数など)
y = data.target # 住宅価格(目的変数)

# データを学習用とテスト用に分割(8:2)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# モデルの作成
model = LinearRegression()
model.fit(X_train, y_train)  # 学習

# 予測
y_pred = model.predict(X_test)

# モデル評価
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
r2 = r2_score(y_test, y_pred)

print(f"RMSE: {rmse:.2f}")
print(f"R²スコア: {r2:.2f}")

住宅価格を予測する線形回帰モデルを作成!
RMSE(誤差)とR²(精度)を評価!


📌 4. モデルの評価指標

線形回帰の精度を評価するために、以下の2つの指標を使います。

📌 1. RMSE(Root Mean Squared Error: 平均二乗誤差) [ RMSE = \sqrt{\frac{1}{n} \sum (Y{\text{true}} - Y{\text{pred}})2} ] ➡ 誤差(予測値と実際の値のズレ)が小さいほど良い!

📌 2. R²スコア(決定係数) [ R2 = 1 - \frac{\sum (Y{\text{true}} - Y{\text{pred}})2}{\sum (Y_{\text{true}} - \bar{Y})2} ] ➡ 1に近いほど、モデルがデータをよく説明している!

RMSEは「予測誤差の大きさ」、R²は「モデルの説明力」を示す!


📌 5. 線形回帰の限界と応用

✅ 限界① 多重共線性(Multicollinearity)

  • 複数の特徴量が相関していると、モデルが不安定になる
  • 例: 「家の面積」と「部屋数」は相関が強い ため、どちらを使うか注意

📌 対策:
- 相関の強い特徴量を除外(VIF分析)
- PCA(主成分分析)で次元削減


✅ 限界② 過学習(Overfitting)

  • データにぴったり合わせすぎると、新しいデータに対して精度が下がる

📌 対策:
- リッジ回帰(Ridge Regression) → ( L2 ) 正則化を使う
- ラッソ回帰(Lasso Regression) → ( L1 ) 正則化で不要な特徴を削除

from sklearn.linear_model import Ridge

# リッジ回帰(過学習を防ぐ)
ridge_model = Ridge(alpha=1.0)
ridge_model.fit(X_train, y_train)
ridge_pred = ridge_model.predict(X_test)

print(f"Ridge RMSE: {np.sqrt(mean_squared_error(y_test, ridge_pred)):.2f}")

リッジ回帰で過学習を防ぎ、より良い予測が可能!


🎯 まとめ

線形回帰は「Xが増えたらYがどれくらい変わるか?」をモデル化する手法!
単回帰では1つの変数、重回帰では複数の変数を使う!
Pythonで簡単に線形回帰を実装し、住宅価格を予測!
モデルの評価には「RMSE」と「R²スコア」を使う!
過学習を防ぐには「リッジ回帰・ラッソ回帰」が有効!

Best regards, (^^ゞ