簡體   English   中英

如何將多項式擬合到數據集?

[英]How do you fit a polynomial to a data set?

我正在處理兩個功能。 我有兩個數據集,例如[[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.linagFitting 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 ,即權重向量。 我將對錯誤進行編碼,所以沒關系,我只是想知道您是否對獲取權重向量本身有任何建議。

看起來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)

此 S/O 鏈接提供了zip(*dataSet)習語的詳細說明。)

這將返回一個系數向量,然后您可以將其傳遞給poly1d類的poly1d以生成結果。 (可以在此處找到對polyfitpoly1d進一步解釋。)

顯然,您需要決定D需要什么值。 對此的簡單答案是 1、2 或 3。比三次多項式高階的多項式往往相當不穩定,其內在誤差使它們的輸出相當無意義。

聽起來您可能正在嘗試進行某種相關分析(即,y 是否隨 x 變化,如果是,變化到什么程度?)您幾乎肯定只想為此使用線性 (D = 1) 回歸分析類型。 您可以嘗試進行最小二乘二次擬合 (D = 2),但同樣,誤差范圍可能比您的假設(例如分布正態性)所能容忍的范圍更廣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM