Ich habe eine Kraft-Weg Kurve mit einigen Ausreißern. Das heißt ich habe eine Liniengraphen der an manchen Stellen von einem hohen Wert plötzlich auf Null runterläuft und im Anschluss dann gleich wieder auf den normalen bzw erwarteten Wert hochschießt. Bevor ich die Kurve in ein ML Algorithmus einspeisen, kann muss ich diese Ausreißer entfernen.
Mir ist aber leider keine Funktion aus Sklearn oder Tensorflow bekannt mit der ich das anstellen könnte.
Kann mir bitte jemand weiterhelfen.
Vielen Dank im Voraus!
ausreißer einer Prozesskurve entfernen
-
- User
- Beiträge: 92
- Registriert: Mittwoch 13. April 2022, 17:40
Das habe ich. Die Methoden mit Pandas (anomalie detection mit querentil, zscores, etc) funktioniert bei meinem Dataset nicht. Ob eine Messung eine Anomalie ist oder nicht hängt bei Prozesskurven von den benachbarten Datapoints ab.
Bsp.: Null wäre zu Beginn des Prozesses, wobei keine Kraft wirkt, keine Anomalie. Wenn aber eine Kraft von 10kN wirkt und man zunächst 10kN misst, aber dann plötzlich 0kN gemessen werden, dann handelt es sich bei der Null um eine Anomalie.
Ich habe dazu 2 unsupervised ML von sklearn gefunden: sklearn.ensemble.IsolationForest und sklearn.neighbors.LocalOutlierFactor
Welche davon besser geeignet ist muss ich noch schauen.
Bsp.: Null wäre zu Beginn des Prozesses, wobei keine Kraft wirkt, keine Anomalie. Wenn aber eine Kraft von 10kN wirkt und man zunächst 10kN misst, aber dann plötzlich 0kN gemessen werden, dann handelt es sich bei der Null um eine Anomalie.
Ich habe dazu 2 unsupervised ML von sklearn gefunden: sklearn.ensemble.IsolationForest und sklearn.neighbors.LocalOutlierFactor
Welche davon besser geeignet ist muss ich noch schauen.
Lies dir mal diesen Artikel durch, wie man fehlende Werte noch behandeln kann, außer sie einfach zu entfernen.
Siehe Absatz "Fill Missing Values" , "2. bfill, ffill"
Besonders empfehlenswert wenn der Nullwert einen Zeitstempel hat und durch entfernen eine Lücke in einer Zeitreihe entstehen würde.
https://towardsdatascience.com/data-cle ... 8570c446ec
Siehe Absatz "Fill Missing Values" , "2. bfill, ffill"
Besonders empfehlenswert wenn der Nullwert einen Zeitstempel hat und durch entfernen eine Lücke in einer Zeitreihe entstehen würde.
https://towardsdatascience.com/data-cle ... 8570c446ec
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
-
- User
- Beiträge: 92
- Registriert: Mittwoch 13. April 2022, 17:40
Vielen Dank an beide.
(1) Ich habe die Ausreißer mit LocalOutlierFactor rausgesucht (mit IsolationForest habe ich nicht die gewünschten Ergebnisse erzielen können).
(2) Im Anschluss habe ich die Ausreißer mit np.nan gleichgesetzt.
(3)Und zum Schluss die np.nan werte mit der fillna befüllt.
Der Code dazu:
Ich habe für die 5 Zeilen fast einen ganzen tag gebraucht
ist das normal?
(1) Ich habe die Ausreißer mit LocalOutlierFactor rausgesucht (mit IsolationForest habe ich nicht die gewünschten Ergebnisse erzielen können).
(2) Im Anschluss habe ich die Ausreißer mit np.nan gleichgesetzt.
(3)Und zum Schluss die np.nan werte mit der fillna befüllt.
Der Code dazu:
Code: Alles auswählen
# 1) Ausreißer finden
from sklearn.neighbors import LocalOutlierFactor
outlier_detection_model = LocalOutlierFactor(n_neighbors = 105)
outlier_label = outlier_detection_model.fit_predict(np.array(y_achse).reshape(-1,1))
# 2) Ausreißer mit np.nan gleichsetzen
y_achse[outlier_label ==-1] =np.nan
# 3) Ausreißer bzw. NaN ersetzen
y_achse = y_achse.fillna(method = "bfill")

ist das normal?