news 2026/6/22 23:05:49

第十四章聚类方法理论及Python实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第十四章聚类方法理论及Python实现

文章目录

  • 1.基本概念
    • 1.1 距离or相似度
    • 1.2 类或簇
    • 1.3 类与类之间的距离
  • 2. 层次聚类算法基本理论
    • 2.1 Python代码实现层次分析法例题
  • 3. K均值聚类方法
    • 3.1 K均值算法特性
    • 3.2 Python实现K均值

聚类是针对给定的样本,依据它们特征的相似度或距离,将其归并到若干个“类”或“簇”的数据分析问题。属于无监督学习,核心思路是让同一簇内样本相似度高、不同簇间相似度低。聚类的算法包括很多,常见的可以总结为下表:

归其根本是聚类的核心概念是距离或相似度,有多种相似度或距离的定义,相似度直接影响聚类的结果,所以其选择是聚类的根本问题。下面对“相似度或距离”进行介绍:

1.基本概念

1.1 距离or相似度



1.2 类或簇



1.3 类与类之间的距离

2. 层次聚类算法基本理论



2.1 Python代码实现层次分析法例题

importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.cluster.hierarchyimportlinkage,dendrogram,fcluster# 1. 定义距离矩阵# 输入的5×5距离矩阵(样本0-4)distance_matrix=np.array([[0,7,2,9,3],[7,0,5,4,6],[2,5,0,8,1],[9,4,8,0,5],[3,6,1,5,0]])# 2. 生成层次聚类的"链接矩阵"(凝聚式,基于距离矩阵)fromscipy.spatial.distanceimportsquareform condensed_dist=squareform(distance_matrix)# 执行凝聚式层次聚类(方法:平均链接,也可选single/complete等)linkage_matrix=linkage(condensed_dist,method='average')# method可选:single/complete/averageplt.figure(figsize=(8,5))dendrogram(linkage_matrix,labels=[f"样本{i}"foriinrange(5)],# 样本标签leaf_rotation=0,# 标签旋转角度leaf_font_size=12,color_threshold=3,# 聚类颜色阈值(可调整)above_threshold_color='gray')plt.title('层次聚类树状图(平均链接)')plt.xlabel('样本')plt.ylabel('距离')plt.tight_layout()plt.show()# 4. 从层次聚类中提取指定簇数的聚类结果n_clusters=2# 目标簇数clusters=fcluster(linkage_matrix,t=n_clusters,criterion='maxclust')print(f"各样本的聚类结果(簇数={n_clusters}):")foriinrange(5):print(f"样本{i}→ 簇{clusters[i]}")

3. K均值聚类方法



3.1 K均值算法特性


总的来说,K均值的和核心优点:

  1. 简单高效:算法逻辑直观(迭代分配样本 +更新中心),时间复杂度低(通常为(O(nkt)),n是样本数、k是簇数、t是迭代次数);
  2. 适合大规模数据。易实现与调参仅需指定簇数k和距离度量(常用欧氏距离),参数少、工程落地成本低;
  3. 结果易解释:簇中心(均值)可直接作为簇的“代表”,便于理解每个簇的特征(如用户分群中,簇中心对应典型用户的行为特征)。

缺点有:

  1. 对初始中心敏感:随机选择的初始簇中心可能导致不同的聚类结果(易陷入局部最优),需通过 “K-Means++”(优化初始中心选择)缓解。
  2. 需预先指定簇数k:k的选择依赖经验(可通过肘部法则、轮廓系数辅助,但无绝对标准),选不好会直接影响聚类效果。
  3. 对数据分布有局限:仅适用于球形、密度均匀的簇,对非球形(如环形)、密度差异大的簇效果差。
  4. 抗噪声异常值能力弱:簇中心是均值,异常值会显著 “拉偏” 中心,导致聚类结果失真。

3.2 Python实现K均值

