在Python中使用scikit-learn
,我试图将二次多项式曲线拟合到一组数据中,以便模型的形式为y = a2x^2 + a1x + a0
和{{1}系数将由模型提供。
我不知道如何使用该软件包拟合多项式曲线,并且似乎很少有关于如何做到这一点的明确参考(我已经找了一段时间)。我看过this question on doing something similar with NumPy,还有this question which does a more complicated fit than I require。
希望一个好的解决方案可以这样解决(样本改编自我使用的线性拟合代码):
an
我认为x = my_x_data.reshape(len(profile), 1)
y = my_y_data.reshape(len(profile), 1)
regression = linear_model.LinearRegression(degree=2) # or PolynomialRegression(degree=2) or QuadraticRegression()
regression.fit(x, y)
会有这样的设施,因为它很常见(例如,在scikit-learn
中,拟合的公式可以在代码中提供,并且它们对于那种用例来说应该是可以互换的。)
有什么好方法可以做到这一点,或者我在哪里可以找到有关如何正确执行此操作的信息?
答案 0 :(得分:9)
可能重复:https://stats.stackexchange.com/questions/58739/polynomial-regression-using-scikit-learn。
出于某些原因,使用scikit-learn进行此操作是否至关重要?使用numpy可以非常轻松地执行您想要的操作:
z = np.poly1d(np.polyfit(x,y,2))
之后z(x)
返回x
的适合值。
scikit-learn解决方案几乎肯定只是一个围绕相同代码的包装器。
答案 1 :(得分:6)
我相信萨尔瓦多·达利here的回答将回答你的问题。在scikit-learn中,从数据构造多项式特征,然后对该扩展数据集运行线性回归就足够了。如果您有兴趣阅读有关它的文档,可以找到更多信息here。为方便起见,我将发布Salvador Dali提供的示例代码:
from sklearn.preprocessing import PolynomialFeatures
from sklearn import linear_model
X = [[0.44, 0.68], [0.99, 0.23]]
vector = [109.85, 155.72]
predict= [0.49, 0.18]
poly = PolynomialFeatures(degree=2)
X_ = poly.fit_transform(X)
predict_ = poly.fit_transform(predict)
clf = linear_model.LinearRegression()
clf.fit(X_, vector)
print clf.predict(predict_)
答案 2 :(得分:0)
AGML的答案可以包装在scikit-learn-compatible类中,如下所示:
class PolyEstimator:
def __init__(self, degree=2):
self.degree = degree
def fit(self, x, y):
self.z = np.poly1d(np.polyfit(x.flatten().tolist(), y, self.degree))
def predict(self, x):
return self.z(x.flatten().tolist())