如何使用scikit-learn对数据拟合多项式曲线



问题背景

使用Python的scikit-learn,我试图拟合一组数据的二次多项式曲线,使模型的形式为y = a2x^2 + a1x + a0, an系数将由模型提供。

<标题>

我不知道如何使用那个包来拟合多项式曲线,而且似乎很少有关于如何做到这一点的明确参考(我已经找了一段时间)。我在用NumPy做类似的事情时看到过这个问题,而且这个问题比我需要的更复杂。

一个好的解决方案应该是什么样的

希望,一个好的解决方案会像这样(样本改编自线性拟合代码,我正在使用):

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会有这样的工具,因为它很常见(例如,在R中,适合的公式可以在代码中提供,并且它们应该能够在那种用例中非常可互换)。

<标题>:

做这件事的好方法是什么,或者我在哪里可以找到如何正确做这件事的信息?

可能的副本: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的解决方案几乎肯定是对相同代码的简单包装。

我相信Salvador Dali在这里的答案会回答你的问题。在scikit-learn中,从数据构造多项式特征,然后在扩展的数据集上运行线性回归就足够了。如果您有兴趣阅读有关它的一些文档,您可以在这里找到更多信息。为了方便起见,我将发布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_)

AGML的答案可以像这样封装在scikit-learn兼容的类中:

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

相关内容

  • 没有找到相关文章

最新更新