Betrachten Sie das folgende Beispiel verwenden:die Glätte einer Spline-Finding scipy
import numpy as np
import math
import matplotlib.pyplot as plt
from scipy import interpolate
xs = np.linspace(1,10,500)
ys = [0.92 * x ** 2.3 + 0.0132 * x ** 4 + 0.0743 * (x - 9) ** 3 - 4 * (x -3) ** 2 + 80 * math.sin(math.sin(x)) + 10 * math.sin(x*5) + 1.2* np.random.normal(-4,4,1) for x in xs]
ys[200] = ys[200] + 130
ys[201] = ys[201] + 135
ys[202] = ys[202] + 129
ys[203] = ys[203] + 128
ys[204] = ys[204] + 131
ys[205] = ys[205] + 130
ys[206] = ys[206] + 129
ys[207] = ys[207] + 129
ys[208] = ys[208] + 128
ys[209] = ys[209] + 130
Wenn ich xs
und ys
an diesem Punkt plotten, erzeugt es ein schönes Diagramm:
Jetzt verwende ich scipy.interpolate.splrep
um eine Spline-Kurve an diese Daten anzupassen. Ich habe zwei verschiedene Splines verwendet zwei verschiedene Segmente der Daten zu passen:
tck = interpolate.splrep(xs[0:199], ys[0:199], s = 1000)
ynew2 = interpolate.splev(xs[0:199], tck, der = 0)
und:
tck = interpolate.splrep(xs[210:500], ys[210:500], s = 9000)
ynew3 = interpolate.splev(xs[210:500], tck, der = 0)
Jetzt möchte ich die Qualität der programmatisch erkennen die Passform. Die Anpassung sollte weder zu geradlinig sein - d. H. Merkmale beibehalten, noch sollte sie die lautstarken Variationen als Merkmale "überdecken".
Ich plane, einen Spitzenzähler zu verwenden, der einem ANN zugeführt wird.
jedoch an dieser Stelle, meine Frage ist:
- Hat scipy/numpy eine integrierte Funktion, wo ich in der Ausgabe von
splrep
ernähren kann, und es wird die Minima oder Maxima berechnen und die Dichte von Maxima/Minima in einem bestimmten Intervall?
Hinweis:
Ich bin mir der R**2
Wert, ich suche eine weitere Maßnahme zu erkennen Erhaltung der Funktionen zu finden.