Python: Überwachtes Lernen (Klassifizierung)

Was ist überwachtes Lernen (Klassifikation)?

Was ist "Klassifikation"?

Maschinelles Lernen ist in drei Hauptbereiche unterteilt Unter ihnen entspricht es 1-1.

1, überwachtes Lernen Lernen Sie das Modell aus den Trainingsdaten mit dem richtigen Antwortetikett Machen Sie Vorhersagen für unbekannte Daten. Betreutes Lernen wird in die folgenden zwei Kategorien eingeteilt.

1-1, Klassifizierungsproblem Es lernt die Daten nach Kategorien geteilt und sagt die Kategorie (diskreten Wert) unbekannter Daten voraus. Dieser Inhalt hilft Ihnen, den Algorithmus für dieses Klassifizierungsproblem zu verstehen und ein einfaches Problem zu implementieren. Praktische Anwendungsbeispiele umfassen die Beurteilung von E-Mail-Spam.

1-2, Rückkehrproblem (Lehrerlernen (Rückkehr)) Im Gegensatz zum Klassifizierungsproblem sagt dies kontinuierliche Werte voraus. Aktienkursprognosen werden hier kategorisiert.

2, lehrerloses Lernen (lehrerloses Lernen) Für Daten, die kein korrektes Antwortetikett haben oder deren Struktur unbekannt ist Dies bedeutet, dass die Maschine die Struktur und Beziehung von Daten findet. Beispiele hierfür sind Trends bei Einzelhandelskunden und Clustering.

3, Stärkung des Lernens Der Zweck besteht darin, die Leistung basierend auf der Interaktion mit der Umgebung zu verbessern. Legen Sie Belohnungen für Aktionen fest und trainieren Sie sie, um Maßnahmen zu ergreifen, die ihren Zielen je nach Zustand zugute kommen. Ein Beispiel ist eine wettbewerbsfähige KI wie Go.

Binäre und mehrjährige Klassifizierung

Klassifizierungsprobleme können grob in binäre und mehrjährige Klassifizierungsprobleme unterteilt werden.

Binäre Klassifikation (auch als binäre Klassifikation oder Zwei-Klassen-Klassifikation bezeichnet)

Die zu klassifizierenden Kategorien (Klassen genannt) sind zwei Klassifizierungsprobleme. Es kann nur durch "Zugehörigkeit / Nichtzugehörigkeit" zu einer der beiden Gruppen identifiziert werden. Wenn eine gerade Linie zwischen Klassen unterscheiden kann, wird sie als lineare Klassifizierung bezeichnet, und wenn nicht, wird sie als nichtlineare Klassifizierung bezeichnet.

Mehrfachklassifizierung (auch Mehrklassenklassifizierung genannt)

Es ist ein Klassifizierungsproblem mit drei oder mehr Klassen. Dies kann nicht einfach durch "Zugehörigkeit / Nichtzugehörigkeit" zu einer Gruppe identifiziert werden. In vielen Fällen kann es nicht einfach durch eine gerade Linie identifiziert werden.

Klassifizierungsablauf

Maschinelles Lernen besteht aus einer Reihe von Abläufen, wie unten gezeigt. Im Abschnitt "2. Algorithmus auswählen" wählen Sie verschiedene "Klassifizierungsalgorithmen" aus.

Im Modell "Überwachtes Lernen (Klassifizierung)" wird der optimale Klassifizierungsalgorithmus ausgewählt und das Modell entsprechend dem Zweck erstellt. Für maximale Leistung ist eine Abstimmung erforderlich.

  1. Datenvorverarbeitung Datenformung und -manipulation

  2. Auswahl des Algorithmus Wählen Sie einen Algorithmus aus und erstellen Sie ein Modell

  3. Modelllernen Auswahl der zu stimmenden Hyperparameter Parametereinstellung

  4. Modellvorhersage (Inferenz) Überprüfung der Modellgenauigkeit anhand unbekannter Daten Integrieren Sie in WEB-Dienste usw. und betreiben Sie das KI-Modell

image.png

So bereiten Sie Daten vor (1)

