机器学习-层次聚类(谱系聚类)算法

article/2025/10/8 22:08:14

文章目录

  • 简介
  • 距离矩阵
  • 最短距离法
  • 最长距离法
  • 类平均法
  • 重心法
  • python应用

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

简介


层次聚类(Hierarchical Clustreing)又称谱系聚类,通过在不同层次上对数据集进行划分,形成树形的聚类结构。很好体现类的层次关系,且不用预先制定聚类数,对大样本也有较好效果。

算法步骤:

  1. 计算类间距离矩阵
  2. 初始化n个类,将每个样本视为一类
  3. 在距离矩阵中选择最小的距离,合并这两个类为新类
  4. 计算新类到其他类的距离,得到新的距离矩阵
  5. 重复3-4步,直至最后合并为一个类

首先介绍距离矩阵的计算,然后第4步有不同的算法来定义新类到其他类的距离,包括:最短距离法、最长距离法、类平均法、重心法等。

距离矩阵


使用距离来作为样品间的相似性度量,往往常用欧氏距离。

比如给定数据:

x1x2x3
247
587
466

该数据包含特征x1、x2和x3,第一个样品[2,4,7],第二个样品[5,8,7],第三个样品[4,6,6],将每个样品各看作一类, G i = { i } , i = 1 , 2 , 3 , 4 G_i=\{i\},i=1,2,3,4 Gi={i},i=1,2,3,4
根据欧式距离:
d ( x i , x j ) = [ ∑ k = 1 p ( x i k − x j k ) 2 ] 1 2 d(x_i,x_j)=[\sum^p_{k=1}(x_{ik}-x_{jk})^2]^{\frac{1}{2}} d(xi,xj)=[k=1p(xikxjk)2]21

D 12 = D 21 = ( 2 − 5 ) 2 + ( 4 − 8 ) 2 + ( 7 − 7 ) 2 = 5 D_{12}=D_{21}=\sqrt{(2-5)^2+(4-8)^2+(7-7)^2}=5 D12=D21=(25)2+(48)2+(77)2 =5
D 13 = D 31 = ( 2 − 4 ) 2 + ( 4 − 6 ) 2 + ( 7 − 6 ) 2 = 3 D_{13}=D_{31}=\sqrt{(2-4)^2+(4-6)^2+(7-6)^2}=3 D13=D31=(24)2+(46)2+(76)2 =3
D 23 = D 32 = ( 5 − 4 ) 2 + ( 8 − 6 ) 2 + ( 7 − 6 ) 2 = 6 ≈ 2.5 D_{23}=D_{32}=\sqrt{(5-4)^2+(8-6)^2+(7-6)^2}=\sqrt{6}≈2.5 D23=D32=(54)2+(86)2+(76)2 =6 2.5

也就是距离矩阵D为:

G 1 G_1 G1 G 2 G_2 G2 G 3 G_3 G3
G 1 G_1 G10
G 2 G_2 G250
G 3 G_3 G332.50

由于是对称矩阵,给出下三角即可。

除了欧式距离,也可使用其他距离公式。或者使用相关系数来度量,越接近1表示越相关,计算相关系数矩阵。

最短距离法


设类 G r G_r Gr G p , G q G_p,G_q Gp,Gq合并得来,包含 n r = n p + n q n_r=n_p+n_q nr=np+nq个样品,最短距离法:
D r k = m i n { D p d , D q k } D_{rk}=min\{D_{pd},D_{qk}\} Drk=min{Dpd,Dqk}
在上述矩阵 D D D中, D 23 = 2.5 D_{23}=2.5 D23=2.5最小,也就是合并 G 2 G_2 G2 G 3 G_3 G3为新类 G 4 = { 2 , 3 } G_4=\{2,3\} G4={2,3}

用最短距离法,计算新类到其他类距离:
D 41 = m i n { D 21 , D 3 , 1 } = m i n { 5 , 3 } = 3 D_{41}=min\{D_{21},D_{3,1}\}=min\{5,3\}=3 D41=min{D21,D3,1}=min{5,3}=3

得到新的距离矩阵D’为:

G 1 G_1 G1 G 4 G_4 G4
G 1 G_1 G10
G 4 G_4 G430

