探索Sklearn中的分层聚类:数据的智能分组艺术
探索Sklearn中的分层聚类:数据的智能分组艺术
在数据科学领域,聚类是一种将数据点分组成多个簇的无监督学习方法,目的是使得同一簇内的数据点相似度高,而不同簇之间的数据点相似度低。分层聚类(Hierarchical Clustering)是聚类算法的一种,它通过创建一个簇的层次结构来进行数据的聚类。本文将详细介绍如何在Scikit-learn(sklearn)中实现分层聚类,并提供详细的代码示例。
1. 分层聚类简介
分层聚类分为两种类型:凝聚的(自底向上)和分裂的(自顶向下)。凝聚的分层聚类从每个数据点作为单独的簇开始,逐步合并最接近的簇;而分裂的分层聚类从所有数据点属于一个簇开始,逐步分裂直到每个数据点都是一个单独的簇。
2. Sklearn中的分层聚类实现
Sklearn提供了AgglomerativeClustering
类来实现分层聚类。
2.1 凝聚的分层聚类
from sklearn.cluster import AgglomerativeClustering
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
# 生成模拟数据
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
# 创建凝聚的分层聚类实例
clustering = AgglomerativeClustering(n_clusters=4)
# 训练模型
clustering.fit(X)
# 预测簇标签
predicted_labels = clustering.labels_
# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=predicted_labels, cmap='viridis')
plt.show()
2.2 分裂的分层聚类
虽然AgglomerativeClustering
类默认只支持凝聚的聚类,但可以通过设置linkage='ward'
来实现分裂的聚类。
# 创建分裂的分层聚类实例
clustering = AgglomerativeClustering(n_clusters=4, linkage='ward')
# 训练模型
clustering.fit(X)
3. 选择最佳簇数
确定最佳的簇数是分层聚类中的一个关键问题。可以使用树状图(Dendrogram)来辅助决定最佳的簇数。
3.1 绘制树状图
from scipy.cluster.hierarchy import dendrogram, linkage
# 计算链接矩阵
linked = linkage(X, 'ward')
# 绘制树状图
plt.figure(figsize=(10, 7))
dendrogram(linked, orientation='top', labels=range(X.shape[0]))
plt.show()
4. 分层聚类的参数调整
分层聚类的效果会受到一些关键参数的影响,如链接准则(linkage
)和距离度量(affinity
)。
- 链接准则:常见的链接准则包括
'ward'
(最小化簇内的方差)、'complete'
(最长的两个簇成员之间的距离)、'average'
(簇成员的平均距离)等。 - 距离度量:可以是
'euclidean'
、'manhattan'
、'cosine'
等。
5. 分层聚类的应用场景
分层聚类在许多领域都有应用,如市场细分、社交网络分析、生物信息学等。
6. 结论
分层聚类是一种强大的数据探索工具,它能够揭示数据的内在结构。Sklearn的AgglomerativeClustering
类提供了一种简单易用的方式来实现分层聚类。通过本文的介绍和代码示例,读者应该能够理解分层聚类的概念,并学会如何在实际项目中使用Sklearn进行分层聚类。记住,选择合适的链接准则和距离度量,以及正确地确定簇数,对于获得有意义的聚类结果至关重要。
请注意,上述代码示例是为了演示分层聚类的基本用法,实际应用中可能需要根据数据集的特点进行调整和优化。此外,分层聚类的性能可能会受到数据规模和维度的影响,因此在处理大规模或高维数据时可能需要考虑其他聚类算法或降维技术。
原文地址:https://blog.csdn.net/2401_85439108/article/details/140557845
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!