Automatische Glättungsparameter mit make_smoothing_spline schief gehenPython

Python-Programme
Anonymous
 Automatische Glättungsparameter mit make_smoothing_spline schief gehen

Post by Anonymous »

bezieht sich auf diese Frage < /em>:

Ich möchte optimale Glättungsparameter für jede Art von Zeitreihen bestimmen, mit gemischten Einheiten, unterschiedlichen Längen, variierenden Frameraten wie Pixel oder Messbahnen, Radian- oder Gradwinkel, Geschwindigkeiten usw. Nicht so gut funktionieren. Beide Kurven sind nahezu identisch, aber das Glätten mit make_smoothing_spline liefert sehr unterschiedliche Ergebnisse, wenn LAM mit dem GCV -Kriterium automatisch bestimmt wird. Einer ist korrekt geglättet (grün), der andere ist vollständig abgeflacht (rot). scipy.interpolat._bsplines._compute_optimal_gcv_parameter (x, wir, y, w). Das Aufrufen der ersten Kurve ergibt lam = 4,9E-06 , während der andere 154,0 ergibt. Beachten Sie, dass ich ähnliche Ergebnisse mit viel dynamischeren und lauteren Zeitreihen hatte. < /P>
Sollte ich einfach keine normalisierten Daten verwenden? Aber dann habe ich das entgegengesetzte Problem, wobei einige Daten überhaupt nicht gefiltert werden. Ist es eine Art numerische Präzisionsprobleme? Irgendeine Idee, wie man damit umgeht?

Code: Select all

import pickle
import matplotlib.pyplot as plt
from scipy.interpolate import make_smoothing_spline
from scipy.interpolate._bsplines import _compute_optimal_gcv_parameter

# Retrieve data
with open('good_lam.pkl', 'rb') as f_good:
x_good, X_good, wE_good, y_good, w_good = pickle.load(f_good)
with open('bad_lam.pkl', 'rb') as f_bad:
x_bad, X_bad, wE_bad, y_bad, w_bad = pickle.load(f_bad)

# Compute make_smoothin_spline
spline_good = make_smoothing_spline(x_good, y_good, w=None, lam=None)
y_good_smooth = spline_good(x_good)
spline_bad = make_smoothing_spline(x_bad, y_bad, w=None, lam=None)
y_bad_smooth = spline_bad(x_bad)

# Compute lam
print('Good lam: ', _compute_optimal_gcv_parameter(X_good, wE_good, y_good, w_good))
print('Bad lam: ', _compute_optimal_gcv_parameter(X_bad, wE_bad, y_bad, w_bad))

# Plot input and smoothed data
plt.plot(y_good, label='good', color='green')
plt.plot(y_good_smooth, label='good_smoothed', color='palegreen')
plt.plot(y_bad, label='bad', color='red')
plt.plot(y_bad_smooth, label='bad_smoothed', color='lightpink')
plt.legend()
plt.show()

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post