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
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_)