[PYTHON] Einführung in die Anomalieerkennung 2 Ausreißererkennung

Aidemy 2020/11/10

Einführung

Hallo, es ist ja! Ich bin eine knusprige Literaturschule, aber ich war an den Möglichkeiten der KI interessiert, also ging ich zur AI-spezialisierten Schule "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 zweite Beitrag in der Einführung zur Erkennung von Anomalien. Freut mich, dich kennenzulernen.

Was diesmal zu lernen ・ Abnormalitätserkennung mit der k-Near-Methode ・ Erkennung von Abnormalitäten durch 1-Klassen-SVM ・ Abnormalitätserkennung für Richtungsdaten

k Nachbarschaftsmethode

Was ist die k-Nachbarschaftsmethode?

(Ich habe die k-Near-Methode schon einmal gelernt, aber dieses Mal werde ich sie gemäß der Anomalieerkennung wieder lernen.) -Die __k Nachbarschaftsmethode __ bedeutet "Berechnen Sie den Grad der Anomalie aus dem Verhältnis anomaler Daten zu __k Daten, die nahe an den zu unterscheidenden Daten liegen". Wie bei der Hotelmethode wird die Frage, ob sie abnormal ist oder nicht, davon bestimmt, ob sie den Schwellenwert __ überschreitet oder nicht. -Die k-Nachbarschaftsmethode, bei der k zu diesem Zeitpunkt 1 ist, wird __ "Methode des nächsten Nachbarn" __ genannt. k = 1 bedeutet __, dass nur auf die nächsten Daten verwiesen wird __. -In der vorherigen Hotelmethode gab es Fälle, in denen die Voraussetzungen "die Daten stammten aus einer einzigen Normalverteilung" und "die Daten enthielten fast keine Ausreißer" waren. Es gibt jedoch keine solche Einschränkung bei dieser __k Nachbarschaftsmethode __. ・ Die k-Near-Methode ist in der Abbildung sehr leicht zu verstehen. Wenn beurteilt wird, ob der grüne Punkt in der folgenden Abbildung normal oder abnormal ist, liegt er nahe am blauen Satz, bei dem es sich um einen Satz normaler Daten handelt. Diese Daten sind also __ "normal" __.

スクリーンショット 2020-11-03 17.48.54.png

-Die Vorteile der k-Nachbarschaftsmethode sind __ "Keine Voraussetzungen für die Datenverteilung", "Kann verwendet werden, auch wenn normale Daten aus mehreren Sätzen bestehen" und "Einfache Formel für Anomalien" . .. ・ Andererseits sind die Nachteile __ "Da es keine Voraussetzung für die Datenverteilung gibt, kann der Schwellenwert nicht durch eine mathematische Formel berechnet werden." "Eine strikte Abstimmung des Parameters k erfordert eine komplizierte mathematische Formel." Das Klassifizieren neuer Daten nimmt viel Zeit in Anspruch. "

Abnormalität der k-Nachbarschaftsmethode

・ Der Grad der Anomalie der k-nahen Methode wird nach folgender Formel berechnet. $ \ln \frac{\pi_0 N^1 (x)}{\pi_1 N^0(x)} $

・ Über jede Variable ・ $ \ Pi_0 $ ist __ Prozentsatz der normalen Daten in allen Stichproben __, $ \ pi_1 $ ist __ Prozentsatz der abnormalen Daten in allen Stichproben __ · $ N ^ 0 (x) $ ist der Prozentsatz der normalen Daten in der Nähe von $ k $ in __ $ x $ __, $ N ^ 1 (x) $ ist die Anomalie in der Nähe von $ k $ in __ $ x $ Datenverhältnis __ ・ $ \ Ln $ ist das natürliche logarithmische $ e $ -basierte __ logarithmische __ ($ \ log_e $)

・ Berechnen Sie jeden dieser Werte. Unter der Annahme, dass die Datenbezeichnung "y" ist, wird $ \ pi_0 $ durch __ "y [y == 0] .size / y.size" __ berechnet. Das heißt, __ "Bezeichnung der normalen Daten / Bezeichnung aller Daten" __ ist $ \ pi_0 $. -Auch $ N ^ 0 (x) $ kann berechnet werden, indem zuerst die nahegelegene Bezeichnung "Nachbarn" wie unten gezeigt gefunden wird und dann __ "Nachbarn [Nachbarn == 0] .size / k" __ verwendet wird.