Wenn Sie den Code tatsächlich verschieben und verschiedene Klassifizierungsmethoden kennenlernen, müssen Sie Daten vorbereiten, die klassifiziert werden können. Auf praktischer Ebene ist es notwendig, einen tatsächlich gemessenen Wert zu erhalten und ihn zu formen. Dieses Mal werde ich diesen Teil weglassen und fiktive Klassifizierungsdaten für die Praxis selbst erstellen. Ich werde vorstellen, wie man Beispieldaten erhält.

Erstellung fiktiver Daten, die zur Klassifizierung geeignet sind

scikit-learn.des Datensatzmoduls
make_classification()Wird genutzt.

Für die Klassifizierung des überwachten Lernens sind Daten und ein Etikett erforderlich, das angibt, zu welcher Klasse die Daten gehören. Wenn Sie make_classification () verwenden, können Sie eine beliebige Anzahl von Daten und Beschriftungstypen als Argumente festlegen.

#Modulimport
from sklearn.datasets import make_classification
#Daten X.,Erzeugung des Etiketts y
X, y = make_classification(n_samples=XX, n_classes=XX, n_features=XX, n_redundant=XX, random_state=XX

Jedes Argument der obigen Funktion lautet wie folgt.

n_samples
#Anzahl der vorzubereitenden Daten
n_classes
#Anzahl der Klassen. Wenn nicht angegeben, ist der Wert 2.
n_features
#Anzahl der Datenmerkmale
n_redundant
#Anzahl der Merkmale (zusätzliche Merkmale), die für die Klassifizierung nicht erforderlich sind
random_state
#Zufälliger Startwert (Faktor, der das Muster der Zufallszahlen bestimmt)

Es gibt andere Argumente, aber in diesem Inhalt werden wir die Daten erstellen, die sie definieren. Zusätzlich wird ein "Label (y)" vorbereitet, das angibt, zu welcher Klasse die Daten gehören, aber im Grunde wird das Label durch einen ganzzahligen Wert vorbereitet. Beispielsweise ist im Fall einer binären Klassifizierung die Bezeichnung jeder Daten "0" oder "1".

So bereiten Sie Daten vor (2)

Die Scikit-Learn-Bibliothek wird hauptsächlich zur Implementierung von Klassifizierungsalgorithmen verwendet.

Die Scicit-Learn-Bibliothek verfügt jedoch nicht nur über diese, sondern auch über Datenvorverarbeitung und Modellanpassung Funktionen zur Auswertung sind ebenfalls vorgesehen.

Es stehen auch mehrere Datensätze zum Testen und Testen des Algorithmus zur Verfügung. Daten können durch Angabe des Moduls aufgerufen werden. Hier stellen wir eine davon vor, die Methode zur Erfassung von Iris-Daten.

Was sind Irisdaten? Vier charakteristische Größen (Einheit: cm) der "Schrottstücklänge", "Schrottstückbreite", "Blütenblattlänge" und "Blütenblattbreite" von 150 Irisproben (eine Art Blume). Und 3 Arten von Sorten (0 ~ 2) werden gelagert.

Hier werden wir nur zwei Merkmalsgrößen verwenden, "die Länge des Schwertes" und "die Länge der Blütenblätter", um die Daten zu visualisieren.

image.png

# scikit-Lernen Sie den Bibliotheksimport des Detaset-Moduls
from sklearn import datasets
import numpy as np

#Daten bekommen
iris = datasets.load_iris()
#Speichert die 0. und 2. Spalte der Iris
X = iris.data[:, [0, 2]]
#Speichert Irisklassenetiketten
y = iris.target

Auch um die Leistung des trainierten Modells mit unbekannten Daten zu bewerten Teilen Sie den Datensatz weiter in Trainings- und Testdaten auf.

Verwenden Sie train_test_split () im model_selection-Modul von scicit-learn wie folgt: Die X- und Y-Sequenzen werden zufällig in 30% Testdaten und 70% Trainingsdaten aufgeteilt.

from sklearn.model_selection import train_test_split

train_X, test_X, train_y, test_y = train_test_split(
    X, y, test_size=0.3, random_state=42)

Lernen und Vorhersage

Beim maschinellen Lernen gibt es mehrere Algorithmen. Ein Überblick über eine Reihe von Schritten vom Lernen aus Lehrerdaten nach einem Algorithmus bis zur Vorhersage eines Etiketts. Es heißt Modell.

Es ist schwierig, alle Modelle des maschinellen Lernens selbst zu implementieren In Python gibt es viele Bibliotheken, die sich auf maschinelles Lernen spezialisiert haben. Unter ihnen ist scikit-learn eine Bibliothek, in der Modelle für maschinelles Lernen im Voraus vorbereitet werden.

Schauen wir uns zunächst an, wie der fiktive Modellklassifikator als Beispiel verwendet wird.

#Modulimport
#Beziehen Sie sich für jedes Modell auf verschiedene Module(Das folgende Beispiel)
from sklearn.linear_model import LogisticRegression
from sklearn.svm import LinearSVC, SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier

#Ein Modell bauen
model = Classifier()
#Modelllernen
model.fit(train_X, train_y)
#Vorhersage von Daten nach Modell
model.predict(test_X)

#Modellgenauigkeitsrate
#Die richtige Antwortrate ist(Die Anzahl der Daten, die der vorhergesagten Klassifizierung des Modells mit der tatsächlichen Klassifizierung entsprechen) ÷ (Gesamtzahl der Daten)Wird berechnet von
model.score(test_X, test_y)

Beim Schreiben von Code für maschinelles Lernen

Classifier()Der Teil von wird durch das tatsächliche Modell ersetzt.

Durch die Verwendung von Scikit-Learn ist es attraktiv, maschinelles Lernen ziemlich einfach wie oben beschrieben üben zu können.

Hauptmethode

Logistische Rückgabe

Die logistische Regression ist eine Methode zur Klassifizierung von Daten durch Auffinden von Grenzen linear trennbarer Daten durch Training.

image.png

Die obige Grafik scheint in der Lage zu sein, eine gerade Linie zu zeichnen, um die Farben zu identifizieren.

Daten, die durch eine gerade Linie in Gruppen von Datenkategorien unterteilt werden können

Es werden linear trennbare Daten genannt.

Das Merkmal ist, dass die Grenzlinie eine gerade Linie wird. Daher wird es für Daten mit wenigen Klassen verwendet, z. B. für die Binomialklassifizierung. Es ist auch möglich, die Wahrscheinlichkeit zu berechnen, mit der die Daten in Klassen eingeteilt werden. Es wird hauptsächlich verwendet, wenn Sie die Klassifizierungswahrscheinlichkeit wie "Niederschlagswahrscheinlichkeit der Wettervorhersage" anhand dieser Merkmale ermitteln möchten.

Der Nachteil ist, dass die Trainingsdaten linear trennbar sein müssen, bevor sie klassifiziert werden können. Es ist auch nicht für hochdimensionale, spärliche Daten geeignet.

Außerdem werden die aus den Trainingsdaten gelernten Grenzen direkt neben den Daten am Rand der Klasse überschritten. Ein weiterer Nachteil ist, dass es nicht leicht zu einer verallgemeinerten Grenze wird (geringe Verallgemeinerungsfähigkeit).

Das logistische Regressionsmodell ist

scikit-Bibliothek linear lernen_Im Modell-Submodul
LogisticRegression()Ist definiert als.

Schreiben Sie beim Training mit einem logistischen Regressionsmodell einen Code wie den folgenden, um das Modell aufzurufen.

#Rufen Sie das Modell aus dem Paket auf
from sklearn.linear_model import LogisticRegression

#Modell bauen
model = LogisticRegression()

#Trainiere das Modell
# train_data_Detail ist eine Sammlung von Informationen, die zur Vorhersage der Datenkategorie verwendet werden
# train_data_label ist das Label der Klasse, zu der die Daten gehören
model.fit(train_data_detail, train_data_label)

#Lassen Sie das Modell vorhersagen
model.predict(data_detail)

#Richtige Antwortrate des Modells der Vorhersage
model.score(data_detail, data_true_label)

Verwenden Sie in der Visualisierungsarbeit das trainierte Modell Teilen der Daten durch Vorhersagen für alle feinen Plotpunkte im Diagramm Es kann durch Farbe angezeigt werden.

Verwenden Sie die matplotlib-Bibliothek, um das Diagramm zu visualisieren. Visualisieren und vergleichen Sie andere Trainingsmodelle auf ähnliche Weise.


#Zeichnen Sie alle Daten in ein Streudiagramm und separate Farben für jedes Etikett
plt.scatter(X[:, 0], X[:, 1], c=y, marker=".",
            cmap=matplotlib.cm.get_cmap(name="cool"), alpha=1.0)
#Bestimmen Sie den Bereich des Diagramms
x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1
x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1
#Grafik 0.Speichert die Koordinaten der Kreuzung, wenn sie durch 02 getrennt sind
xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, 0.02),
                       np.arange(x2_min, x2_max, 0.02))
