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, (^^ゞ