ポリノミアル回帰の応用 | 回帰アルゴリズム | Pythonによる機械学習を学ぶ

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

ポリノミアル回帰の応用

ポリノミアル回帰(Polynomial Regression)は、線形回帰を拡張した回帰手法です。線形回帰が直線でデータの傾向を表すのに対し、ポリノミアル回帰では2次・3次などの高次の項を加えることで、曲線的な関係を表現できます。

非線形なデータに対して有効ですが、次数を高くしすぎると過学習が起こりやすくなるため、適切な次数の選択が重要です。

ポリノミアル回帰の仕組みを図で理解する

ポリノミアル回帰の仕組みを図で理解する

ポリノミアル回帰とは

ポリノミアル回帰は、説明変数の高次の項を使って、曲線的な関係をモデル化する手法です。

例えば、単純な線形回帰では表現しにくい放物線のようなデータでも、2次項を加えることでより自然にフィットさせることができます。

y = w0 + w1 * x + w2 * x^2 + ... + wn * x^n
意味
x 1次の特徴量
x^2 2次の特徴量
x^3 3次の特徴量
n 多項式の次数

線形回帰との違い

線形回帰は直線でデータを表現しますが、ポリノミアル回帰は曲線でデータを表現できます。

項目 線形回帰 ポリノミアル回帰
モデルの形 直線 曲線
特徴量 1次の項のみ 高次の項を追加
向いているデータ 直線的な関係 曲線的な関係
過学習のリスク 比較的低い 次数が高いと高くなる

次数によるモデルの違い

ポリノミアル回帰では、次数を上げるほど複雑な曲線を表現できます。

  • 1次: 線形回帰と同じ直線モデル
  • 2次: 放物線のような曲線を表現できる
  • 3次以上: より複雑な曲線を表現できる

ただし、次数を高くしすぎると訓練データに過剰に適合し、未知のデータに弱くなることがあります。

Pythonでのポリノミアル回帰の実装

Pythonでは、scikit-learnPolynomialFeaturesLinearRegressionを組み合わせて実装できます。

サンプルデータの作成

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.model_selection import train_test_split

# サンプルデータ作成
np.random.seed(0)

X = np.random.rand(100, 1) * 10
y = 2 * X**2 + 3 * X + np.random.randn(100, 1) * 10

# 訓練データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(
    X,
    y,
    test_size=0.2,
    random_state=42
)

このコードでは、2次関数にノイズを加えたサンプルデータを作成しています。

ポリノミアル特徴量の作成

# 2次のポリノミアル特徴量を作成
poly = PolynomialFeatures(degree=2)

X_train_poly = poly.fit_transform(X_train)
X_test_poly = poly.transform(X_test)

PolynomialFeaturesを使うことで、元の特徴量からx^2などの高次の特徴量を作成できます。

モデルの学習と予測

# 線形回帰モデルを適用
model = LinearRegression()

model.fit(X_train_poly, y_train)

# 予測
y_pred = model.predict(X_test_poly)

ポリノミアル回帰では、高次の特徴量を作成したうえで、通常の線形回帰モデルを適用します。

結果の可視化

plt.scatter(X_test, y_test, label='True values')
plt.scatter(X_test, y_pred, label='Predicted values')

plt.xlabel('X')
plt.ylabel('y')
plt.title('Polynomial Regression degree=2')
plt.legend()
plt.show()

グラフを確認することで、曲線的なデータに対してモデルがどの程度フィットしているかを把握できます。

モデルの性能評価

回帰モデルの性能は、平均二乗誤差(MSE)などを使って評価できます。

from sklearn.metrics import mean_squared_error

mse = mean_squared_error(y_test, y_pred)

print(f'ポリノミアル回帰のMSE: {mse:.3f}')

MSEが小さいほど、予測値と実際の値の差が小さいことを示します。

ポリノミアル回帰を使う場面

  • データが直線ではなく曲線的な傾向を持つ場合
  • 単純な線形回帰では誤差が大きい場合
  • 少数の特徴量で非線形な関係を表現したい場合
  • データの変化に山や谷がある場合

ポリノミアル回帰を使う際の注意点

  • 次数の選択: 次数が低すぎると表現力が不足し、高すぎると過学習しやすくなります。
  • 過学習: 高次の多項式は訓練データに細かく適合しすぎることがあります。
  • スケーリング: 高次の項では値が大きくなりやすいため、標準化が有効な場合があります。
  • 正則化: RidgeやLassoなどを組み合わせることで、過学習を抑えやすくなります。

次数と過学習の関係

次数 モデルの状態 特徴
低すぎる アンダーフィッティング データの傾向を十分に表現できない
適切 良いフィット データの傾向を自然に表現できる
高すぎる 過学習 訓練データに細かく適合しすぎる