・ Berechnung der Nachbarn スクリーンショット 2020-11-04 16.16.11.png

np.log((N1*pi0)/(N0*pi1))

Bestätigung der Richtigkeit

-Die Methode, N-1 aus N Daten zu lernen und die verbleibenden als Testdaten zu verwenden, um die Genauigkeit des Modells zu überprüfen, wird als __ "Bestätigungsmethode ohne Kreuzung" __ bezeichnet. Dieses Mal werden wir dies verwenden, um die Genauigkeit zu bewerten. -Die Methode zur Bestätigung einer Kreuzung ohne Knoten kann mit KNeighborsClassifier implementiert werden. ・ In Bezug auf den Code werden wie im vorherigen Abschnitt die Daten trainiert, um "Nachbarn" zu berechnen, und der Grad der Anomalie wird berechnet, aber __ "k erhöhen" und "die nächste Nachbarschaft ausschließen" _ Zwei Prozesse mit der Bezeichnung _ werden hinzugefügt. -Für "k erhöhen" setzen Sie "n_neighbors", das an KNeighborsClassifier () übergeben wurde, auf __ "k + 1" __. -Für "Die nächste Nachbarschaft ausschließen" sollte bei der Berechnung von "Nachbarn" __ [:, 1:] __ verwendet werden, um die erste Spalte des __ -Arrays __ auszuschließen.

·Code スクリーンショット 2020-11-05 11.21.21.png

Schwellenwert einstellen

・ Code![Screenshot 2020-11-05 11.33.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/e84371c0-4c72-8704- 82ba-cc982ca1fe60.png)

Abnormalitätsbeurteilung

・ Code![Screenshot 2020-11-05 12.56.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/ff93cbbf-f366-54a1- d1b7-a6ca66a5904f.png)

・ Grafik (Rot ist abnormal, Blau ist normal, helle Farbe zeigt die Klassifizierung der Trainingsdaten an) スクリーンショット 2020-11-05 12.55.37.png

1 Klasse SVM

Was ist 1-Klassen-SVM?

-__ 1 Klasse SVM__ ist eine Methode zum Erkennen von Ausreißern in __ "Daten ohne Beschriftung" __. Das heißt, __überwachtes Lernen __. -Die Grundidee der Ausreißererkennung wie die Hotelmethode lautet __ "Erstellen Sie eine Kugel, die fast alle Daten enthält, und verwenden Sie die Ausreißer als Ausreißer" __. Bei der Hotelmethode wurde dies mit __Maharanobis-Abstand __ durchgeführt, aber bei 1-Klassen-SVM wird der Ausreißerwert erreicht, indem "der __ Datenraum verzerrt wird, damit __ alle Daten in die Kugel gestellt werden können". Ist angeschlossen. -Wenn diese Kugel erstellt wird, sind die äußersten Daten auf der Kugel vorhanden, und die Kugel wird basierend darauf erstellt. Aus diesem Grund werden die Daten außerhalb davon __ "Unterstützungsvektordaten" __ genannt. In 1-Klassen-SVM werden normal und abnormal getrennt, indem Sie danach fragen.

-Der Fluss von 1-Klasse-SVM ist wie folgt. (1) Erstellen Sie einen SVM-Klassifikator und berechnen Sie __abnormality __ ② Stellen Sie die Abnormalitätsrate ein und bestimmen Sie __threshold __ ③ __ Beurteilung der Abnormalität __ anhand des Schwellenwerts und des abnormalen Werts

(1) Erstellen Sie einen SVM-Klassifikator und berechnen Sie den Grad der Abnormalität

・ Code![Screenshot 2020-11-05 14.17.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/82932f52-f73d-95db- 672c-60abe9b7e5ac.png)

② Stellen Sie die Abnormalitätsrate ein und bestimmen Sie den Schwellenwert

