多項式回帰

背景

(Shalev-Shwartz and Ben-David 2009) の Model Selection and Validatin の図を再現したい。つまり、 Figure: 1 のようなデータを多項式で回帰したい。

example.png
Figure 1: 多項式のようなデータ

コード

Python の scikit-learn で実現する。概略は入力データを指定次元分の単項式に変換し、線形回帰で実現する。

使用するのは主に2つの機能である。

  1. sklearn.preprocessing.PolynomialFeatures — scikit-learn 1.1.2 documentation
  2. sklearn.linear_model.LinearRegression — scikit-learn 1.1.2 documentation

まず、特徴量を PolynomialFeatures で変換する。変換元のデータが一次元のはずなので、形状に注意。

polynomial_features= PolynomialFeatures(degree=3)
xs_poly = polynomial_features.fit_transform(xs.reshape((30,1)))

そして、線形回帰を使用する。

model = LinearRegression()
model.fit(xs_poly, ys)
ys_pred = model.predict(xs_poly)

Figure: 2 に作成された多項式回帰のモデルの予測結果をプロットした。

deg2.png
Figure 2: 訓練データと3次多項式回帰

参考文献

Shalev-Shwartz, Shai, and Shai Ben-David. 2009. Understanding Machine Learning. Cambridge University Press. https://doi.org/10.1017/cbo9781107298019.