【问题标题】:How do you fit a polynomial to a data set?如何将多项式拟合到数据集?
【发布时间】:2018-03-16 12:15:33
【问题描述】:

我正在研究两个函数。我有两个数据集,例如[[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 中有lstsqFitting 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 的代码,所以很好,我只是想知道您是否对自己获取权重向量有任何建议。

【问题讨论】:

    标签: python python-2.7 numpy matrix vector


    【解决方案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),但同样,误差范围可能比您的假设(例如分布的正态性)所能容忍的要宽。

    【讨论】:

    • 谢谢,太好了!对我自己的 polyFit 有什么建议吗?
    猜你喜欢
    • 2010-09-27
    • 2020-01-24
    • 2020-03-18
    • 2018-08-18
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 2015-12-16
    相关资源
    最近更新 更多