20 06 2023
层次聚类是一种常用的无监督学习方法,可以将数据集划分为不同的簇。在Python中,我们可以使用scikit-learn库来实现层次聚类算法。 以下是一个简单的层次聚类代码示例: ```python import numpy as np from scipy.cluster.hierarchy import dendrogram, linkage from matplotlib import pyplot as plt # 创建一个随机数据集 X = np.random.rand(10, 2) # 使用ward方法进行层次聚类 Z = linkage(X, 'ward') # 绘制树状图 dendrogram(Z) plt.show() ``` 在这个示例中,我们首先导入了需要使用的库,包括numpy、scipy和matplotlib。我们创建了一个随机的二维数据集X,并使用ward方法进行层次聚类。然后,我们使用dendrogram函数绘制了聚类结果的树状图。 当然,这只是一个非常简单的示例。在实际应用中,我们可能需要对数据进行预处理、选择合适的距离度量方法、确定最佳的聚类数量等。下面是一个稍微复杂一些的层次聚类示例: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from scipy.cluster.hierarchy import dendrogram, linkage from sklearn.preprocessing import StandardScaler from sklearn.metrics import silhouette_score # 读取数据集 df = pd.read_csv('data.csv') # 将数据标准化 scaler = StandardScaler() X = scaler.fit_transform(df) # 使用平均连通性进行层次聚类 Z = linkage(X, 'average') # 绘制树状图 plt.figure(figsize=(10, 5)) plt.title('Hierarchical Clustering Dendrogram') plt.xlabel('Index') plt.ylabel('Distance') dendrogram(Z) plt.show() # 计算轮廓系数 for n_clusters in range(2, 6): cluster_labels = linkage(X, 'average', n_clusters=n_clusters) silhouette_avg = silhouette_score(X, cluster_labels) print("For n_clusters =", n_clusters, "The average silhouette_score is :", silhouette_avg) ``` 这个示例中,我们首先读取了一个名为data.csv的数据集,并使用StandardScaler对数据进行标准化处理。然后,我们使用平均连通性方法进行层次聚类,并绘制了聚类结果的树状图。最后,我们计算了不同聚类数量下的轮廓系数,以帮助确定最佳的聚类数量。 需要注意的是,在实际应用中,我们可能需要进行更多的预处理和调参工作,以确保获得最佳的聚类效果。同时,我们也可以尝试其他的聚类算法,如K-means、DBSCAN等。
延伸阅读
    太平山别墅:在香港体验独特的山居生活
    想留下五百赫兹的信号,低通滤波器的截止频率应该是多少
    市场营销策划实训日志
    大学生如何适应国家重大战略需求促进 自身发展?
    满塘荷花别样红,写一首描写荷花的七言诗