2017-10-05 38 views
-1

我正在处理两个功能。我有两个数据集,例如[[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度的多项式,将其适配到使用线性最小二乘数据集。我试图返回权重向量和错误。我也知道在numpy.linag中有lstsq,我在这个问题中发现:Fitting polynomials to data

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


这是我到目前为止,但它不工作。

def createMatrix(D, S): 
    x = [] 
    y = [] 
    for i in dataSet: 
    x.append(i[0]) 
    y.append(i[1]) 
    polyfit(x, y, D) 

我在这里没有得到的是实数向量S与这个有什么关系?

def polyFit(D) 

我基于上面提到的问题上的很多这个。我不确定如何得到w,但权重向量。我会编码errors,所以这很好,我只是想知道你是否有任何建议让自己获得权重向量。

回答

1

它看起来像所有createMatrix正在做的是创建polyfit所需的两个向量。你有什么工作,但是,更多的Python的的方式来做到这一点是

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.高于立方的多项式趋于相当不稳定,并且内在错误使其输出变得毫无意义。

这听起来像你可能会试图做某种相关性分析(即,是否随着x而变化,如果是这样,到什么程度?)你几乎肯定会想使用线性(D = 1 )回归这种类型的分析。你可以尝试做一个最小二乘二次拟合(D = 2),但同样的,误差范围可能比你的假设更宽(例如分布的正态性)可以容忍。

+0

谢谢,这很完美!有关我自己的polyFit的任何建议? –