Maison  >  Article  >  développement back-end  >  Explication détaillée de l'algorithme de clustering hiérarchique en Python

Explication détaillée de l'algorithme de clustering hiérarchique en Python

WBOY
WBOYoriginal
2023-06-10 09:28:372549parcourir

L'algorithme de clustering hiérarchique est un algorithme d'apprentissage non supervisé qui regroupe des points de données. Il est également appelé algorithme de clustering hiérarchique ou algorithme de clustering hiérarchique. Il fusionne en continu les points ou clusters les plus similaires en fonction de la similarité ou de la distance entre les points, et obtient finalement une structure arborescente (également appelée arbre de clustering ou arbre de classification), divisant tous les points en plusieurs clusters.

Python est l'un des langages de programmation les plus utilisés, avec de nombreux outils puissants de traitement et de visualisation des données, et il existe de nombreuses implémentations d'algorithmes de clustering hiérarchique. Dans cet article, nous discuterons des méthodes et de quelques bonnes pratiques pour implémenter des algorithmes de clustering hiérarchique en Python.

Préparation des données

Avant de commencer le clustering hiérarchique, vous devez préparer l'ensemble de données pour le clustering. De manière générale, ces ensembles de données doivent remplir les conditions suivantes :

  • L'ensemble de données doit être numérique. Les données non numériques peuvent provoquer des erreurs dans l'algorithme.
  • L'ensemble de données doit être prétraité, c'est-à-dire qu'il a subi une standardisation, une sélection de fonctionnalités ou d'autres opérations de prétraitement pour éliminer les biais et le bruit des données.

En Python, nous pouvons utiliser la bibliothèque pandas pour charger, préparer et prétraiter les données. pandas fournit la structure de données DataFrame, qui peut facilement gérer les données tabulaires. Voici un exemple simple :

import pandas as pd

# 读取csv文件
data = pd.read_csv('data.csv')

# 对数据进行预处理(比如标准化)
data = (data - data.mean()) / data.std()

Dans celui-ci, nous appelons d'abord la fonction read_csv de pandas pour lire un fichier csv, puis normalisons les données lues pour mettre les données dans l'algorithme. read_csv函数读取一个csv文件,然后将读取的数据进行标准化处理,以便将数据放入算法中。

聚类算法的选择

在Python中,有许多聚类算法可供选择,而层次聚类算法是其中之一。但是,它需要根据数据的特征和需求来选择合适的算法。

在经典层次聚类算法中,有两种主要的链接方法:最小距离和最大距离。最小距离(或称为单联通性)方法比较两个群体中最相似的点,而最大距离(或称为全联通性)方法则比较两个群体中最不相似的点。另外,还有一种平均链接方法(也叫UPGMA算法),它使用两个群体之间的平均距离来计算相似性。在Python中,我们可以使用scipy库中的linkage函数来执行层次聚类。以下是一个简单的例子:

from scipy.cluster.hierarchy import linkage

# 进行层次聚类
Z = linkage(data, method='single')

在这个例子中,我们使用linkage函数进行最小距离聚类。该函数的第一个参数是数据,第二个参数是使用的链接方法。这里我们使用了'single'方法,即最小距离链接方法。

树形结构的可视化

树形结构是层次聚类算法的核心部分,可以使用树状图对其进行可视化。Python提供了许多用于可视化的工具,其中最流行的两个是matplotlib和seaborn库。

以下是一个使用matplotlib库绘制树状图的简单例子:

import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import dendrogram

fig, ax = plt.subplots(figsize=(15, 10))

# 绘制树状图
dendrogram(Z, ax=ax, leaf_font_size=8)
plt.show()

在这个例子中,我们首先创建了一个带有ax轴的画布,然后调用dendrogram函数绘制树状图。该函数的第一个参数是Z矩阵,第二个参数是轴对象。leaf_font_size参数用于调整叶子大小。

使用seaborn库我们可以获得更美观和交互性更强的可视化效果。以下是使用seaborn库绘制树状图的例子:

import seaborn as sns

sns.set(style='white')

# 将聚类结果转换为DataFrame
df = pd.DataFrame({'x': data.index, 'y': Z[:, 2]})

# 绘制树状图
sns.scatterplot(x='x', y='y', data=df, s=50, legend=False)
plt.show()

在这个例子中,我们首先将聚类结果转换为一个数据帧,然后使用seaborn库中的scatterplot函数绘制树状图。s参数用于调整点的大小。

簇的选择

