[PYTHON] [Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung

Überwachtes Lernen mithilfe der Kernel-Dichteschätzung

Dieser Artikel wurde von Anfängern des maschinellen Lernens verfasst. Bitte beachten Sie.

Ein tatsächlich verwendetes Beispiel ist hier. Der spezifische Hintergrund der Idee und der überarbeitete Inhalt sind hier.

Was ist die Schätzung der Kerneldichte?

Bukkake [WIkipedia](https://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E5%AF%86%E5% Es ist schneller, BA% A6% E6% 8E% A8% E5% AE% 9A) zu betrachten.

Stellen Sie sich ein einfaches Histogramm vor. Es kann gesagt werden, dass der Teil, in dem das Histogramm hoch ist, *** relativ leicht zu erreichen ist *** und der Teil, in dem das Histogramm niedrig ist ***, relativ unwahrscheinlich ist ***. Hast du jemals irgendwo eine ähnliche Geschichte gehört?

Dies ist die gleiche Idee wie die Wahrscheinlichkeitsdichtefunktion. Ein Histogramm ist gewissermaßen eine *** wahre Wahrscheinlichkeitsdichtefunktion ***, die durch tatsächliche Messung *** geschätzt wird. *** Kernel-Dichteschätzung *** ist eine kontinuierlichere und reibungslosere Schätzmethode unter Verwendung von Kernelfunktionen.

Was ist überwachtes Lernen?

[Wikipedia](https://ja.wikipedia.org/wiki/%E6%95%99%E5%B8%AB%E3%81%82%E3%82%8A%E5%AD%A6%E7%BF % 92) Sehen Sie den Lehrer oder lesen Sie die Qiita einer anderen Person.

Kernel-Dichteschätzung und überwachtes Lernen

Ein "Lehrer" im überwachten Lernen ist ein Satz von "Daten" und "korrektem Etikett".

Betrachten Sie einen Datensatz mit der korrekten Bezeichnung "0, 1, 2". Dies ist in Daten von Label 0, Label 1 und Label 2 unterteilt. Wenn Sie die Kerneldichte anhand der Lehrerdaten mit der korrekten Antwortbezeichnung 0 schätzen, können Sie die Wahrscheinlichkeitsdichtefunktion für den Fall ermitteln, dass "die Bezeichnung 0 wird".

Finden Sie die Wahrscheinlichkeitsdichtefunktion basierend auf den Lehrerdaten für alle Labels und berechnen Sie die Wahrscheinlichkeitsdichte der Testdaten. Dann klassifizieren wir nach der Größe des Wertes. Das ist dieser Versuch.

Genau genommen müssen wir wirklich den Anteil jedes Labels an der Bevölkerung berechnen ... Ich möchte die schwierige Geschichte noch einmal zusammenfassen.

Lassen Sie es uns vorerst implementieren

Diese Welt ist wunderbar. Dies liegt daran, dass die Schätzung der Kerneldichte unter Verwendung des Gaußschen Kernels bereits in [SciPy] implementiert wurde (https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.gaussian_kde.html).

Verwendung von Gaußschem KDE

Hier ist eine kurze Zusammenfassung der Verwendung von SciPys gaussian_kde.

Führen Sie eine Kernel-Dichteschätzung durch

kernel = gaussian_kde(X, bw_method="scotts_factor", weights="None")

--X: Datensatz zur Schätzung der Kerneldichte. --bw_method: Kernelbandbreite. Scotts_factor, falls nicht angegeben. --weights: Gewichte zur Schätzung der Kerneldichte. Wenn nicht angegeben, sind alle Gewichte gleich.

Berechnen Sie die Wahrscheinlichkeit

Geben Sie neue Daten in die geschätzte Wahrscheinlichkeitsdichtefunktion ein, um die Wahrscheinlichkeit zu berechnen.

pd = kernel.evaluate(Z)

--Z: Datenpunkt (e), für die Sie die Wahrscheinlichkeit berechnen möchten.

Es wird als Listenarray zurückgegeben, das die Z-Wahrscheinlichkeiten enthält.

Versuchen Sie, mit einem Lehrer zu lernen

Probieren Sie es mit dem Iris-Datensatz von Scikit-learn aus!

Der Fluss ist so Iris-Datensatz gelesen → Trainingsdaten und Testdaten mit train_test_split teilen → Standardisierung von Trainingsdaten und Testdaten → Führen Sie eine Kernel-Dichteschätzung für jedes Etikett anhand von Trainingsdaten durch → Berechnen Sie die Wahrscheinlichkeitsdichte für jedes Etikett mit Testdaten → Geben Sie das Etikett mit dem größten Wert aus

↓ Skript ↓

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from scipy.stats import gaussian_kde

# Laden des Iris-Datensatzes
iris = datasets.load_iris()
X = iris.data
y = iris.target

# Aufteilung der Trainingsdaten und Testdaten
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,
random_state=1, stratify=y)

# Standardisierung
sc = StandardScaler()
sc = sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)

# Schätzung der Kerneldichte
kernel0 = gaussian_kde(X_train_std[y_train==0].T)
kernel1 = gaussian_kde(X_train_std[y_train==1].T)
kernel2 = gaussian_kde(X_train_std[y_train==2].T)

# 
p0s = kernel0.evaluate(X_test_std.T)
p1s = kernel1.evaluate(X_test_std.T)
p2s = kernel2.evaluate(X_test_std.T)

# 
y_pred = []
for p0, p1, p2 in zip(p0s, p1s, p2s):
    if max(p0, p1, p2) == p0:
        y_pred.append(0)
    elif max(p0, p1, p2) == p1:
        y_pred.append(1)
    else:
        y_pred.append(2)

Ausgabe des Vorhersageetiketts Vorsichtsmaßnahmen für die Standardisierung Die Testdaten werden anhand des Durchschnitts und der Standardabweichung der Trainingsdaten standardisiert. Dies liegt daran, dass die Daten verzerrt oder falsch ausgerichtet sein können, wenn die Standardisierung separat durchgeführt wird. Vorsichtsmaßnahmen zum Schätzen der Kerneldichte Wenn Sie gaussian_kde den Datensatz so lesen lassen, wie er ist, scheint der *** Spaltenvektor als ein Daten *** verarbeitet zu werden. Der Iris-Datensatz transponiert jedoch die Daten, da *** Zeilenvektor ein Daten *** ist. Gleiches gilt für die Berechnung der Wahrscheinlichkeitsdichte von Testdaten.

Vorhersage-Label-Ausgabe

y_pred = []
for p0, p1, p2 in zip(p0s, p1s, p2s):
    if max(p0, p1, p2) == p0:
        y_pred.append(0)
    elif max(p0, p1, p2) == p1:
        y_pred.append(1)
    else:
        y_pred.append(2)

Die Wahrscheinlichkeitsdichte der Testdaten wird für jedes Etikett in p0s, p1s, p2s gespeichert. Nehmen Sie jeweils einen heraus

--0, wenn der Wert von Label 0 das Maximum ist --1, wenn der Wert von Etikett 1 das Maximum ist

Die Ergebnisse werden in der Liste der Testdaten in der Liste y_pred gespeichert.

Ergebnisansage

Lassen Sie uns die Genauigkeitsrate des Vorhersageetiketts mit der Genauigkeitscore von scikit-learn überprüfen. Pochen.

from sklearn.metrics import accuracy_score
print(accuracy_score(y_test, y_pred))
 1.0

Hurra.

Schließlich

Ich habe versucht, das Ergebnis der Kernel-Dichteschätzung als Klassifikator für überwachtes Lernen zu verwenden. In der Realität werden solche Techniken selten verwendet. Ich denke, es hat die Nachteile, den Rechenaufwand zu erhöhen und die Genauigkeit in Abhängigkeit von den Daten erheblich zu verringern. Wie Sie dieser Studie entnehmen können, scheinen einige Daten relativ schnell und gut klassifiziert zu werden.

Fortsetzung auf Teil 2

Recommended Posts

[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 2
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 3
Schätzung der Kerneldichte in Python
Maschinelles Lernen: Überwacht - Zufälliger Wald
Maschinelles Lernen: Überwacht - Support Vector Machine
Überwachtes maschinelles Lernen (Klassifikation / Regression)
Maschinelles Lernen: Überwacht - Entscheidungsbaum
Maschinelles Lernen: Überwacht - Lineare Diskriminanzanalyse
Anwendungsentwicklung mit Azure Machine Learning
Maschinelles Lernen
Aktienkursprognose mit maschinellem Lernen (Scikit-Learn)
[Maschinelles Lernen] LDA-Themenklassifizierung mit Scikit-Learn
[Maschinelles Lernen] FX-Vorhersage unter Verwendung des Entscheidungsbaums
Aktienkursprognose mit maschinellem Lernen (Return Edition)
[Maschinelles Lernen] Regressionsanalyse mit Scicit Learn
Eine Geschichte über einfaches maschinelles Lernen mit TensorFlow
Datenversorgungstricks mit deque beim maschinellen Lernen
Betreutes Lernen (Klassifizierung)
Erstellen eines Positionsschätzungsmodells für den Intelligenzwettbewerb menschlicher Wölfe mithilfe von maschinellem Lernen
Angemessene Preisschätzung von Mercari durch maschinelles Lernen
[Memo] Maschinelles Lernen
Klassifikation des maschinellen Lernens
Versuchen Sie es mit dem Jupyter Notebook von Azure Machine Learning
Beispiel für maschinelles Lernen
[Maschinelles Lernen] Extrahieren Sie ähnliche Wörter mechanisch mit WordNet
Kausales Denken mit maschinellem Lernen (Organisation von Methoden des kausalen Denkens)
Erstellen Sie maschinelle Lernprojekte mit explosiver Geschwindigkeit mithilfe von Vorlagen
Was ich über KI / maschinelles Lernen mit Python gelernt habe (3)
Python: Diagramm der zweidimensionalen Datenverteilung (Schätzung der Kerneldichte)
Maschinelles Lernen mit Bildern der Kategorie Caffe -1 unter Verwendung eines Referenzmodells
Tech-Circle Beginnen wir mit der Anwendungsentwicklung durch maschinelles Lernen (Selbststudium)
[Maschinelles Lernen] Versuchen Sie, Objekte mithilfe der selektiven Suche zu erkennen
[Maschinelles Lernen] Textklassifizierung mit dem Transformer-Modell (Aufmerksamkeitsbasierter Klassifikator)
Konstruktionsnotiz für eine maschinelle Lernumgebung von Python
Was ich über KI / maschinelles Lernen mit Python gelernt habe (2)
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Zusammenfassung des Lernprogramms für maschinelles Lernen
Maschinelles Lernen Über Overlearning
Maschinelles Lernen ⑤ AdaBoost-Zusammenfassung
Logistische Regression beim maschinellen Lernen
Maschinelles Lernen unterstützt Vektormaschine
Maschinelles Lernen studieren ~ matplotlib ~
Lineare Regression des maschinellen Lernens
Memo zum Kurs für maschinelles Lernen
Bibliothek für maschinelles Lernen dlib
Maschinelles Lernen (TensorFlow) + Lotto 6
Fähigkeitswertschätzung mit Pyirt
Lerne irgendwie maschinelles Lernen
Lernen mit einem Lehrer (Rückkehr) 1 Grundlagen
Python: Überwachtes Lernen (Rückkehr)
Bibliothek für maschinelles Lernen Shogun
Maschinelles Lernen Kaninchen Herausforderung
Einführung in das maschinelle Lernen
Python: Überwachtes Lernen (Klassifizierung)
Maschinelles Lernen: k-Nächste Nachbarn
Was ist maschinelles Lernen?
Erstellen Sie eine Umgebung für maschinelles Lernen mit Python unter MacOSX
Titanic-Überlebensprognose mit dem Workflow-Management-Tool Kedro für maschinelles Lernen