2017-10-05 4 views
-1

Je travaille sur deux fonctions. J'ai deux ensembles de données, par exemple [[x(1), y(1)], ..., [x(n), y(n)]], dataSet et testData.Comment adapter un polynôme à un ensemble de données?


createMatrix(D, S) qui renvoie une matrice de données, où D est le degré et S est un vecteur de nombres réels [s(1), s(2), ..., s(n)]. Je sais que numpy a une fonction appelée polyfit. Mais polyfit prend en trois variables, des conseils sur la façon dont je créerais la matrice?


polyFit(D), qui prend dans le polynôme de degré D et correspond à des ensembles de données en utilisant les moindres carrés linéaires. J'essaie de retourner le vecteur de poids et les erreurs. Je sais aussi qu'il ya lstsq dans numpy.linag que j'ai trouvé dans cette question: Fitting polynomials to data

Est-il possible d'utiliser cette question pour recréer ce que je suis en train d'essayer?


C'est ce que j'ai jusqu'à présent, mais il ne fonctionne pas. Ce que je ne comprends pas ici, c'est ce que S, le vecteur des nombres réels, a à faire avec ça? Je base beaucoup sur la question posée ci-dessus. Je ne suis pas sûr de savoir comment obtenir juste w, le vecteur de poids. Je vais coder le errors, donc c'est bien je me demandais si vous avez un conseil pour obtenir les vecteurs de poids eux-mêmes.

Répondre

1

Il semble que tout ce que fait createMatrix est de créer les deux vecteurs requis par polyfit. Ce que vous avez fonctionnera, mais, plus pythonique façon de le faire est

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 fournit une explication détaillée de l'idiome zip(*dataSet).)

Ceci renvoie un vecteur de coefficients que vous peut ensuite passer à quelque chose comme poly1d pour générer des résultats. (Des explications plus détaillées des deux polyfit et poly1d se trouve here.)

De toute évidence, vous aurez besoin de décider quelle valeur que vous voulez pour D. La réponse simple à cela est 1, 2 ou 3. Les polynômes d'ordre supérieur à cubique tendent à être plutôt instables et les erreurs intrinsèques rendent leur sortie plutôt insignifiante.

Il semble que vous essayiez de faire une sorte d'analyse de corrélation (c.-à-d. Y varie-t-il avec x et, si oui, dans quelle mesure?) Vous voudrez certainement utiliser linéaire (D = 1) régression pour ce type d'analyse. Vous pouvez essayer de faire un ajustement quadratique par les moindres carrés (D = 2) mais, encore une fois, les limites d'erreur sont probablement plus larges que vos hypothèses (par exemple, la normalité de la distribution).

+0

Merci, c'est parfait! Des conseils sur mon propre polyFit? –