#Alle xx1,Vorhersage mit einem Trainingsmodell für xx2 Paare
Z = model.predict(np.array([xx1.ravel(), xx2.ravel()]).T).reshape((xx1.shape))
#Koordinate(xx1, xx2)Zeichne Z auf
plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=matplotlib.cm.get_cmap(name="Wistia"))
#Geben Sie Bereich, Beschriftung, Titel und Raster an
plt.xlim(xx1.min(), xx1.max())
plt.ylim(xx2.min(), xx2.max())
plt.title("classification data using LogisticRegression")
plt.xlabel("Sepal length")
plt.ylabel("Petal length")
plt.grid(True)
plt.show()
np.Die Meshgrid-Methode ist x, y, ...Erstellen Sie eine Koordinatenmatrix von n.

import numpy as np

#X in der Abbildung unten
x = np.array([1, 2, 3])

#Y in der Abbildung unten
y = np.array([4, 5])

x1, y1 = np.meshgrid(x,y)

print(x1)
print()
print(y1)
#Ausgabe
[[1 2 3]
 [1 2 3]]

[[4 4 4]
 [5 5 5]]

image.png

Lineare SVM

SVM (Support Vector Machine) findet Datengrenzen wie die logistische Regression Dies ist eine Methode zum Klassifizieren von Daten. Sein größtes Merkmal ist ein Vektor, der als Unterstützungsvektor bezeichnet wird.

