如何将多项式拟合到数据集?

时间:2017-10-05 00:22:54

标签: python python-2.7 numpy matrix vector

我正在研究两个功能。我有两个数据集,例如[[x(1), y(1)], ..., [x(n), y(n)]]dataSettestData

createMatrix(D, S)返回数据矩阵,其中D是度,S是实数[s(1), s(2), ..., s(n)]的向量。

我知道numpy有一个名为polyfit的函数。但是polyfit接受了三个变量,关于我如何创建矩阵的任何建议?

polyFit(D),它接受​​度D的多项式,并使用线性最小二乘法将其拟合到数据集。我正在尝试返回权重向量和错误。我也知道我在lstsq中找到numpy.linag def createMatrix(D, S): x = [] y = [] for i in dataSet: x.append(i[0]) y.append(i[1]) polyfit(x, y, D) Fitting polynomials to data

是否可以使用该问题重新创建我正在尝试的内容?

这是我到目前为止所做的,但它无效。

def polyFit(D)

我不知道的是,实数的向量S与此有什么关系?

w

我在上面提到的问题上基于这个问题。我不确定如何获得Code jsfiddle :) ,即权重向量。我将编码errors,所以这很好,我只是想知道你是否对自己获得权重向量有任何建议。

1 个答案:

答案 0 :(得分:1)

看起来所有createMatrix正在创建polyfit所需的两个向量。你所拥有的将会起作用,但 pythonic 的方法就越多

def createMatrix(dataSet, D):
    D = 3  # set this to whatever degree you're trying
    x, y = zip(*dataSet)
    return polyfit(x, y, D)

This S/O link提供zip(*dataSet)成语的详细说明。)

这将返回一个系数向量,然后您可以将其传递给poly1d以生成结果。 (可以找到polyfitpoly1d的进一步说明here。)

显然,您需要确定D的所需值。对此的简单回答是1,2或3.高阶立方数的多项式往往相当不稳定,内在误差使得它们的输出相当无意义。

听起来你可能正在尝试进行某种相关性分析(即y是否随x变化,如果是这样,在多大程度上变化?)你几乎肯定会想要使用线性(D = 1)这种分析的回归。您可以尝试进行最小二乘拟合(D = 2),但同样,误差范围可能比您的假设(例如分布的正态性)更宽。