重复上述步骤,在D’中合并取 D 14 = 3 D_{14}=3 D14=3最小,合并类 G 1 G_1 G1 G 4 G_4 G4为新类,此时只有一个类,流程结束。

根据上述步骤绘制谱系图,横坐标就是每个类,纵坐标表示合并两个类时的值:
在这里插入图片描述
根据谱系图,如果要聚类为2类,从上往下看首次出现了2个分支的地方,即将样品0分为一类,样品1、2分为另一类。

最长距离法


设类 G r G_r Gr G p , G q G_p,G_q Gp,Gq合并得来,包含 n r = n p + n q n_r=n_p+n_q nr=np+nq个样品,最长距离法:
D r k = m a x { D p d , D q k } D_{rk}=max\{D_{pd},D_{qk}\} Drk=max{Dpd,Dqk}
在上述矩阵 D D D中, D 23 = 2.5 D_{23}=2.5 D23=2.5最小,也就是合并 G 2 G_2 G2 G 3 G_3 G3为新类 G 4 = { 2 , 3 } G_4=\{2,3\} G4={2,3}

用最长距离法,计算新类到其他类距离:
D 41 = m a x { D 21 , D 3 , 1 } = m i n { 5 } = 5 D_{41}=max\{D_{21},D_{3,1}\}=min\{5\}=5 D41=max{D21,D3,1}=min{5}=5

得到新的距离矩阵D’为:

G 1 G_1 G1 G 4 G_4 G4
G 1 G_1 G10
G 4 G_4 G450

重复上述步骤,在D’中合并取 D 14 = 5 D_{14}=5 D14=5最小,合并类 G 1 G_1 G1 G 4 G_4 G4为新类,此时只有一个类,流程结束。

得到谱系图如下:
在这里插入图片描述

类平均法


设类 G r G_r Gr G p , G q G_p,G_q Gp,Gq合并得来,包含 n r = n p + n q n_r=n_p+n_q nr=np+nq个样品,类平均法:
D r k = n p n r D p k + n q n r D q k D_{rk}=\frac{n_p}{n_r}D_{pk}+\frac{n_q}{n_r}D_{qk} Drk=nrnpDpk+nrnqDqk
在上述矩阵 D D D中, D 23 = 2.5 D_{23}=2.5 D23=2.5最小,也就是合并 G 2 G_2 G2 G 3 G_3 G3为新类 G 4 = { 2 , 3 } G_4=\{2,3\} G4={2,3}

用类平均法,计算新类到其他类距离:
D 41 = 1 2 × 5 + 1 2 × 3 = 4 D_{41}=\frac{1}{2}×5+\frac{1}{2}×3=4 D41=21×5+21×3=4

得到新的距离矩阵D’为:

G 1 G_1 G1 G 4 G_4 G4
G 1 G_1 G10
G 4 G_4 G440

重复上述步骤,在D’中合并取 D 14 = 4 D_{14}=4 D14=4最小,合并类 G 1 G_1 G1 G 4 G_4 G4为新类,此时只有一个类,流程结束。

得到谱系图如下:
在这里插入图片描述

插播反爬信息 )博主CSDN地址:https://wzlodq.blog.csdn.net/

重心法


设类 G r G_r Gr G p , G q G_p,G_q Gp,Gq合并得来,包含 n r = n p + n q n_r=n_p+n_q nr=np+nq个样品,重心法:
D r k = [ n p n r D p k 2 + n q n r D q k 2 − n p n r n q n r D p q 2 ] 1 2 D_{rk}=[\frac{n_p}{n_r}D_{pk}^2+\frac{n_q}{n_r}D_{qk}^2-\frac{n_p}{n_r}\frac{n_q}{n_r}D_{pq}^2]^{\frac{1}{2}} Drk=[nrnpDpk2+nrnqDqk2nrnpnrnqDpq2]21
在上述矩阵 D D D中, D 23 = 2.5 D_{23}=2.5 D23=2.5最小,也就是合并 G 2 G_2 G2 G 3 G_3 G3为新类 G 4 = { 2 , 3 } G_4=\{2,3\} G4={2,3}

