
398
5
章 機械学習
return self
def transform(self, X):
return self._gauss_basis(X[:, :, np.newaxis], self.centers_,
self.width_, axis=1)
gauss_model = make_pipeline(GaussianFeatures(20),
LinearRegression())
gauss_model.fit(x[:, np.newaxis], y)
yfit = gauss_model.predict(xfit[:, np.newaxis])
plt.scatter(x, y)
plt.plot(xfit, yfit)
plt.xlim(0, 10);
図5-46 カスタム変換器で計算したガウス基底関数への当てはめ
多項式基底関数は魔法でも何でもないことを明らかにするために、この例を示しました。データ
の生成プロセスに何らかの洞察があり、ある基底関数または他のものが適切であると考えられる場
合には、それらを使うことに問題はありません。
5.6.3
正則化
線形回帰に基底関数を導入することにより、モデルの柔軟性はさらに高まりますが、簡単に過剰
適合に陥ります(「5.3 ハイパーパラメータとモデルの検証」を参照してください)。例えば、ガウ
スの基底関数をあまり多く使用すると、結果はあまり良くなりません(図 5-47)。
In[10]: model = make_pipeline(GaussianFeatures(30), ...