📈

🧠 線形回帰完全攻略 - 重みとバイアスから誤差計算まで

に公開

📌 概要

機械学習を初めて学ぶと、必ず出会う概念が 線形回帰(Linear Regression) です。
しかし、wb誤差勾配降下法 などの用語が一度に出てくると、とても複雑で難しく感じられますよね。

この記事では、完全な初心者 のために、
「なぜ x を掛けるのか?」「b は一体何なのか?」といった疑問を理解することに焦点を当てます。
本当に一つ一つ簡単に解説していきます 😊


⚙️ 1. 線形回帰とは?

線形回帰は予測モデルの一つで、
以下のような式を使用して 結果値 y を予測します。

y = w1*x1 + w2*x2 + ... + wn*xn + b
  • x: 入力値(独立変数)
  • w: 重み(重要度)
  • b: バイアス(基本値)
  • y: 予測値

🔍 2. 重み(w)とは?

重み w は入力値 x の重要度を決定する数値 です。

例:

x1: 身長, w1: 0.2 → 予測値に20%寄与
x2: 体重, w2: 0.5 → 予測値に50%寄与
  • x の値が大きくても、w が小さいと影響は小さいです。
  • x の値が小さくても、w が大きいと影響は大きいです。

📌 まとめ: 「この入力値がどれだけ重要か」を決める値!


🎯 3. バイアス(b)とは?

バイアスは入力値が0でも y の値が0にならないようにする基本値 です。

例:

y = 勉強時間 × 10 + 20
  • 勉強時間が0でもスコアは20点 → これが b!

📌 まとめ: b は常に加えられる「開始点」のような役割


❗️ 4. なぜ誤差に x を掛けるのか?

誤差 = 予測値 - 実際の値
→ この誤差を減らすために w を変更する必要がありますが、

「どの x が誤差に大きく影響したのか」を知るために
誤差に x を掛けて調整します!

w[j] = w[j] - 学習率 * (誤差 * x[j])
  • x が大きいほど → 誤差に多く関与 → w も大きく調整
  • x が小さいほど → 影響は小さい → w を少しだけ変更

📌 まとめ: 誤差にどれだけ影響を与えたかを判断するために x を掛ける!


🧮 5. 勾配降下法(Gradient Descent)

誤差を減らすために w と b を少しずつ変更していくプロセスです。

w の調整:

w[j] = w[j] - 学習率 * 平均(誤差 * x[j])

b の調整:

b = b - 学習率 * 平均(誤差)

b は 誤差全体の平均値 のみで調整されます。


🧪 6. 簡単なコード例(1エポック)

import numpy as np

# サンプルデータ:2つのサンプル、3つの特徴
X = np.array([[1, 2, 3],
              [4, 5, 6]])
y = np.array([20, 50])  # 正解

# 初期の重みとバイアス
w = np.array([0.1, 0.1, 0.1])
b = 0.0
lr = 0.01  # 学習率

# 予測
pred = X @ w + b
error = pred - y

# 重みとバイアスの更新
w -= lr * (error[:, np.newaxis] * X).mean(axis=0)
b -= lr * error.mean()

print("更新された w:", w)
print("更新された b:", b)

🧠 まとめ

用語 意味
w(重み) 入力値の重要度(どれだけ掛けるか)
b(バイアス) 予測値を上下に動かす基本値
誤差(error) 予測値 - 実際の値
x を掛ける理由 誤差に最も影響を与えた特徴(x)を特定するため
勾配降下法 誤差を減らすために w と b を少しずつ調整する方法

Discussion