Ein Unterstützungsvektor ist eine Gruppe von Daten, die sich in der Nähe anderer Klassen befindet. Zeichnen Sie basierend auf dem Unterstützungsvektor eine Grenzlinie an der Position, an der der Abstand am größten ist. Grenzen werden gezogen, um den Abstand von einer Klasse zur anderen zu maximieren (Marge maximieren)

image.png

Im Vergleich zur logistischen Regression zeichnet SVM die Klassifizierungsgrenze am weitesten zwischen den beiden Klassen. Es ist tendenziell verallgemeinert und die Klassifizierungsvorhersage von Daten verbessert sich tendenziell. Ein weiteres Merkmal ist, dass es einfach ist, einen Pfad zu erstellen, da nur der Unterstützungsvektor berücksichtigt werden muss, um die Grenzlinie zu bestimmen.

Als Nachteil (1) Mit zunehmender Datenmenge nimmt die Berechnungsmenge zu, sodass Lernen und Vorhersage tendenziell langsamer sind als bei anderen Methoden. (2) Wie bei der logistischen Regression kann die Klassifizierung nur dann korrekt durchgeführt werden, wenn die Eingabedaten linear getrennt werden können (ein Zustand, in dem eine gerade Grenzfläche gezeichnet werden kann).

Eine SVM, die eine Linie gerade zeichnet und klassifiziert, wird als lineare SVM bezeichnet.
Lineare SVM, scicit-lerne LinearSVC()Es kann mit implementiert werden.
from sklearn.svm import LinearSVC
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

#Datengenerierung
X, y = make_classification(n_samples=100, n_features=2,
                           n_redundant=0, random_state=42)

#Teilen Sie die Daten in Lehrerdaten und die Daten, die Sie vorhersagen möchten
train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=42)

#Ein Modell bauen
model = LinearSVC()
#Modelllernen
model.fit(train_X, train_y)

#Richtige Antwortrate ausgeben
model.score(test_X, test_y)

Die Genauigkeitsrate gilt für test_X und test_y. Da die richtige Antwortrate für train_X und train_y nicht berechnet wird Selbst wenn die Ausgabegenauigkeitsrate 100% beträgt, können einige Diagramme falsch klassifiziert werden.

