如何从多项式拟合中提取方程?
How to extract equation from a polynomial fit?
我的目标是将一些数据拟合到多项式函数中,并获得包含拟合参数值的实际方程。
我对我的数据进行了 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()
但是,我现在不知道从哪里提取实际方程和各个拟合的拟合参数值。我在哪里可以访问实际的拟合方程?
编辑:
变量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
没有存储需要的参数。
线性模型的系数存储在模型的 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
默认包含偏置项,因此在 Ridge
中拟合截距对于小 alpha
.
是多余的
我的目标是将一些数据拟合到多项式函数中,并获得包含拟合参数值的实际方程。
我对我的数据进行了 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()
但是,我现在不知道从哪里提取实际方程和各个拟合的拟合参数值。我在哪里可以访问实际的拟合方程?
编辑:
变量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
没有存储需要的参数。
线性模型的系数存储在模型的 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
默认包含偏置项,因此在 Ridge
中拟合截距对于小 alpha
.