用重心法,计算新类到其他类距离:
D 41 = [ 1 2 5 2 + 1 2 3 2 − 1 2 1 2 6 2 ] 1 2 = 15.5 ≈ 3.9 D_{41}=[\frac{1}{2}5^2+\frac{1}{2}3^2-\frac{1}{2}\frac{1}{2}\sqrt{6}^2]^{\frac{1}{2}}=\sqrt{15.5}≈3.9 D41=[2152+213221216 2]21=15.5 3.9

得到新的距离矩阵D’为:

G 1 G_1 G1 G 4 G_4 G4
G 1 G_1 G10
G 4 G_4 G43.90

重复上述步骤,在D’中合并取 D 14 = 3.9 D_{14}=3.9 D14=3.9最小,合并类 G 1 G_1 G1 G 4 G_4 G4为新类,此时只有一个类,流程结束。

得到谱系图如下:

在这里插入图片描述

python应用


  1. 使用scipy库中的linkage函数
    linkage(y, method=‘single’, metric=‘euclidean’)
    method取值single表示最短距离法、complete最长距离法、average类平均法、centroid重心法。
import pandas as pd
from matplotlib import pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkagedata = [[76.1, 74.33, 78.01],[74.91, 73.31, 76.63],[72.54, 70.68, 74.57],[71.65, 69.96, 73.57],[69.87, 68.29, 71.79],[73.34, 71.51, 75.36],[73.1, 71.38, 75.04],[72.37, 70.39, 74.66]]
data = pd.DataFrame(data, columns=['X1', 'X2', 'X3'],index=['北京', '天津', '河北', '山西', '内蒙古', '辽宁', '吉林', '黑龙江'])
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(6, 5))
#  用最短距离法
plt.subplot(2, 2, 1)
plt.tight_layout(pad=2.5)
plt.title('最短距离法')
z1 = linkage(data, 'single')
dendrogram(z1)#  用最长距离法
plt.subplot(2, 2, 2)
plt.title('最长距离法')
z2 = linkage(data, 'complete')
dendrogram(z2)#  用类平均法
plt.subplot(2, 2, 3)
plt.title('类平均法')
z3 = linkage(data, 'average')
dendrogram(z3)#  用重心法
plt.subplot(2, 2, 4)
plt.title('重心法')
z4 = linkage(data, 'centroid')
dendrogram(z4)
plt.show()

在这里插入图片描述
在这里插入图片描述

  1. 使用sklearn库中的AgglomerativeClustering函数
    使用linkage参数定义合并算法。
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from scipy.cluster.hierarchy import dendrogram
from sklearn.cluster import AgglomerativeClusteringdef plot_dendrogram(model, **kwargs):  # 可视化counts = np.zeros(model.children_.shape[0])n_samples = len(model.labels_)for i, merge in enumerate(model.children_):current_count = 0for child_idx in merge:if child_idx < n_samples:current_count += 1else:current_count += counts[child_idx - n_samples]counts[i] = current_countlinkage_matrix = np.column_stack([model.children_, model.distances_, counts]).astype(float)dendrogram(linkage_matrix, **kwargs)data = [[76.1, 74.33, 78.01],[74.91, 73.31, 76.63],[72.54, 70.68, 74.57],[71.65, 69.96, 73.57],[69.87, 68.29, 71.79],[73.34, 71.51, 75.36],[73.1, 71.38, 75.04],[72.37, 70.39, 74.66]]
data = pd.DataFrame(data, columns=['X1', 'X2', 'X3'],index=['北京', '天津', '河北', '山西', '内蒙古', '辽宁', '吉林', '黑龙江'])plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(6, 5))
#  用最短距离法
plt.subplot(2, 2, 1)
plt.tight_layout(pad=2.5)
plt.title('最短距离法')
model1 = AgglomerativeClustering(linkage='single', distance_threshold=0, n_clusters=None)
model1.fit(data)
plot_dendrogram(model1)
print("标签:", model1.labels_)
print("合并节点:", model1.children_)#  用最长距离法
plt.subplot(2, 2, 2)
plt.title('最长距离法')
model2 = AgglomerativeClustering(linkage='complete', distance_threshold=0, n_clusters=None)
model2.fit(data)
plot_dendrogram(model2)#  用类平均法
plt.subplot(2, 2, 3)
plt.title('类平均法')
model3 = AgglomerativeClustering(linkage='average', distance_threshold=0, n_clusters=None)
model3.fit(data)
plot_dendrogram(model3)#  用重心法
plt.subplot(2, 2, 4)
plt.title('重心法')
model4 = AgglomerativeClustering(linkage='ward', distance_threshold=0, n_clusters=None)
model4.fit(data)
plot_dendrogram(model4)
plt.show()

