Regressionskurven
Verfasst: Samstag 10. Dezember 2011, 21:35
Hallo,
ich benötige etwas Austausch zu einem mathematischen Problem, da ich selbst noch nicht so genau weiß wonach ich suchen muss:
Mein Ziel ist es mit einem Programm ASCII-Daten einzulesen, um durch diese eine Regressionskurve zu legen. Nun habe ich bereits eifrig GOOGLE benutzt, um die Worte "Regressionskurve + Python" zu suchen. Dabei stieß ich immer auf lineare oder polynomische Ansätze. Letzteren habe ich auch einmal auf ein Beispiel angewendet:
Bitte nicht darüber wundern, dass die X-Werte absteigend sortiert sind. Ich habe mir ein kleines Programm geschrieben, welches eine kub. Kurve durch diese Daten legt. Mit dem Ergebnis bin ich nicht zufrieden, denn die Kurve wird unzureichend wiedergegeben. Das liegt insbesondere an dem Maximum, welches aus dem Polynom 2. Grades
herrührt.
Gibt es noch andere Ansätze, um Regressionskurven zu bilden? Wonach müsste ich da suchen? Gibt es diese dann auch bereits in Python verfügbar? Ich möchte eigentlich nicht komplett einen neuen Algorithmus zum Kurven-Fitten schreiben!
Vielen Dank.
ich benötige etwas Austausch zu einem mathematischen Problem, da ich selbst noch nicht so genau weiß wonach ich suchen muss:
Mein Ziel ist es mit einem Programm ASCII-Daten einzulesen, um durch diese eine Regressionskurve zu legen. Nun habe ich bereits eifrig GOOGLE benutzt, um die Worte "Regressionskurve + Python" zu suchen. Dabei stieß ich immer auf lineare oder polynomische Ansätze. Letzteren habe ich auch einmal auf ein Beispiel angewendet:
Code: Alles auswählen
X Y
2.57 2.50
2.5 2.8
2.0 3.3
1.5 3.45
1.0 3.50
herrührt.
Code: Alles auswählen
from math import *
import scipy, pylab
import scipy.optimize
import numpy as np
from numpy import linspace, polyfit, polyval
import matplotlib.pyplot as plt
import os
DataX = [1, 1.5, 2, 2.5, 2.57]
DataY = [3.5, 3.45, 3.3, 2.8, 2.5]
NOfPoints = 100
XNew = linspace(float(DataX[0]), float(DataX[-1]), NOfPoints)
PolyCoeffs = np.polyfit(DataX, DataY, 2)
Polynom = np.poly1d(np.polyfit(DataX, DataY, 2))
x = list()
y = list()
for i in range(NOfPoints):
xval = XNew[i]
x.append( xval )
y.append( Polynom(xval) )
plt.plot(DataX, DataY, '.-', x, y, '--')
plt.show()
Vielen Dank.