scikit-learnで多項式回帰する方法

前回の記事で書いたのがNumPyで多項式回帰する方法だったので、今回はscikit-learnで行う方法を紹介します。
参考: NumPyで多項式回帰

NumPyの方法は、1変数の多項式に特化していたので、変数が1個しかない場合は非常に手軽に使えました。
ただ、実際は $x_0$ の多項式に加えて $x_1$, $x_2$ の変数も使って回帰したいとか、
$x_0, x_1$ を組み合わせた $x_0 * x_1$ みたいな項も入れたいとかいろんなケースがあると思います。
そのような場合は、scikit-learnの利用が検討できます。

と言っても、scikit-learnに多項式関数のモデルが実装されているわけではなく、
実際は前処理だけやってくれるモデルと、通常の線形回帰のモデルを組み合わせて使うことになります。
(このめんどくささが、1変数ならNumPyを推す所以です。)

多項式の特徴量生成には、 sklearn.preprocessing.PolynomialFeatures を使います。

試しに、3変数のデータ4セットに対して、2次までの項を生成してみたコードが次です。


import numpy as np
from sklearn.preprocessing import PolynomialFeatures

X = np.arange(12).reshape(4, 3)
print(X)
"""
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
"""
poly = PolynomialFeatures(2)  # 次数2を指定
X_poly = poly.fit_transform(X)
print(X_poly)
"""
[[  1.   0.   1.   2.   0.   0.   0.   1.   2.   4.]
 [  1.   3.   4.   5.   9.  12.  15.  16.  20.  25.]
 [  1.   6.   7.   8.  36.  42.  48.  49.  56.  64.]
 [  1.   9.  10.  11.  81.  90.  99. 100. 110. 121.]]
 """

元のデータを$x_0, x_1, x_2$ とすると、
定数$1$,$x_0, x_1, x_2, x_0^2, x_0x_1, x_0x_2, x_1^2, x_1x_2, x_2^2$ のデータが生成されているのがわかります。

何番目のデータがどういう演算で生成された項なのか、という情報は、powers_ という属性に保有されています。


print(poly.powers_)
"""
[[0 0 0]
 [1 0 0]
 [0 1 0]
 [0 0 1]
 [2 0 0]
 [1 1 0]
 [1 0 1]
 [0 2 0]
 [0 1 1]
 [0 0 2]]
"""

定数1の項はいらないな、という時は、 include_biasにFalseを指定して、
PolynomialFeatures(2, include_bias=False)とすれば出てきません。

あとは、この生成されたデータを使って回帰分析を行えば、 scikit-learn を用いた多項式回帰の完成です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です