2017-10-05 77 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的任何建議? –