Die Grenzvisualisierung kann mit dem folgenden Code durchgeführt werden, ähnlich wie bei der logistischen Regressionsmethode.

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

#Unten ist die Arbeit der Visualisierung
plt.scatter(X[:, 0], X[:, 1], c=y, marker=".",
            cmap=matplotlib.cm.get_cmap(name="cool"), alpha=1.0)

x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1
x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, 0.02),
                       np.arange(x2_min, x2_max, 0.02))
Z = model.predict(np.array([xx1.ravel(), xx2.ravel()]).T).reshape((xx1.shape))
plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=matplotlib.cm.get_cmap(name="Wistia"))
plt.xlim(xx1.min(), xx1.max())
plt.ylim(xx2.min(), xx2.max())
plt.title("classification data using LinearSVC")
plt.grid(True)
plt.show()

image.png

Nichtlineare SVM

Lineares SVM ist ein ausgezeichnetes Modell, das leicht zu verstehen ist und eine hohe Allgemeinheit aufweist. Es hat jedoch den Nachteil, dass es nur verwendet werden kann, wenn die Eingabedaten linear getrennt sind.

Nichtlineare SVM ist ein Modell, das entwickelt wurde, um die Mängel der SVM zu beseitigen.

image.png

Wie in der obigen Abbildung gezeigt, durch Manipulieren der Daten durch Ausführen einer mathematischen Verarbeitung gemäß einer Konvertierungsformel, die als Kernelfunktion bezeichnet wird. Die Eingabedaten können linear trennbar sein.

Ein Modell, das eine solche Verarbeitung durchführt und SVM verwendet, ist eine nichtlineare SVM.

Die Operation durch die Kernelfunktion ist kompliziert, aber Sie müssen die Operation nicht berechnen. Es wird auch als Kernel-Trick bezeichnet, da klassifiziert werden kann, ob das innere Produkt nach der Manipulation der Daten erhalten wird.

scikit-SVC im Lern-SVM-Submodul()Wird genutzt.
import matplotlib
from sklearn.svm import SVC
from sklearn.datasets import make_gaussian_quantiles
import matplotlib.pyplot as plt

#Datengenerierung
#Da diese Daten nicht linear trennbar sind, bereiten Sie andere Daten vor
data, label = make_gaussian_quantiles(n_samples=1000, n_classes=2, n_features=2, random_state=42)

#Ein Modell bauen
#Verwenden Sie SVC anstelle von LinearSVC, um nicht linear trennbare Daten zu klassifizieren
model = SVC()
#Modelllernen
model.fit(data,label)

#Berechnung der richtigen Antwortrate
model.score(data,label)

Wenn dies auch auf die gleiche Weise ausgegeben wird, ist es wie folgt

image.png

Dies ist der Kontrast zwischen nichtlinear und linear.

image.png

Entscheidungsbaum

Der Entscheidungsbaum unterscheidet sich von der bisher eingeführten logistischen Regression und SVM. Konzentrieren Sie sich auf jedes der Datenelemente (erklärende Variablen) Es ist eine Methode, um die Klasse zu bestimmen, zu der die Daten gehören, indem die Daten durch einen bestimmten Wert im Element geteilt werden.

Im Entscheidungsbaum können Sie sehen, wie stark sich jede erklärende Variable auf die Zielvariable auswirkt. Es verzweigt sich durch Wiederholen der Division, aber es kann berücksichtigt werden, dass die Variable, die zuerst geteilt wird, einen größeren Einfluss hat.

Der Nachteil ist, dass ich nicht gut in linear untrennbaren Daten bin (In 2D-Daten kann die Grenzlinie beispielsweise nicht diagonal gezeichnet werden.) Das Training liegt zu nahe an den Lehrerdaten (nicht verallgemeinert).

scikit-DecisionTreeClassifier im Lernbaum-Submodul()Wird genutzt.
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

X, y = make_classification(n_samples=100, n_features=2, n_redundant=0, random_state=42)

#Teilen Sie in Trainingsdaten und Testdaten
train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=42)

#Ein Modell bauen
model = DecisionTreeClassifier()

#Modelllernen
model.fit(train_X, train_y)

#Berechnung der richtigen Antwortrate
model.score(test_X, test_y)

