[PYTHON] L'analyse de clustering la plus basique avec 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% Concernant E3% 82% B0), j'ai touché un peu au début de ce blog, mais je ne peux nier le manque d'explication. Cependant, je pense qu'il existe une opinion selon laquelle scikit-learn ne peut pas être utilisé dans le but souhaité en premier lieu. Par conséquent, je vais expliquer à nouveau le clustering de base par scikit-learn.

Cependant, comme histoire de base, l'histoire se termine par Lire le document original, mais des informations en japonais Je pense qu'il peut y avoir de l'aide.

Groupe basé sur les notes des élèves

Un cas courant est celui où vous souhaitez vous diviser en plusieurs groupes en fonction de la langue nationale, des mathématiques et des notes d'anglais de vos élèves. À ce stade, vous pouvez les diviser dans l'ordre à partir du haut du score total de chaque matière, mais certains étudiants peuvent être bons en japonais mais pas bons en mathématiques, et certains étudiants sont bons en mathématiques mais pas bons en japonais. Il serait malheureux que ces étudiants soient simplement regroupés à partir du haut du score total. C'est là qu'intervient l'analyse de clustering. En regroupant des étudiants ayant des tendances similaires, vous serez en mesure de créer un regroupement plus approprié que les notes les plus élevées.

Écrivez le code de clustering K-means et essayez-le. Faisons le. Veuillez consulter cet article pour une explication détaillée des spécifications du clustering K-means. regarde s'il te plait. Cette fois, divisons les élèves en trois groupes.

import numpy as np
from sklearn.cluster import KMeans

#Donnez les scores des élèves en langue nationale, en mathématiques et en anglais sous forme de tableau
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-signifie regroupement
#Dans cet exemple, il est divisé en trois groupes(Que la graine du nombre aléatoire de Mercenne Twister soit 10.)
kmeans_model = KMeans(n_clusters=3, random_state=10).fit(features)

#Obtenez l'étiquette classée
labels = kmeans_model.labels_

#étiquette(Équipe), Notes et score total de 3 matières
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

À propos, il semble qu'ils aient été divisés en trois groupes. Examinons le contenu. Tout d'abord, les étudiants avec une étiquette de 2 sont un groupe relativement excellent avec des scores élevés. Ensuite, en regardant les étudiants avec une étiquette de 1, il y a des étudiants qui ne sont bons qu'en japonais et ceux qui ne sont pas aussi bons que le japonais, bien qu'ils soient au milieu. Apparemment, cela semble être un groupe d'étudiants proches des arts libéraux. Les élèves avec une note finale de 0 sont classés comme ceux dont les notes sont légèrement inférieures dans l'ensemble ou qui sont bons en mathématiques.

Résumé

De cette façon, au lieu de diviser en trois groupes à partir du haut du score total, nous avons pu nous diviser en groupes selon la tendance de chaque élève.

Même dans un problème réel, l'analyse de clustering peut être effectuée si la nature est bien sélectionnée et le vecteur numérique est dessiné de cette manière.

Avec scikit-learn, le clustering K-means lui-même peut être effectué en une seule ligne, afin que vous puissiez ressentir la puissance puissante de la bibliothèque d'apprentissage automatique.

Recommended Posts

L'analyse de clustering la plus basique avec scikit-learn
Clustering avec scikit-learn (1)
Clustering avec scikit-learn (2)
Clustering avec scikit-learn + DBSCAN
DBSCAN (clustering) avec scikit-learn
Affinons les hyper paramètres du modèle avec scikit-learn!
[Scikit-learn] J'ai joué avec la courbe ROC
Regrouper les écoles représentatives à l'été 2016 avec scikit-learn
Isomap avec Scikit-learn
Clustering avec python-louvain
DBSCAN avec scikit-learn
Prédisez le deuxième tour de l'été 2016 avec scikit-learn
PCA avec Scikit-learn
kmeans ++ avec scikit-learn
Filtrage coordonné avec analyse des composants principaux et clustering K-means
Calculer le coefficient de régression d'une analyse de régression simple avec python
Résumé du flux de base de l'apprentissage automatique avec Python
Résolution du problème de l'iris avec scikit-learn ver1.0 (régression logistique)
Validation croisée avec scikit-learn
Analyse du panier avec Spark (1)
SVM multi-classes avec scikit-learn
Analyse de dépendance avec CaboCha
Apprentissage Scikit-Learn avec la chimioinfomatique
Analyse vocale par python
Analyse vocale par python
Analyse dynamique par Valgrind
Effectuer une analyse de régression avec NumPy
Analyse de données avec Python
Installez scikit.learn avec pip
Calculer tf-idf avec scikit-learn
Visualisez les résultats des arbres de décision réalisés avec Python scikit-learn
J'ai écrit la grammaire de base de Python dans Jupyter Lab
J'ai écrit le fonctionnement de base de matplotlib dans Jupyter Lab