[PYTHON] K Nachbarschaftsmethode (Mehrklassenklassifikation)

Was ist die K-Nachbarschaftsmethode?

KNN (K nächster Nachbar). Eine Methode zur Klassendiskriminierung. Die Trainingsdaten werden auf dem Vektorraum aufgezeichnet, und wenn unbekannte Daten erhalten werden, werden alle K Stücke in der Reihenfolge der Entfernung von den unbekannten Daten erfasst, und die Klasse, zu der die Daten gehören, wird durch eine Mehrheitsentscheidung geschätzt.

Im Fall der folgenden Abbildung ist der Fluss der Klassendiskriminierung beispielsweise wie folgt. 1 Zeichnen Sie bekannte Daten (Trainingsdaten) als gelbe und violette Kreise. 2 Entscheiden Sie die Anzahl von K. Wie K = 3. 3 Wenn ein roter Stern als unbekannte Daten erhalten wird, erfassen Sie drei von den nächstgelegenen Punkten. 4 Schätzen Sie die Klasse, zu der die drei Klassen gehören. Dieses Mal wird geschätzt, dass der unbekannte rote Stern zur Klasse B gehört.

スクリーンショット 2016-05-04 3.33.02.png

Vorbereitung der Nutzungsdaten

Bereiten Sie den Iris-Datensatz mit sklearn vor.

{get_iris_dataset.py}


from sklearn.datasets import load_iris
iris= load_iris() #Iris-Datenerfassung
X = iris.data     #Erklärende Variable(Variablen für die Klassenschätzung)
Y = iris.target   #Objektive Variable(Klassenwert)

#Konvertieren Sie Irisdaten in DataFrame
iris_data = DataFrame(X, columns=['Sepal Length', 'Sepal Width', 'Petal Length', 'Petal Width'])
iris_target = DataFrame(Y, columns=['Species'])

# iris_Da das Ziel ein Wert zwischen 0 und 2 ist, ist es schwer zu verstehen. Konvertieren Sie es daher in Ayames Namen
def flower(num):
"""Namenskonvertierungsfunktion"""
    if num == 0:
        return 'Setosa'
    elif num == 1:
        return 'Veriscolour'
    else:
        return 'Virginica'

iris_target['Species'] = iris_target['Species'].apply(flower)
iris = pd.concat([iris_data, iris_target], axis=1)

Datenübersicht

{describe_iris.py}


iris.head()
スクリーンショット 2016-05-04 3.45.38.png

スクリーンショット 2016-05-04 3.50.37.png  の長さと幅のデータ

Koppeln Sie das Grundstück mit Seaboan und sehen Sie sich die Übersicht nach Klassen an

{desplay_each_data.py}


import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')
%matplotlib inline

sns.pairplot(iris, hue = 'Species', size =2) # hue:Aufgeteilt nach angegebenen Daten
スクリーンショット 2016-05-04 3.54.59.png

Setosa [blauer Punkt] scheint leicht zu klassifizieren zu sein. Veriscolour [grüner Punkt] und Virginia [roter Punkt] können nach Blütenblattlänge klassifiziert werden? Eindruck über.

Versuchen

Führen Sie KNN mit sklearn aus.

{do_knn.py}


from sklearn.neighbors import KNeighborsClassifier
from sklearn.cross_validation import train_test_split #Für Zug- und Testaufteilung

#Datenvorbereitung für Zug und Test. Prüfung_Geben Sie das Verhältnis der Testdaten zur Größe an. zufällig_Stellen Sie für den Status den Startwert entsprechend ein.
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.4, random_state=3) 

knn = KNeighborsClassifier(n_neighbors=6) #Instanzgenerierung. n_neighbors:Anzahl von K.
knn.fit(X_train, Y_train)                 #Ausführung der Modellerstellung
Y_pred = knn.predict(X_test)              #Vorausschauende Ausführung

#Importieren Sie die Bibliothek und führen Sie sie zur Genauigkeitsprüfung aus
from sklearn import metrics
metrics.accuracy_score(Y_test, Y_pred)    #Messung der Vorhersagegenauigkeit
> 0.94999999999999996

Genauigkeit von ca. 95%.

Die Genauigkeit ändert sich abhängig von der Anzahl der K. → Ich weiß nicht, welches K verwendet werden soll, daher ändere ich K auf verschiedene Arten und zeichne ein Diagramm mit Änderungen der Genauigkeit.

{create_graph_knn_accracy_change_k.py}


accuracy = []
for k in range(1, 90):
    knn = KNeighborsClassifier(n_neighbors=k) #Instanzgenerierung.
    knn.fit(X_train, Y_train)                 #Ausführung der Modellerstellung
    Y_pred = knn.predict(X_test)              #Vorausschauende Ausführung
    accuracy.append(metrics.accuracy_score(Y_test, Y_pred)) #Präzisionslagerung

plt.plot(k_range, accuracy)

Das Ergebnis einer 90-fachen Drehung

スクリーンショット 2016-05-04 4.10.41.png

K = 3? Ist genug. Wenn es 30 überschreitet, verschlechtert sich die Genauigkeit. Da diesmal nur 90 Trainingsdaten vorliegen, gibt es nur etwa 30 Trainingsdaten pro Klasse. Wenn die Anzahl von K 30 überschreitet und alle Daten der richtigen Antwortklasse enthalten sind, können nur verschiedene Klassen in der nächsten Umgebung erfasst werden, sodass erwartet wird, dass die Genauigkeit immer schlechter wird.

Recommended Posts

K Nachbarschaftsmethode (Mehrklassenklassifikation)
[Python] [scikit-learn] k-Einführung in das Memo der Methode des nächsten Nachbarn
SVM (Mehrklassenklassifikation)
Naive Buchten (Mehrklassenklassifikation)
Keras Multiklassenklassifikation Iris
Maschinelles Lernen #k Nachbarschaftsmethode und deren Implementierung und verschiedene
Implementierte k-Neighborhood-Methode in Python von Scikit Learn
2. Multivariate Analyse in Python 8-1. K Nachbarschaftsmethode (Scikit-Learn)
ROC-Kurve für die Klassifizierung mehrerer Klassen
Maschinelles Lernen ④ K-nächster Nachbar Zusammenfassung
2. Multivariate Analyse in Python 8-3. K Nachbarschaftsmethode [Schnittstellenüberprüfung]
Klassifizierung nach der k-Nachbarschaftsmethode (kNN) nach Python ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
2. Multivariate Analyse in Python 8-2. K Nachbarschaftsmethode [Gewichtungsmethode] [Rückgabemodell]