Das Ergebnis der Visualisierung der Grenze auf die gleiche Weise ist wie folgt.

image.png

Zufälliger Wald

Dies ist eine Methode, um mehrere vereinfachte Versionen des oben genannten Entscheidungsbaums zu erstellen und das Klassifizierungsergebnis mehrheitlich zu bestimmen. Trainieren Sie mehrere einfache Klassifikatoren in einem Klassifikator Es ist auch eine Art des Lernens, das als Ensemble-Lernen bezeichnet wird.

Während alle im Entscheidungsbaum verwendeten erklärenden Variablen verwendet wurden, wurde jeder Entscheidungsbaum in der zufälligen Gesamtstruktur verwendet Versuche, die Klasse, zu der die Daten gehören, mit nur wenigen zufällig bestimmten erklärenden Variablen zu bestimmen. Dann wird die Klasse mit der höchsten Ausgabe unter den Klassen ausgegeben, die aus mehreren einfachen Entscheidungsbäumen ausgegeben werden.

Ein Merkmal zufälliger Wälder ist, dass Ausreißer wie der Entscheidungsbaum die Ergebnisse weniger wahrscheinlich beeinflussen. Es kann auch verwendet werden, um Datensätze mit komplexen Diskriminanten zu klassifizieren, die nicht linear trennbar sind.

Der Nachteil ist, dass, wenn die Anzahl der Daten im Verhältnis zur Anzahl der erklärenden Variablen klein ist, wie beim Entscheidungsbaum, die Dichotomie nicht geteilt werden kann und die Vorhersagegenauigkeit abnimmt.

Verwenden Sie RandomForestClassifier () im Ensemble-Submodul von scikit-learn.

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

X, y = make_classification(n_samples=100, n_features=2, n_redundant=0, random_state=42)

#Teilen Sie in Trainingsdaten und Testdaten
train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=42)

#Ein Modell bauen
model = RandomForestClassifier()

#Modelllernen
model.fit(train_X, train_y)

#Berechnung der richtigen Antwortrate
model.score(test_X, test_y)

In Bezug auf das Obige ist das Ergebnis der Visualisierung der Grenze wie folgt. Sie können sehen, dass es eine Grenze ähnlich dem Entscheidungsbaum hat. Dies liegt daran, dass Random Forest den Entscheidungsbaumalgorithmus im Ensemble lernt (um die Generalisierungsleistung zu verbessern, indem mehrere einzeln erlernte Lernende zusammengeführt werden).

image.png

k-NN

k-NN, auch als k-Nachbarschaftsmethode bekannt, findet einige Daten, die den Vorhersagedaten ähnlich sind Es ist eine Methode, um das Klassifizierungsergebnis durch Mehrheitsentscheidung zu bestimmen.

Es handelt sich um eine Lernmethode, die als faules Lernen bezeichnet wird und durch Lernkosten (für das Lernen erforderliche Berechnungsmenge) von 0 gekennzeichnet ist.

Anders als die bisher eingeführten Methoden k-NN lernt nicht aus den Lehrerdaten, sondern bezieht sich direkt auf die Lehrerdaten zum Zeitpunkt der Vorhersage, um das Etikett vorherzusagen. Das Verfahren zur Vorhersage des Ergebnisses ist wie folgt.

  1. Ordnen Sie die Lehrerdaten entsprechend der Ähnlichkeit mit den für die Vorhersage verwendeten Daten neu an. 2, Beziehen Sie sich auf den k-Datensatz im Klassifikator in absteigender Reihenfolge der Ähnlichkeit. 3, Geben Sie die häufigste Klasse unter den Klassen aus, zu denen die referenzierten Lehrerdaten als Vorhersageergebnis gehören.

Die Merkmale von k-NN sind, dass die Lernkosten 0 sind, wie oben erwähnt, dass der Algorithmus relativ einfach ist, es jedoch leicht ist, eine hohe Vorhersagegenauigkeit zu erhalten, und dass es leicht ist, Grenzen komplizierter Formen auszudrücken. Kann erwähnt werden. Als Nachteil

