線形回帰の基礎
線形回帰(Linear Regression)は、機械学習における回帰アルゴリズムの中でも最も基本的な手法の一つです。入力変数と出力変数の間に線形の関係があると仮定し、データに最適な直線を引くことで、未知のデータに対する予測を行います。本記事では、線形回帰の基本的な概念からPythonを使用した実装方法までを解説します。
以下のページでも線形回帰とロジスティック回帰の解説を行っています。
線形回帰の基本概念
線形回帰は、次のような形式のモデルを使用して、データポイントの集合を表します。
y = wx + b
ここで、x
は説明変数(入力変数)、y
は目的変数(出力変数)、w
は回帰係数(重み)、b
は切片を表します。線形回帰では、与えられたデータに対して、w
とb
の値を調整することで、データに最も適合する直線を見つけます。
目的関数と最小二乗法
線形回帰では、モデルのパラメータを調整して誤差を最小化することが目的です。一般的に使用される目的関数は、最小二乗法です。これは、予測された値と実際の値の差の二乗和を最小化する方法です。目的関数は次のように表されます。
J(w, b) = Σ(y_pred - y_true)^2
ここで、y_pred
はモデルの予測値、y_true
は実際の値です。
線形回帰の実装例
それでは、Pythonで線形回帰を実装してみましょう。ここでは、scikit-learn
のLinearRegression
クラスを使用して、線形回帰モデルを構築します。
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
# サンプルデータの作成
data = {'x': [1, 2, 3, 4, 5],
'y': [1, 2, 3, 4, 5]}
df = pd.DataFrame(data)
# 説明変数と目的変数に分ける
X = df[['x']]
y = df['y']
# 線形回帰モデルの構築
model = LinearRegression()
model.fit(X, y)
# 予測の実行
y_pred = model.predict(X)
# 結果を表示
plt.scatter(X, y, color='blue', label='True values')
plt.plot(X, y_pred, color='red', label='Predicted values')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.title('Linear Regression')
plt.show()
このコードでは、X
とy
のデータセットを使用して、線形回帰モデルを構築しています。LinearRegression
クラスを使ってモデルを訓練し、predict
メソッドで予測値を計算します。グラフでは、青い点が実際のデータポイント、赤い線が予測された直線を示しています。
係数と切片の取得
訓練後の線形回帰モデルから、回帰係数(w
)と切片(b
)の値を取得することができます。
# 回帰係数と切片の取得
w = model.coef_[0]
b = model.intercept_
print(f'回帰係数: {w}')
print(f'切片: {b}')
このコードでは、モデルの回帰係数と切片を出力しています。これらの値が最適な直線を定義する要素です。
線形回帰の性能評価
線形回帰モデルの性能を評価するために、一般的には決定係数(R²)が使用されます。R²は、モデルがどれだけ正確にデータを説明できるかを示す指標です。
# 決定係数の計算
r2_score = model.score(X, y)
print(f'決定係数 R²: {r2_score}')
このコードでは、score
メソッドを使用して、モデルのR²スコアを計算しています。R²は1に近いほど、モデルがデータに適合していることを意味します。
線形回帰を使う上での注意点
- 線形性の仮定: 線形回帰は、説明変数と目的変数の間に線形関係があることを前提としています。非線形なデータには適していません。
- 外れ値の影響: 外れ値は、線形回帰モデルの結果に大きな影響を与える可能性があるため、データのクレンジングが必要です。
- 多重共線性: 説明変数間に高い相関があると、多重共線性が生じ、モデルの解釈が難しくなることがあります。
まとめ
線形回帰は、回帰分析の中でも基本的かつ非常に重要な手法です。データに線形関係がある場合に適用でき、予測モデルの構築やパターンの検出に役立ちます。Pythonのscikit-learn
を使うことで、簡単に線形回帰モデルを実装でき、モデルの性能を評価することも可能です。モデルの解釈やデータの前処理に注意を払いながら、効果的に活用しましょう。