2015年6月28日日曜日

Pythonで多項式回帰

pythonで最小二乗法で係数を求めるのには関数を定義しなければいけないが、高次の多項式だとクロスタームやらいっぱい出てきて書くのが大変だ。

scikit-learnのPolynomialFeaturesはそこを自動で計算してくれる。
例えば2次の場合degree=2とすれば、

[x1, y1] -> [x1**2, x1*y1, y1**2, x1, y1]

を計算してくれる。

それを使って多項式近似をする。
以下メモ。
Pipelineについては
http://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html

from sklearn.linear_model import Ridge
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline

#original function
def f(x):
    return 2*x[0]**2 + 3*x[0]*x[1] + 4*x[1]**2 + 2*x[0] + 3*x[1] + 4

#observed data
xx, yy = np.meshgrid(np.linspace(-2, 2, 10), np.linspace(-2, 2, 10))
X = np.vstack((xx.reshape(-1), yy.reshape(-1))).T
y = list(map(f, X))

#fit the data
degree = 2
model = make_pipeline(PolynomialFeatures(degree), Ridge())
model.fit(X, y)

#accessing to the coeffs
#(model is a Pipeline.)
print(model.steps[1][1].coef_)


0 件のコメント:

コメントを投稿