2015-11-23 19 views
6

私の目標は、いくつかのデータを多項式関数に当てはめ、当てはめられたパラメータ値を含む実際の方程式を得ることです。多項式近似から方程式を抽出するにはどうすればよいですか?

私はthis exampleを私のデータに適用しました。結果は期待通りです。

import numpy as np 
import matplotlib.pyplot as plt 

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


x = np.array([0., 4., 9., 12., 16., 20., 24., 27.]) 
y = np.array([2.9,4.3,66.7,91.4,109.2,114.8,135.5,134.2]) 

x_plot = np.linspace(0, max(x), 100) 
# create matrix versions of these arrays 
X = x[:, np.newaxis] 
X_plot = x_plot[:, np.newaxis] 

plt.scatter(x, y, label="training points") 

for degree in np.arange(3, 6, 1): 
    model = make_pipeline(PolynomialFeatures(degree), Ridge()) 
    model.fit(X, y) 
    y_plot = model.predict(X_plot) 
    plt.plot(x_plot, y_plot, label="degree %d" % degree) 

plt.legend(loc='lower left') 

plt.show() 

enter image description here

は、しかし、私は今、それぞれのフィットの実際の方程式とフィットしたパラメータ値を抽出するために知っていない:

は、ここに私のコードです。実際に適合した式にはどこでアクセスできますか?

EDIT:

変数modelは、以下の属性を有する:

model.decision_function model.fit_transform  model.inverse_transform model.predict   model.predict_proba  model.set_params   model.transform   
model.fit    model.get_params   model.named_steps  model.predict_log_proba model.score    model.steps 

model.get_paramsは、所望のパラメータを格納しません。

答えて

5

線形モデルの係数は、モデルのintercept_coeff_属性に格納されます。

既知のモデルの正規化とフィードインをオフにすると、これをより明確に見ることができます。例えば

import numpy as np 
from sklearn.linear_model import Ridge 
from sklearn.pipeline import make_pipeline 
from sklearn.preprocessing import PolynomialFeatures 

x = 10 * np.random.random(100) 
y = -4 + 2 * x - 3 * x ** 2 

model = make_pipeline(PolynomialFeatures(2), Ridge(alpha=1E-8, fit_intercept=False)) 
model.fit(x[:, None], y) 
ridge = model.named_steps['ridge'] 
print(ridge.coef_) 
# array([-4., 2., -3.]) 

もデフォルトでPolynomialFeaturesが小さいのでalphaに対する冗長になりRidgeで切片を嵌合、バイアス項を含むことに留意されたいです。

+0

素晴らしいです。私の意見では、隠された種類。私はそれをupvoteし、後でそれを受け入れる。 – Cleb

+0

scikit-learnは統計学習用のライブラリではなく、機械学習用のライブラリであるため、隠されています。一般に、機械学習はモデルのパラメータではなく、モデルの出力に焦点を合わせます。この分裂の古典的な議論については、[統計モデリング:2つのカルチャー](https://projecteuclid.org/euclid.ss/1009213726)を参照してください。 – jakevdp

+0

リンクありがとうございます!この種のパラメータ推定にscikit-learnを使用するか、それとももっと適切なものがありますか?私は欲しいと思っています。負の値を避けるために、このモジュールをどの程度簡単に使用できるかはわかりません。 – Cleb

関連する問題