在这里插入图片描述
在这里插入图片描述

原创不易,请勿转载本不富裕的访问量雪上加霜
博主首页:https://wzlodq.blog.csdn.net/
来都来了,不评论两句吗👀
如果文章对你有帮助,记得一键三连❤


http://chatgpt.dhexx.cn/article/KPxBLCsj.shtml

相关文章

到底什么是谱聚类算法?

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达本文转自&#xff1a;视学算法 谱聚类算法是目前最流行的聚类算法之一&#xff0c;其性能及适用场景优于传统的聚类算法如k-均值算法&#xff0c;本文对谱聚类算法进行了…

图像聚类-谱聚类

最近做的一个东西跟这个相关&#xff0c;本来希望是用深度学习对于没有标签的图像数据进行分类&#xff0c;但是通常情况下&#xff0c;深度学习是对有标签的数据进行学习&#xff0c;目的是用来自动提取特征&#xff0c;代替传统的手工提取特征。因此&#xff0c;比较容易想到…

聚类算法实践(二)——谱聚类、Chameleon聚类

上一篇文章里说到的层次聚类和K-means聚类&#xff0c;可以说是聚类算法里面最基本的两种方法&#xff08;wiki的cluster analysis页面都把它们排前两位&#xff09;。这次要探讨的&#xff0c;则是两个相对“高级”一点的方法&#xff1a;谱聚类和chameleon聚类。 4、谱聚类 …

谱聚类的案例

1. 政治博客数据集(见附件Pol_Blogs_CSV文件) 数据集网址一: Political blogs 数据集网址二: http://www.casos.cs.cmu.edu/computational_tools/datasets/external/polblogs/index11.php 政治博客数据是由Adamic和Glance于2005年收集并分析的. 该数据集包含了2004年美国总…

谱聚类算法 matlab

1、谱聚类算法步骤公式 &#xff08;1&#xff09;整理数据集&#xff0c;使数据集中数据在0-1之间。假设数据集m行n列。 &#xff08;2&#xff09;求邻接矩阵W。元素值为每一点到其他点之间距离&#xff0c;即权重。 &#xff08;3&#xff09;求相似度矩阵S&#xff0c;相…

谱聚类(Spectral Clustering)详解

原文地址为&#xff1a; 谱聚类(Spectral Clustering)详解 谱聚类(Spectral Clustering)详解 谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法——将带权无向图划分为两个或两个以上的最优子图&#xff0c;使子图内部尽量相似&#xff0c;而子图间距离尽量距离较远&…

从拉普拉斯矩阵说到谱聚类

从拉普拉斯矩阵说到谱聚类 0 引言 11月1日上午&#xff0c;机器学习班 第7次课&#xff0c;邹讲聚类&#xff08;PPT&#xff09;&#xff0c;其中的谱聚类引起了自己的兴趣&#xff0c;邹从最基本的概念&#xff1a;单位向量、两个向量的正交、方阵的特征值和特征向量&#xf…

聚类--谱聚类

前言&#xff1a;关于谱聚类&#xff0c;已经有很多厉害的老师和大牛写过教程博客等&#xff0c;也有很不错的tutorial文章可供参考。此博文仅记述个人的一些总结、思考、疑问&#xff0c;算是对现有谱聚类学习资源的一个小补充。 1. 谱聚类简述 说到聚类&#xff0c;可能最先…

MATLAB 谱聚类

k-means 可以说是思想最简单的聚类了&#xff0c;但是它在应对非凸数据时却显得手足无措&#xff0c;例如如下的数据分类&#xff1a; 各类之间虽然间隔较远&#xff0c;但是非凸&#xff0c;这时候就需要引入谱聚类了(以下为谱聚类效果)。 本文参考 [1]Ulrike von Luxburg. A…

谱聚类算法详解