1, Wenn die Anzahl der im Klassifikator angegebenen natürlichen Zahlen kk zu stark erhöht wird, wird der Identifikationsbereich gemittelt und die Vorhersagegenauigkeit nimmt ab. 2, Da die Berechnung jedes Mal durchgeführt wird, wenn die Vorhersage gemacht wird, nimmt der Umfang der Berechnung mit zunehmender Menge an Lehrerdaten und Vorhersagedaten zu, was zu einem langsamen Algorithmus führt.

Das Bild unten zeigt den Unterschied im Klassifizierungsprozess aufgrund des Unterschieds in der Anzahl von kk. Wenn k = 3k = 3 ist, wird vorausgesagt, dass die grauen Punkte hellblau sind, da mehr hellblaue Punkte vorhanden sind. Wenn k = 7k = 7 ist, gibt es mehr grüne Punkte, sodass sie grün sind. Es wird zu einer Vorhersage, dass es ein Punkt ist.

image.png

scikit-KNeighborsClassifier in Learn Submodule Nachbarn()Wird genutzt.
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
X, y = make_classification(n_samples=100, n_features=2, n_redundant=0, random_state=42)

#Teilen Sie in Trainingsdaten und Testdaten
train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=42)

#Ein Modell bauen
model = KNeighborsClassifier()
#Modelllernen
model.fit(train_X, train_y)

#Berechnung der richtigen Antwortrate
model.score(test_X, test_y)

Eine Visualisierung der Grenzen dieses Modells ist zum Beispiel:

image.png

Recommended Posts

Python: Überwachtes Lernen (Klassifizierung)
Betreutes Lernen (Klassifizierung)
Python: Überwachtes Lernen (Rückkehr)
Python: Überwachtes Lernen: Hyperparameter Teil 1
Lernen mit dem Lehrer 1 Grundlagen des Lernens mit dem Lehrer (Klassifizierung)
Python lernen
Python: Überwachtes Lernen: Hyperparameter Teil 2
Python: Anwendung des überwachten Lernens (Rückkehr)
Maschinelles Lernen mit Python (1) Gesamtklassifizierung
[Python] Lernnotiz 1
Python-Lernnotizen
Python-Lernausgabe
Python-Lernseite
Python-Lerntag 4
Python Deep Learning
Python-Lernen (Ergänzung)
Deep Learning × Python
Klassifikation des maschinellen Lernens
Python-Lernnotizen
Python-Klasse (Python-Lernnotiz ⑦)
Python lernen mit ChemTHEATER 03
"Objektorientiert" mit Python gelernt
Python-Modul (Python-Lernnotiz ④)
Erweitertes Lernen 1 Python-Installation
Python lernen mit ChemTHEATER 05-1
Python: Deep Learning-Praxis
Python: Unüberwachtes Lernen: Grundlagen
Maschinelles Lernen: Betreut --AdaBoost
Python & Machine Learning Study Memo ⑤: Klassifikation von Ayame
Private Python-Lernprozedur
Python lernen mit ChemTHEATER 02
Python + Unity Enhanced Learning (Lernen)
Lernen mit einem Lehrer (Rückkehr) 1 Grundlagen
Kapitel 6 Überwachtes Lernen: Klassifizierung pg212 ~ [Lernen Sie, indem Sie sich mit Python bewegen! Neues Lehrbuch für maschinelles Lernen]
O'Reilly python3 Primer Lernnotiz
Lernablauf für Python-Anfänger
Techniken im Zusammenhang mit maschinellem Lernen / Klassifizierung
Maschinelles Lernen: Überwacht - Lineare Regression
Python-Lernplan für KI-Lernen
Verbessertes Lernen ab Python
Maschinelles Lernen mit Python! Vorbereitung
Predictive Statistics (Übungsklassifizierung) Python
Überwachtes Lernen 3 Hyperparameter und Abstimmung (2)
Lernnotizen zur Python-Datenanalyse
Maschinelles Lernen: Überwacht - Zufälliger Wald
Python Machine Learning Programming> Schlüsselwörter
Lernen mit dem Lehrer (Rückkehr) 2 Advanced Edition
Maschinelles Lernen: Überwacht - Support Vector Machine
Checkios Empfehlung zum Erlernen von Python
Beginnend mit maschinellem Python-Lernen
Iterative Verarbeitung von Python durch Chemoinfomatik gelernt