Aidemy 2020/11/10
Hallo, es ist ja! Ich bin eine knusprige Literaturschule, aber ich war an den Möglichkeiten der KI interessiert, also ging ich zur KI-Fachschule "Aidemy", um zu studieren. Ich möchte das hier gewonnene Wissen mit Ihnen teilen und habe es in Qiita zusammengefasst. Ich freue mich sehr, dass viele Menschen den vorherigen zusammenfassenden Artikel gelesen haben. Vielen Dank! Dies ist der dritte Beitrag zur Erkennung von Anomalien. Freut mich, dich kennenzulernen.
Was diesmal zu lernen ・ Änderungserkennung mit der kumulativen Summenmethode ・ Erkennung abnormaler Teile durch Näherungsmethode ・ Singularspektrum-Konvertierungsmethode
-__ Die kumulative Summenmethode __ ist eine Methode zur __ "Änderungserkennung" __, die __ Änderungspunkt __ erkennt (siehe Kapitel 1). Im Gegensatz zur Erkennung von Ausreißern verursacht die Änderungserkennung __ "kontinuierliche Abnormalität" __, daher wird die kumulative Summenmethode verwendet, die dies erkennen kann. -In der kumulativen Summenmethode wird der "abnormale Zustand (Änderungsgrad)" __ entlang der __ Zeit gezählt, und wenn die Zählung (kumulative Summe) den Schwellenwert überschreitet, wird festgestellt, dass er abnormal ist. Mit anderen Worten kann gesagt werden, dass dieses Verfahren geeignet ist, wenn eine Abnormalität eines bestimmten Wertes in Zeitreihendaten erfasst wird.
-Der Fluss der kumulativen Summenmethode (wenn die Änderung positiv ist, dh wenn es abnormal ist, zu steigen) ist wie folgt. (1) Definieren Sie den Grad der Änderung __, indem Sie eine Richtlinie für normale Zeiten und eine Richtlinie für die Aufwärtsbewegung angeben. (2) Finden Sie die __upper kumulative Summe des Änderungsgrades __ ③ Wenn der Schwellenwert überschritten wird, wird er als abnormal beurteilt.
-__ Änderungsgrad __ ist ein Wert, der angibt, wie stark sich die Daten in einen abnormalen Zustand geändert haben. ・ Hier wird der Änderungsgrad definiert, aber dafür werden __ "Wert, der genommen werden muss, wenn normal (μ)" und "Aufwärtswert, der als abnormal beurteilt werden soll (ν +)" __ im Voraus festgelegt (vergangene Fälle). Müssen bekommen (analysieren).
Finden Sie auch __ "Standardabweichung (σ)" __ aus den Daten. __ Erhalten von "np.std ()" __.
・ Einmal berechnet, kann der Änderungsgrad (a + (t)) zum Zeitpunkt t wie folgt berechnet werden.
Als Ergebnis wird, wenn die Daten normal sind, der Änderungsgrad negativ, und wenn die Daten abnormal sind, wird er positiv, so dass es möglich ist, mit der kumulierten Summe zu verarbeiten.
Auch diesmal haben wir den Zeitpunkt berücksichtigt, zu dem die Änderung positiv war, aber die gleiche Berechnung kann durchgeführt werden, wenn die Änderung negativ ist.
・ Code (Berechnen Sie den Änderungsgrad als 10 für Normal und 14 für Aufwärts)
·Ergebnis
・ Da der Änderungsgrad im vorherigen Abschnitt berechnet wurde, wird er als nächstes akkumuliert. In dem im vorherigen Abschnitt definierten Änderungsgrad nimmt es einen negativen Wert an, wenn es normal ist, aber wenn es akkumuliert, sollte es __ sein, wenn es normal ist __. Mit anderen Worten, der Änderungsgrad steigt nur an, wenn __ abnormal __ ist. Dies ist die __upper kumulative Summe __. -Die Berechnung der oberen kumulativen Summe erfolgt, indem der Änderungsgrad nacheinander mit for loop herausgenommen und addiert wird. Insbesondere ist es wie folgt.
・ Erläuterung des obigen Codes
・ Der Graph der oberen kumulativen Summe ist wie folgt.
np.arange(score_cumsum.size)[pred==1][0]
・ "Np.arange begrenzt den Bereich auf 0 auf die Größe der kumulierten Summe und bezieht sich auf jede einzelne, und __ [pred == 1] __ extrahiert den Teil, der zum ersten Mal als abnormal beurteilt wird, und __ [0 ] __ um den Index abzurufen "ist fertig.
・ Folgendes habe ich gegen die Anomalie getan.
·Ergebnis
-Dieses Mal werden die Zeitreihendaten durch __ "Ausreißererkennung" __ erkannt. Bei der kumulativen Summenmethode bis zum vorherigen Abschnitt mussten Sie den Schwellenwert und die Parameter für die Berechnung des Änderungspunkts selbst vorbereiten, was den Nachteil hatte, dass __ nicht sehr praktisch __, aber mit der __near-Methode __ Dieses Problem kann also gelöst werden. ・ Die Ausreißererkennung ist nicht zum Erkennen von Änderungen in Zeitreihendaten geeignet, liegt jedoch daran, dass __kontinuierliche Daten wie Zeitreihendaten nicht beobachtet werden können. Bei dieser Nachbarschaftsmethode wird dies durch __Entwickeln __ ermöglicht, um ein solches Problem zu lösen. Insbesondere ist es möglich, den Zeiteffekt zu berücksichtigen, indem alle Daten als M benachbarte Daten gruppiert werden, dh in eine Sammlung von M-dimensionalen Vektoren umgewandelt werden.
-Der Code lautet wie folgt. Teilen Sie nach dem Konvertieren der Daten von einer Dimension in zwei Dimensionen die Daten für die Anzahl der Folienfenster __M __ und erstellen Sie sie durch __extrahieren __.
・ Code (konvertiert 550 Daten x in Teilzeitreihendaten)
-Wenn das Obige ausgeführt wird, beträgt die Länge der Teilzeitreihendaten __ "((Anzahl der Daten - M + 1), M)" __.
・ Berechnen Sie nach dem Erstellen von Teilzeitreihendaten den Grad der Abnormalität. Dieses Mal verwenden wir __ "Methode des nächsten Nachbarn" __ mit der Entfernung zum nächsten Nachbarn als Grad der Anomalie. Einzelheiten finden Sie in Kapitel 2. Verwenden Sie KNeiborsClassifier, um die Entfernung zum nächsten __ zu berechnen. -Setze __ "n_neighbors" __ diesmal auf _2 statt 1. Dies liegt daran, dass die nächste Nachbarschaft von Daten als __ "die Daten selbst" __ behandelt wird. Daher ist die nächstgelegene Nähe __ "Entfernung der zweitnächsten Daten" __. -Daher kann __ "clf.kneighbors ()" __ verwendet werden, um die Nähe der einzelnen Daten zu berechnen, und __ "dist [:, 1]" __ kann verwendet werden, um die Entfernung der zweitnächsten Daten zu erhalten. ..
·Code
・ Stellen Sie als Nächstes den Schwellenwert ein. Da diese Methode die Verteilung von Daten nicht definiert, legen Sie den Schwellenwert so fest, dass er mit dem SVM der Klasse ___1 identisch ist.
・ Code (wenn die oberen 30% der Teilungspunkt sind)![Screenshot 2020-11-06 14.52.20.png](https: //qiita-image-store.s3.ap-northeast-1.amazonaws. com / 0/698700 / 467fc634-211b-a03c-5d62-f8989f0edf3c.png)
・ Durch die Trennung von Vergangenheit und Gegenwart von den Teilzeitreihendaten bis zum vorherigen Abschnitt ist es möglich geworden, fortgeschrittenere Verteilungen zu berücksichtigen. Die __ "Methode zur Umwandlung des singulären Spektrums" , die wir dieses Mal lernen werden, findet zwei Dinge: __ "einen Vektor, der die aktuellen Daten darstellt, und" __ "Daten, die die vergangenen Daten darstellen", indem diese erweiterte Verteilung definiert wird. Dies ist eine Methode zum Erkennen von Anomalien, indem die Differenz zwischen beiden als Änderungspunkt verwendet wird. ・ Der Ablauf der Methode zur Umwandlung des singulären Spektrums ist wie folgt. (1) Geben Sie __ Fensterbreite M, Anzahl der Zeilen in der Verlaufsmatrix n, Anzahl der Spalten in der Testmatrix k und Verzögerung L für Zeitreihendaten an. ② Konvertieren Sie Daten in __Teilzeitreihendaten der Fensterbreite M __ ③ Erstellen Sie __history matrix __ und __test matrix __ ④ Die Verlaufsmatrix und die Testmatrix werden durch __ Singularwert __ zerlegt, und jede __ linke Singularvektormatrix __ wird erhalten. ⑤ _ Berechnen Sie den Änderungsgrad aus der Differenz zwischen den beiden Matrizen __
-Die oben angezeigte __ "Verlaufsmatrix" __ ist "eine Sammlung von n Daten aus der vorherigen __Zeit __". Außerdem ist __ "Testmatrix" __ "ein Array von Daten __ von der aktuellen Zeit bis __L (Verzögerung) und bis zu k Stück vorher". Siehe unten visuell.
・ Für ① wird diesmal __ "M = 50, n = 25, k = 25, L = 13" __ verwendet. -Für (2) erfolgt die Konvertierung in partielle Zeitreihendaten auf die gleiche Weise wie bei __ "Erkennung abnormaler Teile durch die Nachbarschaftsmethode" __. ・ Für ③ lesen Sie im Folgenden, wie Sie eine Verlaufsmatrix und eine Testmatrix aus den in ② erstellten Teilzeitreihendaten (X_pts) erstellen.
-Code, der dies getan hat ([0] Teil extrahiert nur "U")
・ Ermitteln Sie den Unterschied __ der beiden im vorherigen Abschnitt erstellten __ linken Singularvektoren. Die Differenz wird durch das innere Produkt von vectors berechnet. Diesmal wird die Menge der Vektoren, dh das innere Produkt der Matrizen, mit __ "np.matmul ()" __ berechnet, und der Abstand wird mit __ "np.linalg.norm ()" __ berechnet. ・ Wenn dieser Abstand normal ist, kann der Änderungsgrad mit __ "1-Norm" __ berechnet werden.
-Der Code, der dies tut, ist wie folgt.
・ Ergebnis![Screenshot 2020-11-07 9.55.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/2084bdb3-25c6-142a- 2189-2e54669d77e8.png)
・ Ergänzende Informationen zum obigen Code -__ "Get_score" __ erstellt eine Funktion, um den Grad der Änderung selbst zu ermitteln. In __np.matmul () __ muss die history-Matrix wie __ "x.T" __ transponiert werden. - "Score" __ übergibt U_hist und U_test zusammen an den obigen get_score. Die __für Notation __ ist, weil __ der Änderungsgrad __ zu jedem Zeitpunkt berechnet wird.
-Es gibt eine "kumulative Summenmethode" als Methode zum Erkennen von Änderungspunkten mit einer Zeitreihe. Dies ist eine Methode zum Akkumulieren (Hinzufügen) des Änderungsgrades und zum Bestimmen einer Abnormalität, wenn der Änderungsgrad den Schwellenwert überschreitet. Dieser Schwellenwert und diese Berechnungsparameter müssen jedoch selbst berechnet werden, was nicht praktikabel ist. -Die Methode mit der "Nachbarschaftsmethode" löst dieses Problem. Diese Methode bestimmt durch Erkennen von Ausreißern, ob Zeitreihendaten abnormal sind oder nicht. Ursprünglich sind die Ausreißererkennung und die Zeitreihendaten inkonsistent, dies wird jedoch durch Aufteilen der benachbarten Daten in M Teile gelöst.
Diese Zeit ist vorbei. Vielen Dank für das Lesen bis zum Ende.
Recommended Posts