谱聚类&#xff08;Spectral Clustering&#xff09;算法简单易行&#xff0c;其聚类性能优于传统的K-means算法。谱聚类将数据的划分转化为对图的分割&#xff0c;是一种基于图论的聚类方法&#xff0c;其直观理解为根据图内点的相似度将图分为多个子图&#xff0c;使子图内部…

谱聚类算法简单理解

一、算法思想 谱聚类是基于图论的知识所演化出的算法&#xff0c;在聚类中广泛使用。主要思想是将所有的数据看成空间中的点&#xff0c;这些点之间可以用边连接起来&#xff0c;距离较远的两点之间边的权重值较低&#xff0c;距离较近的两点间边的权重值较高&#xff0c;然后…

了解聚类是什么。聚类方法:k-means、核聚类、层次聚类、谱聚类

聚类 1.什么是聚类2.聚类方法2.1 划分式聚类方法k-meansk-meansbi-kmeans 基于密度的方法DBSCANOPTICS算法 层次化聚类算法核聚类支持向量聚类谱聚类引言优缺点步骤 参考文档:参考 1.什么是聚类 定义 聚类(Clustering) 是按照某个特定标准(如距离)把一个数据集分割成不同的类…

【聚类】谱聚类解读、代码示例

【聚类】谱聚类详解、代码示例 文章目录 【聚类】谱聚类详解、代码示例1. 介绍2. 方法解读2.1 先验知识2.1.1 无向权重图2.1.2 拉普拉斯矩阵 2.2 构建图&#xff08;第一步&#xff09;2.2.1 ϵ \epsilon ϵ 邻近法2.2.2 k 近邻法2.2.3 全连接法 2.3 切图&#xff08;第二步&a…

谱聚类(Spectral Clustering)原理及Python实现

谱聚类原理及Python实现 图模型 无向带权图模型 G<V,E> G < V , E > &#xff0c;每一条边上的权重 wij w i j 为两个顶点的相似度&#xff0c;从而可以定义相似度矩阵 W W ,此外还可以定义度矩阵D" role="presentation" style="position: …

谱聚类算法(Spectral Clustering)

谱聚类算法(Spectral Clustering) 谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法——将带权无向图划分为两个或两个以上的最优子图&#xff0c;使子图内部尽量相似&#xff0c;而子图间距离尽量距离较远&#xff0c;以达到常见的聚类的目的。其中的最优是指最优目标…

谱聚类(spectral clustering)及其实现详解

Preface 开了很多题&#xff0c;手稿都是写好一直思考如何放到CSDN上来&#xff0c;一方面由于公司技术隐私&#xff0c;一方面由于面向对象不同&#xff0c;要大改&#xff0c;所以一直没贴出完整&#xff0c;希望日后可以把开的题都补充全。 先把大纲列出来&#xff1a; 一…

谱聚类算法

1. 算法思想 将所有的数据看成空间中的点&#xff0c;这些点之间可以用边连接起来。距离较远的点之间边的权重低&#xff0c;距离较近的点间边的权重高。然后对原图进行切图&#xff0c;使得不同子图间边的权重之和尽可能低&#xff0c;子图内边的权重之和尽可能高&#xff0c…

谱聚类(Spectral Clustering)算法介绍

一. 前言 本来想写关于聚类系列算法的介绍,但是聚类系列的其它几个算法原理比较简单,网上有大量的教程可以查阅。这里主要是介绍一下谱聚类算法,做一个学习笔记,同时也希望对想要了解该算法的朋友有一个帮助。关于聚类的其他系列算法,这里推荐一个写的很不错的博客。 谱…

聚类系列-谱聚类(spectral clustering)

聚类讲到此&#xff0c;也是我聚类系列的最后一篇博客了&#xff0c;最后一篇的话我们就来讲一下谱聚类。 谱聚类&#xff08;spectral clustering&#xff09;是一种基于图论的聚类方法&#xff0c;主要思想是把所有的数据看做空间中的点&#xff0c;这些点之间可以用边连接起…

谱聚类(spectral clustering)

1. 谱聚类概述 谱聚类是从图论中演化出来的算法&#xff0c;后来在聚类中得到了广泛的应用。它的主要思想是把所有的数据看做空间中的点&#xff0c;这些点之间可以用边连接起来。距离较远的两个点之间的边权重值较低&#xff0c;而距离较近的两个点之间的边权重值较高&#x…