線形回帰は、機械学習の基本的な手法の1つであり、データ分析や予測モデルの構築に広く使用されています。
この記事では、線形回帰の基本概念、数学的な背景、およびPythonを使った実装例について説明します。
線形回帰とは
線形回帰は、説明変数(入力変数)と目的変数(出力変数)の関係を線形モデルで表現する手法です。
説明変数の値から目的変数の値を予測することができます。線形回帰モデルは、以下の式で表されます。
$$y = b0 + b1x1 + b2x2 + … + bnxn$$
ここで、$y$は目的変数、$x1, x2, …, xn$は説明変数、$b0, b1, …, bn$は回帰係数です。
最小二乗法
線形回帰では、回帰係数を決定するために最小二乗法が使われます。最小二乗法は、予測値と実際の値の差の二乗和を最小化するように回帰係数を求める方法です。数学的には、以下の式で表されます。
$$minimize Σ(yi – (b0 + b1xi))^2$$
線形回帰の種類
線形回帰の種類にはどのようなものがありますか?
一部のタイプの回帰分析は、複雑なデータセットの処理により適しています。いくつかの例を次に示します。
線形単回帰
線形単回帰は、一次関数によって定義されます。
$$Y= β0*X + β1 + ε$$
$β0$ と $β1$ は回帰勾配を表す 2 つの未知の定数ですが、ε (イプシロン) は誤差項です。
線形単回帰を使用して、次のような 2 つの変数間の関係をモデル化できます。
- 降雨量と作物収量
- 子供の年齢と身長
- 温度計内の水銀の温度と膨張
線形重回帰
線形重回帰分析では、データセットに 1 つの従属変数と複数の独立変数が含まれます。線形回帰の直線関数は、次のように、より多くの因子を含む形に変化します。
$$Y= β0*X0 + β1X1 + β2X2+…… βnXn+ ε$$
予測変数の数が増えるにつれて、$β$ 定数の数も増加します。
線形重回帰は、複数の変数とそれらが結果に与える影響をモデル化します。
- 作物収量に対する降雨量、温度、肥料の使用
- 心臓病に対する食事と運動
- 住宅ローン金利に対する賃金上昇とインフレ
ロジスティック回帰
データサイエンティストは、ロジスティック回帰を使用して事象が発生する確率を測定します。予測は 0~1 の値で、0 は起こりそうもない事象を示し、1 は発生する可能性が最も高い事象を示します。ロジスティック方程式は、対数関数を使用して回帰直線を計算します。
次に例を示します。
- スポーツの試合での勝敗の確率
- 試験の合格または不合格の確率
- 画像が果物または動物である確率
Pythonでの実装
Pythonには、線形回帰を実装するためのライブラリが用意されています。代表的なものとして、NumPy、scikit-learn、statsmodelsがあります。以下は、scikit-learnを使った単回帰の例です。
from sklearn.linear_model import LinearRegression
import numpy as np
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 6, 8, 10])
model = LinearRegression()
model.fit(X, y)
print("係数:", model.coef_)
print("切片:", model.intercept_)
new_X = np.array([[6]])
predicted_y = model.predict(new_X)
print("予測値:", predicted_y)
Rustでの実装例
線形回帰の評価
モデルの性能を評価するために、決定係数(R^2)や平均二乗誤差(MSE)などの指標が使われます。決定係数は、モデルによって説明される分散の割合を表し、1に近いほど良いモデルであると言えます。
線形回帰の注意点
線形回帰は、説明変数と目的変数の関係が線形であることを前提としています。非線形の関係がある場合は、変数変換やより高度な機械学習手法の使用を検討する必要があります。また、外れ値やデータの欠損にも注意が必要です。
線形回帰は、シンプルで解釈しやすい手法ですが、適用範囲が限られています。データの特性を理解し、適切なモデルを選択することが重要です。線形回帰は、機械学習の入門として最適な手法の1つであり、その理解は他の手法を学ぶ上でも役立ちます。