Explication détaillée du modèle de clustering k-means en Python
L'analyse de cluster est une méthode utilisée pour découvrir des objets similaires dans les données. Dans des domaines tels que l’exploration de données et l’apprentissage automatique, l’analyse cluster est largement utilisée. Le clustering k-means est l’une des méthodes de clustering les plus courantes. Il peut diviser les échantillons de l'ensemble de données en k clusters, avec la plus petite différence interne dans chaque cluster et la plus grande différence inter-clusters. Cet article présentera en détail le modèle de clustering k-means en Python.
L'algorithme de clustering k-means est une méthode de clustering itérative. Ses principales étapes comprennent : l'initialisation du centre de masse, le calcul de la distance, la mise à jour du centre de masse, la détermination des conditions d'arrêt, etc.
Tout d’abord, vous devez préciser le nombre de clusters k. Ensuite, k échantillons de données sont sélectionnés au hasard comme centroïdes initiaux, et pour chaque échantillon restant, il est attribué au cluster ayant le centroïde le plus proche. Ensuite, la somme des distances au carré de tous les points de données de chaque cluster par rapport au centroïde du cluster est calculée comme l'erreur du cluster. Le centroïde de chaque cluster est ensuite mis à jour, le déplaçant au centre de tous les échantillons de ce cluster. Répétez les étapes ci-dessus jusqu'à ce que l'erreur soit inférieure à un certain seuil ou que la limite supérieure du nombre d'itérations soit atteinte.
En Python, la bibliothèque sklearn fournit la fonction de clustering k-means, qui est le moyen le plus simple d'utiliser l'algorithme de clustering k-means. Ce qui suit prend l'ensemble de données iris comme exemple pour montrer comment utiliser Python pour implémenter le clustering k-means
from sklearn.cluster import KMeans from sklearn.datasets import load_iris iris = load_iris() X = iris.data[:, :2] # 为了便于可视化,只取前两个特征 y = iris.target kmeans = KMeans(n_clusters=3) # 聚成3类 kmeans.fit(X) centroids = kmeans.cluster_centers_ # 质心 labels = kmeans.labels_ # 样本分类 # 绘制图形 import matplotlib.pyplot as plt colors = ['red', 'green', 'blue'] for i in range(len(X)): plt.scatter(X[i][0], X[i][1], c=colors[labels[i]]) for c in centroids: plt.scatter(c[0], c[1], marker='x', s=300, linewidths=3, color='black') plt.show()
Exécutez le code ci-dessus pour générer une image similaire à la suivante :
Dans l'image, le rouge, le vert et le bleu les points représentent respectivement différents clusters. Le symbole « x » noir représente le centre de gravité de chaque cluster.
Comment déterminer la valeur k optimale est l'un des problèmes les plus difficiles de l'algorithme de clustering k-means. Deux méthodes courantes sont présentées ci-dessous : la méthode du coude et la méthode du coefficient de contour.
Méthode Elbow : Tout d'abord, définissez la valeur k sur un entier plus petit et calculez la somme des erreurs quadratiques (SSE) pour chaque cluster. À mesure que la valeur de k augmente, la somme des erreurs quadratiques diminue. Lorsque la valeur k augmente jusqu'à un certain niveau, le SSE ne diminue plus de manière significative. À ce stade, la relation entre la valeur k et SSE est tracée dans un graphique de courbe, qui doit présenter un segment de ligne coudé. Le segment de ligne est ici à la position « coude », et la valeur k correspondante est le nombre optimal de clusters. .
Exemple de code :
sse = [] for i in range(1, 11): kmeans = KMeans(n_clusters=i).fit(X) sse.append(kmeans.inertia_) # ineria_属性表示模型的误差平方和 plt.plot(range(1, 11), sse) plt.xlabel('K') plt.ylabel('SSE') plt.show()
Méthode du coefficient de contour : Le coefficient de silhouette combine les deux facteurs de non-pertinence intra-cluster et de similarité inter-cluster. Plus la valeur du coefficient de silhouette est grande, meilleur est l’effet de regroupement. Le processus de calcul de la méthode du coefficient de silhouette est le suivant :
Pour chaque échantillon, calculez sa distance moyenne par rapport à tous les échantillons de la même grappe (appelée a), et calculez sa distance moyenne par rapport à tous les échantillons des autres grappes les plus proches (appelée b). ).
Calculez le coefficient de silhouette s de chaque échantillon, $s = rac {b-a} {max(a, b)}$. Le coefficient de silhouette de l'ensemble du modèle est la moyenne des coefficients de silhouette de tous les échantillons.
Exemple de code :
from sklearn.metrics import silhouette_score sil_scores = [] for k in range(2, 11): kmeans = KMeans(n_clusters=k).fit(X) sil_score = silhouette_score(X, kmeans.labels_) # 计算轮廓系数 sil_scores.append(sil_score) plt.plot(range(2, 11), sil_scores) plt.xlabel('K') plt.ylabel('Silhouette Coefficient') plt.show()
Le clustering k-means comporte les précautions suivantes :
La valeur initiale a un plus grand impact sur le résultat. Si la valeur initiale n'est pas bonne, vous pouvez obtenir. pires résultats.
Les résultats du clustering dépendent de la métrique de distance sélectionnée, telle que la distance euclidienne, la distance de Manhattan, etc. Le choix doit être fait en fonction de la situation réelle.
Les valeurs aberrantes de l'ensemble de données sont facilement attirées vers les mauvais clusters et leur suppression doit être envisagée.
Lorsque la distribution des classes d'échantillons est déséquilibrée, un problème courant consiste à obtenir des clusters avec des propriétés extrêmement asymétriques.
Le clustering k-means est un algorithme de clustering largement utilisé. En Python, la fonction KMeans fournie par la bibliothèque sklearn peut être utilisée pour l'implémenter rapidement. En même temps, la méthode du coude ou la méthode du coefficient de silhouette peuvent également être utilisées pour déterminer le nombre optimal de clusters. Dans le même temps, il convient de prêter attention au choix de la valeur k et au réglage du barycentre initial lors de l'application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!