importnumpyasnpfromsklearn.clusterimportKMeansimportmatplotlib.pyplotasplt X=np.array([[0,2],# 样本0(作为第一个初始簇中心)[0,0],# 样本1(作为第二个初始簇中心)[1,0],# 样本2[5,0],# 样本3[5,2]# 样本4])sample_labels=[f"样本{i}"foriinrange(5)]# 样本标签# 2. 手动指定初始簇中心:前两个样本(样本0和样本1)init_centers=X[:2]# 取前两个样本作为初始中心print("=== 手动指定的初始簇中心 ===")print(f"初始中心1(样本1):{init_centers[0]}")print(f"初始中心2(样本2):{init_centers[1]}")# 3. 初始化并训练K-Means模型(指定初始中心)kmeans=KMeans(n_clusters=2,# 簇数固定为2(匹配初始中心数量)init=init_centers,# 手动指定初始簇中心(核心修改点)n_init=1,# 仅运行1次(因为手动指定了初始中心,无需多次初始化)random_state=42# 固定随机种子,结果可复现)y_pred=kmeans.fit_predict(X)# 拟合数据并预测簇标签# 4. 输出核心结果print("\n=== K均值聚类最终结果 ===")print(f"最终簇中心:\n{kmeans.cluster_centers_}")print(f"簇内平方和(SSE):{kmeans.inertia_:.2f}")# 评估簇内紧凑度print("\n各样本的簇分配:")forsample,labelinzip(sample_labels,y_pred):print(f"{sample}→ 簇{label}")# 5. 可视化聚类过程与结果(含初始中心+最终中心)plt.figure(figsize=(10,7))# 绘制所有样本点scatter=plt.scatter(X[:,0],X[:,1],c=y_pred,s=120,cmap='viridis',alpha=0.8,edgecolors='black')# 绘制初始簇中心(蓝色三角形,区分最终中心)plt.scatter(init_centers[:,0],init_centers[:,1],c='blue',s=300,marker='^',label='初始中心(样本0/1)',edgecolors='black')# 绘制最终簇中心(红色星号)plt.scatter(kmeans.cluster_centers_[:,0],kmeans.cluster_centers_[:,1],c='red',s=300,marker='*',label='最终簇中心',edgecolors='black')# 标注每个样本的编号fori,sampleinenumerate(sample_labels):plt.text(X[i,0]+0.1,X[i,1]+0.1,sample,fontsize=12,fontweight='bold')# 图表美化plt.xlabel('特征1',fontsize=12)plt.ylabel('特征2',fontsize=12)plt.title('K均值聚类结果(初始中心为前两个样本)',fontsize=14)plt.grid(alpha=0.3)# 网格线增强可读性plt.legend(loc='upper right')plt.axis('equal')# 等比例坐标轴,避免视觉变形plt.tight_layout()plt.show()在这里插入代码片


这里的样本0和样本4对应书中的样本1和样本5

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 1:06:10

VUE快速入门

VUE是一款用于构建用户界面的渐进式的JavaScript框架 准备&#xff1a;1.引入VUE模块2.创建VUE程序的应用实例&#xff0c;控制视图的元素3.准备元素(div),被Vue控制<body><div id"app"><h1>{{message}}</h1><h2>{{count}}</h2>…

作者头像 李华
网站建设 2026/6/23 4:18:01

Ajax-快速学习

作用&#xff1a;数据交换&#xff1a;通过Ajax可以给服务器发送请求&#xff0c;并获取服务器响应的数据异步交互&#xff1a;可以在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部分网页的技术扩展&#xff1a;同步与异步的区别代码示例<input type&quo…

作者头像 李华
网站建设 2026/6/23 13:09:56

Incoloy 907高性能的铁镍钴基高温合金Incoloy907英科耐尔合金

Incoloy907Incoloy 907是一种高性能的铁镍钴基高温合金&#xff0c;核心优势在于其极低的热膨胀系数与高温强度、抗蠕变能力的结合&#xff0c;专为严苛的热循环环境设计。‌‌核心特性&#xff1a;‌‌极低的热膨胀系数&#xff1a;‌ 这是907最突出的特点&#xff0c;使其在高…

作者头像 李华
网站建设 2026/6/23 11:11:10

Incoloy945X(UNS N09945)镍铁铬基沉淀硬化合金Incoloy 945X合金板材 合金锻件

Incoloy945X(UNS N09945)Incoloy 945X是一种‌高性能镍铁铬基沉淀硬化型特种合金‌&#xff0c;专为‌极端环境‌设计&#xff0c;尤其在‌要求超高强度、优异抗硫化应力腐蚀开裂能力和良好韧性的油气勘探与生产&#xff08;如超深井、高含硫环境&#xff09;‌中表现出色。‌关…

作者头像 李华
网站建设 2026/6/23 7:51:34

Incoloy 020是一种高性能的‌镍-铁-铬合金‌Incoloy020棒料 锻件 带材

Incoloy020Incoloy 020是一种高性能的‌镍-铁-铬合金‌&#xff0c;它的核心优势在于‌卓越的耐腐蚀性‌。‌核心特性&#xff1a;‌‌超级耐腐蚀&#xff08;尤其抗硫酸&#xff09;&#xff1a;‌ 这是它最突出的优点。它在‌中等浓度和温度的硫酸环境‌中表现极佳&#xff0…

作者头像 李华