在层次聚类算法中,有两种选择簇的方法:基于距离(即树状图中的高度)和基于数量。基于距离是指将最大距离或最小距离设为阈值,并将树状图割开,形成簇。基于数量是指选择一定数量的簇,通常是从最大距离或最小距离开始。这两种方法都有其优点和缺点,需要根据具体情况选择。

以下是一个将层次聚类结果转换为簇列表的简单例子:

from scipy.cluster.hierarchy import fcluster

# 将层次聚类结果转换为簇列表
clusters = fcluster(Z, t=2.0, criterion='distance')

在这个例子中,我们使用fcluster

Choix de l'algorithme de clustering

En Python, il existe de nombreux algorithmes de clustering parmi lesquels choisir, et l'algorithme de clustering hiérarchique en fait partie. Cependant, cela nécessite de sélectionner un algorithme approprié en fonction des caractéristiques et des besoins des données.

Dans les algorithmes de clustering hiérarchique classiques, il existe deux méthodes de liaison principales : la distance minimale et la distance maximale. La méthode de la distance minimale (ou connectivité simple) compare les points les plus similaires dans deux populations, tandis que la méthode de la distance maximale (ou connectivité totale) compare les points les moins similaires dans les deux populations. De plus, il existe une méthode de lien moyen (également appelée algorithme UPGMA), qui utilise la distance moyenne entre deux groupes pour calculer la similarité. En Python, nous pouvons utiliser la fonction linkage dans la bibliothèque scipy pour effectuer un clustering hiérarchique. Voici un exemple simple : 🎜rrreee🎜Dans cet exemple, nous utilisons la fonction linkage pour le clustering à distance minimale. Le premier paramètre de cette fonction est les données et le deuxième paramètre est la méthode de liaison à utiliser. Ici, nous utilisons la méthode 'single', qui est la méthode de lien à distance minimale. 🎜🎜Visualisation de la structure arborescente🎜🎜La structure arborescente est la partie centrale de l'algorithme de clustering hiérarchique, qui peut être visualisée à l'aide d'un dendrogramme. Python fournit de nombreux outils de visualisation, deux des plus populaires sont les bibliothèques matplotlib et seaborn. 🎜🎜Ce qui suit est un exemple simple d'utilisation de la bibliothèque matplotlib pour dessiner un dendrogramme : 🎜rrreee🎜Dans cet exemple, nous créons d'abord un canevas avec un axe axe, puis appelons la fonction dendrogram pour dessiner la photo de l'arbre. Le premier paramètre de cette fonction est la matrice Z et le deuxième paramètre est l'objet axe. Le paramètre leaf_font_size est utilisé pour ajuster la taille de la feuille. 🎜🎜En utilisant la bibliothèque Seaborn, nous pouvons obtenir des visualisations plus belles et interactives. Voici un exemple d'utilisation de la bibliothèque seaborn pour dessiner un dendrogramme : 🎜rrreee🎜 Dans cet exemple, nous convertissons d'abord les résultats du clustering en un bloc de données, puis utilisons la fonction scatterplot dans la bibliothèque seaborn. pour dessiner l'image de l'arbre. Le paramètre s permet d'ajuster la taille des points. 🎜🎜Sélection de clusters🎜🎜Dans les algorithmes de clustering hiérarchique, il existe deux méthodes de sélection de clusters : basée sur la distance (c'est-à-dire la hauteur dans le dendrogramme) et basée sur le nombre. Basé sur la distance, cela signifie définir la distance maximale ou la distance minimale comme seuil et diviser le dendrogramme pour former des clusters. La méthode numérique fait référence à la sélection d'un certain nombre de clusters, généralement en commençant par la distance maximale ou minimale. Les deux méthodes ont leurs avantages et leurs inconvénients et doivent être choisies au cas par cas. 🎜🎜Ce qui suit est un exemple simple de conversion de résultats de clustering hiérarchique en une liste de clusters : 🎜rrreee🎜Dans cet exemple, nous utilisons la fonction fcluster pour convertir les résultats de clustering hiérarchique en une liste de clusters. Le premier paramètre de cette fonction est la matrice Z, le deuxième paramètre est le seuil et le troisième paramètre est le critère de détermination du type de seuil. 🎜🎜Résumé🎜🎜Dans cet article, nous avons discuté des méthodes et de quelques bonnes pratiques pour implémenter des algorithmes de clustering hiérarchique en Python. Nous avons d’abord examiné la préparation des données, puis discuté de la sélection d’algorithmes et de la visualisation des structures arborescentes. Enfin, nous discutons des méthodes de sélection de clusters. Ces méthodes peuvent nous aider à mieux comprendre l’algorithme de clustering hiérarchique, afin que nous puissions l’appliquer à nos propres données et tirer des conclusions utiles. 🎜

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn