[PYTHON] Die grundlegendste Clusteranalyse mit Scikit-Learn

scikit-learn + [Clustering](http://ja.wikipedia.org/wiki/%E3%83%87%E3%83% BC% E3% 82% BF% E3% 83% BB% E3% 82% AF% E3% 83% A9% E3% 82% B9% E3% 82% BF% E3% 83% AA% E3% 83% B3% In Bezug auf E3% 82% B0) habe ich es am Anfang dieses Blogs ein wenig berührt, aber ich kann den Mangel an Erklärung nicht leugnen. Ich denke jedoch, dass es eine Meinung gibt, dass Scikit-Lernen überhaupt nicht für den gewünschten Zweck verwendet werden kann. Daher werde ich das grundlegende Clustering durch Scikit-Learn noch einmal erklären.

Als grundlegende Geschichte endet die Geschichte jedoch mit Lesen Sie das Originaldokument, aber japanischen Informationen Ich denke, dass es Hilfe geben kann.

Gruppe basierend auf den Noten der Schüler

Ein häufiger Fall ist, wenn Sie anhand der Landessprache, der Mathematik und der Englischnoten Ihrer Schüler in mehrere Gruppen einteilen möchten. Zu diesem Zeitpunkt können Sie sie in der Reihenfolge von der Spitze der Gesamtpunktzahl jedes Fachs trennen, aber einige Schüler sind möglicherweise gut in Japanisch, aber nicht gut in Mathematik, und einige Schüler sind gut in Mathematik, aber nicht gut in Japanisch. Es wäre bedauerlich, wenn diese Schüler einfach von der Spitze der Gesamtpunktzahl gruppiert würden. Hier kommt die Clusteranalyse ins Spiel. Durch Gruppieren von Schülern mit ähnlichen Einstufungstendenzen können Sie eine geeignetere Gruppierung als nur die Bestnoten erstellen.

Schreiben Sie den Code für K-means Clustering und probieren Sie es aus. Machen wir das. Eine ausführliche Erläuterung der Spezifikationen der K-Mittel-Clusterbildung finden Sie in diesem Artikel. schauen Sie bitte. Lassen Sie uns diesmal die Schüler in drei Gruppen einteilen.

import numpy as np
from sklearn.cluster import KMeans

#Geben Sie die Noten für Landessprache, Mathematik und Englisch der Schüler als Array an
features = np.array([
        [  80,  85, 100 ],
        [  96, 100, 100 ],
        [  54,  83,  98 ],
        [  80,  98,  98 ],
        [  90,  92,  91 ],
        [  84,  78,  82 ],
        [  79, 100,  96 ],
        [  88,  92,  92 ],
        [  98,  73,  72 ],
        [  75,  84,  85 ],
        [  92, 100,  96 ],
        [  96,  92,  90 ],
        [  99,  76,  91 ],
        [  75,  82,  88 ],
        [  90,  94,  94 ],
        [  54,  84,  87 ],
        [  92,  89,  62 ],
        [  88,  94,  97 ],
        [  42,  99,  80 ],
        [  70,  98,  70 ],
        [  94,  78,  83 ],
        [  52,  73,  87 ],
        [  94,  88,  72 ],
        [  70,  73,  80 ],
        [  95,  84,  90 ],
        [  95,  88,  84 ],
        [  75,  97,  89 ],
        [  49,  81,  86 ],
        [  83,  72,  80 ],
        [  75,  73,  88 ],
        [  79,  82,  76 ],
        [ 100,  77,  89 ],
        [  88,  63,  79 ],
        [ 100,  50,  86 ],
        [  55,  96,  84 ],
        [  92,  74,  77 ],
        [  97,  50,  73 ],
        ])

# K-bedeutet Clustering
#In diesem Beispiel ist es in drei Gruppen unterteilt(Der Keim der Zufallszahl von Mercenne Twister sei 10.)
kmeans_model = KMeans(n_clusters=3, random_state=10).fit(features)

#Holen Sie sich das Etikett, das klassifiziert wurde
labels = kmeans_model.labels_

#Etikette(Mannschaft), Noten und Gesamtpunktzahl von 3 Probanden
for label, feature in zip(labels, features):
    print(label, feature, feature.sum())
#=>
# 2 [ 80  85 100] 265
# 2 [ 96 100 100] 296
# 0 [54 83 98] 235
# 2 [80 98 98] 276
# 2 [90 92 91] 273
# 1 [84 78 82] 244
# 2 [ 79 100  96] 275
# 2 [88 92 92] 272
# 1 [98 73 72] 243
# 2 [75 84 85] 244
# 2 [ 92 100  96] 288
# 2 [96 92 90] 278
# 1 [99 76 91] 266
# 2 [75 82 88] 245
# 2 [90 94 94] 278
# 0 [54 84 87] 225
# 1 [92 89 62] 243
# 2 [88 94 97] 279
# 0 [42 99 80] 221
# 0 [70 98 70] 238
# 1 [94 78 83] 255
# 0 [52 73 87] 212
# 1 [94 88 72] 254
# 1 [70 73 80] 223
# 2 [95 84 90] 269
# 2 [95 88 84] 267
# 2 [75 97 89] 261
# 0 [49 81 86] 216
# 1 [83 72 80] 235
# 1 [75 73 88] 236
# 1 [79 82 76] 237
# 1 [100  77  89] 266
# 1 [88 63 79] 230
# 1 [100  50  86] 236
# 0 [55 96 84] 235
# 1 [92 74 77] 243
# 1 [97 50 73] 220

Übrigens scheinen sie sicher in drei Gruppen eingeteilt worden zu sein. Lassen Sie uns den Inhalt hinterfragen. Erstens sind die Schüler mit einem Label von 2 eine relativ gute Gruppe mit hohen Punktzahlen. Wenn man sich die Schüler mit der Bezeichnung 1 ansieht, gibt es einige Schüler, die nur gut Japanisch können, und diejenigen, die andere als Japanisch nicht so gut können, obwohl sie in der Mitte sind. Anscheinend scheint es sich um eine Gruppe von Studenten zu handeln, die den freien Künsten nahe stehen. Schüler mit der Endnote 0 werden als Schüler mit insgesamt etwas schlechteren Noten oder mit guten Mathematikkenntnissen eingestuft.

Zusammenfassung

Auf diese Weise konnten wir uns nicht von der Spitze der Gesamtpunktzahl in drei Gruppen aufteilen, sondern entsprechend der Tendenz jedes Schülers in Gruppen aufteilen.

Selbst in einem realen Problem kann eine Clusteranalyse durchgeführt werden, wenn die Natur gut ausgewählt und der numerische Vektor auf diese Weise gezeichnet wird.

Mit scikit-learn kann K-means Clustering selbst in nur einer Zeile durchgeführt werden, sodass Sie die Leistungsfähigkeit der Bibliothek für maschinelles Lernen spüren können.

Recommended Posts

Die grundlegendste Clusteranalyse mit Scikit-Learn
Clustering mit Scikit-Learn (1)
Clustering mit Scikit-Learn (2)
Clustering mit scikit-learn + DBSCAN
DBSCAN (Clustering) mit Scikit-Learn
Lassen Sie uns die Hyperparameter des Modells mit scikit-learn abstimmen!
[Scikit-learn] Ich habe mit der ROC-Kurve gespielt
Clustering repräsentativer Schulen im Sommer 2016 mit Scikit-Learn
Isomap mit Scikit-lernen
Clustering mit Python-Louvain
DBSCAN mit Scikit-Learn
Prognostizieren Sie die zweite Runde des Sommers 2016 mit scikit-learn
PCA mit Scikit-Learn
kmeans ++ mit scikit-learn
Koordinierte Filterung mit Hauptkomponentenanalyse und K-Mittel-Clustering
Berechnen Sie den Regressionskoeffizienten der einfachen Regressionsanalyse mit Python
Zusammenfassung des grundlegenden Ablaufs des maschinellen Lernens mit Python
Lösen des Irisproblems mit scikit-learn ver1.0 (logistische Regression)
Kreuzvalidierung mit Scikit-Learn
Korbanalyse mit Spark (1)
Mehrklassen-SVM mit Scikit-Learn
Abhängigkeitsanalyse mit CaboCha
Scikit-Lernen mit Chemoinfomatik
Sprachanalyse mit Python
Sprachanalyse mit Python
Dynamische Analyse von Valgrind
Führen Sie eine Regressionsanalyse mit NumPy durch
Datenanalyse mit Python
Installieren Sie scikit.learn mit pip
Berechnen Sie tf-idf mit scikit-learn
Visualisieren Sie die Ergebnisse von Entscheidungsbäumen, die mit Python scikit-learn erstellt wurden
Ich habe die grundlegende Grammatik von Python in Jupyter Lab geschrieben
Ich habe die Grundoperation von matplotlib in Jupyter Lab geschrieben