・ Als nächstes setzen Sie __threshold __. Bei 1-Klassen-SVM muss der Schwellenwert jedoch unter der Annahme festgelegt werden, dass __ "die Daten abnormale Daten mit einer bestimmten Rate enthalten" __. Im Folgenden wird dieses Verhältnis durch __ "a (%)" __ dargestellt. -Der Schwellenwert wird berechnet durch __ "st.scoreatpercentile ()" __. Die im vorherigen Abschnitt erstellte __abnormality __ wird an das erste Argument übergeben, und das __abnormal data-Verhältnis "a" __ wird an das zweite Argument übergeben. Infolgedessen wird der Schwellenwert so festgelegt, dass __normale Daten einen Prozentsatz der Gesamtzahl __ ausmachen.

スクリーンショット 2020-11-05 14.59.53.png

③ Beurteilung der Abnormalität anhand des Schwellenwerts und des abnormalen Werts

・ Code![Screenshot 2020-11-05 15.08.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/aaf00f76-6b78-4f2a- 28be-20700317f681.png)

・ Grafik (blau sind abnormale Daten (10% der Gesamtzahl)Screenshot 2020-11-05 15.07.25.png .com / 0/698700 / 4228ca8b-d9e8-185c-9ea4-e78f516da00d.png)

Erkennen Sie Anomalien in Richtungsdaten

Was sind Richtungsdaten?

① Datenstandardisierung

-Um die Größe (Länge) der Daten auf 1 zu setzen, erhalten Sie sie durch __ "Teilen Sie die Daten durch die Länge der Daten selbst" __. Daher ist es zunächst erforderlich, die __ Datenlänge __ zu ermitteln. -Die Länge der Daten wird berechnet durch __ "np.linalg.norm (Daten, ord = 2, Achse = 1) [:, np.neue Achse]" __. Dies wurde auch durch Regularisierung des Deep Learning (Verarbeitung zur Verhinderung von Überlernen) erreicht. __ "ord" __ gibt die Anzahl der __ Dimensionen an (diesmal zwei Dimensionen), __ "Achse" __ gibt 1 an, dh __, um die Länge in Zeilenrichtung zu berechnen __ .. Der Teil __ [:, np.newaxis] __ wird angepasst, um die Achse bei der Standardisierung von __ an den Daten auszurichten.

・ Code![Screenshot 2020-11-05 16.10.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/cdbb90ea-2d7a-2be0- 17ae-1d767e6427fa.png)

・ Ergebnis (alle Längen sind 1)![Screenshot 2020-11-05 16.10.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com /0/698700/66dc9f45-1f73-5b91-7311-fbd0bca54d54.png)

(2) Berechnung der Datenanomalie

·Code スクリーンショット 2020-11-05 17.11.55.png

③ Stellen Sie den Schwellenwert aus der Verteilung der Probe ein

-Es gibt einen Satz, dass der Grad der Anomalie __ "χ-Quadrat-Verteilung" __ folgt. Daher wird die Verteilung der Daten unter Verwendung des im vorherigen Abschnitt berechneten Abnormalitätsgrads erhalten und der Schwellenwert daraus berechnet. ・ Informationen zur Verwendung der χ-Quadrat-Verteilung finden Sie in Kapitel 1. Zur Überprüfung erfolgt die Implementierung mit __ "st.chi2.ppf ()" __. Übergeben Sie __ "1-False rate" __ als erstes Argument. Diese Rate falscher Meldungen wird von Ihnen selbst festgelegt.

·Code スクリーンショット 2020-11-05 17.41.51.png

④ Beurteilung der Abnormalität

・ Code![Screenshot 2020-11-05 17.59.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/3eb5d367-3875-ce4c- efe1-7cb3bf516a1f.png)

Zusammenfassung

Diese Zeit ist vorbei. Vielen Dank für das Lesen bis zum Ende.

Recommended Posts

Einführung in die Anomalieerkennung 2 Ausreißererkennung
Einführung in die Anomalieerkennung 1 Grundlagen
Einführung in die Anomalieerkennung 3 Änderungspunkterkennung
Einführung in die Erkennung von Anomalien und Zusammenfassung der Methoden
Grundlegender Ablauf der Erkennung von Anomalien
Ausreißererkennung mit One Class SVM
Eine leichte Einführung in die Objekterkennung
Erkennung von Zeitreihendatenanomalien für Anfänger
Abnormalitätserkennung mit MNIST durch Autoencoder (PyTorch)
Erkennung von EKG-Datenanomalien durch Matrix Profile