首页 > 其他分享 >[机器学习复习笔记] Spectral Clustering 谱聚类

[机器学习复习笔记] Spectral Clustering 谱聚类

时间:2023-11-05 23:56:08浏览次数:39  
标签:Spectral Clustering frac text 矩阵 cdots ij 聚类

Spectral Clustering 谱聚类

1. 邻接矩阵

无向图 \(G = (V, E)\),所有顶点之间的权重构成一个 \(n \times n\) 的矩阵:

\[W = \begin{bmatrix} w_{11} & w_{12} & \cdots & w_{1n} \\ w_{21} & w_{22} & \cdots & w_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ w_{n1} & w_{n2} & \cdots & w_{nn} \end{bmatrix} \]

邻接矩阵 \(W\) 有 \(w_{ij} = w_{ji}\)


2. 度与度矩阵

传统的节点的度数指的是相连的边的个数,但在谱聚类问题中,有些不一样,公式如下:

\[d_i = \sum_{n}^{j = 1} w_{ij} \]

即节点 \(i\) 的度数为所有邻接的边的权值之和

由此可以得到度矩阵

\[D = \begin{bmatrix} d_1 & 0 & \cdots & 0 \\ 0 & d_2 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 0 \end{bmatrix} \]


3. 相似矩阵及衡量方法

图中各个顶点的相似度衡量主要基于距离的度量,也就是说空间两个点的距离越近,则它们越相似,距离越远,则它们越不相似。通过 样本点 之间的距离 \(s_{ij}\) 得到 相似图矩阵 \(S\) ,以此来得到 邻接矩阵 \(W\)。

在向量空间中任意两个向量 \(x_i\)
和 \(x_j\)
的距离为 \(s_{ij} = ||x_i - x_j||^2_2\)
​​​。

以下是三种相似图衡量方法(相似矩阵的计算方法)。

  • \(\epsilon\) — 近邻法

    采用欧式距离计算两个顶点的距离,设定一个阈值 \(\epsilon\),使得:

    \[w_{ij} = \begin{cases} 0, & s_{ij} > \epsilon \\ \epsilon, & s_{ij} \le \epsilon \end{cases} \]

  • \(k\) 近邻法

    取与顶点最近的 \(k\) ​个顶点,该顶点与这 \(k\) 个顶点的权重都大于0,但这会导致最后所得的相似矩阵不一定是对称的,因为一个点 \(v_i\) 在另外一个点 \(v_j\) 的 \(k\) 个近邻中,并不能保证 \(v_i\) 也在点 \(v_j\) 的 \(k\) 个近邻中。

    有两种方法可以解决不对称的问题:

    • 两个顶点 \(v_i\) 与 \(v_j\) 存在其中一个点在另一个点的 \(k\) 近邻中,则令 \(w_{ij} = w_{ji} = \frac{1}{s_{ij}}\);反之,则令 \(w_{ij} = w_{ji} = 0\) :

    \[w_{ij} = w_{ji} = \begin{cases} 0, & v_i \not \in \text{KNN}(v_j) \; \text{and} \; v_j \not \in \text{KNN}(v_i) \\ \frac{1}{s_{ij}}, & v_i \in \text{KNN}(v_j) \; \text{or} \; v_j \in \text{KNN}(v_i) \end{cases} \]

    • 两个顶点 \(v_i\) 与 \(v_j\) 只有同时在对方的 \(k\) 近邻中,则令 \(w_{ij} = w_{ji} = \frac{1}{s_{ij}}\);反之,则令 \(w_{ij} = w_{ji} = 0\) :

    \[w_{ij} = w_{ji} = \begin{cases} 0, & v_i \not \in \text{KNN}(v_j) \; \text{or} \; v_j \not \in \text{KNN}(v_i) \\ \frac{1}{s_{ij}}, & v_i \in \text{KNN}(v_j) \; \text{and} \; v_j \in \text{KNN}(v_i) \end{cases} \]

  • 全连接法

    将所有的顶点都连接起来。然后通过度量空间中某种对称度量算子来计算顶点之间的相似度。

    此处以 高斯核 \(\text{RBF}\) 函数为例(也可以是多项式核函数、 \(\text{sigmoid}\) 函数),计算两个顶点之间的相似度:

    \[w_{ij} = w_{ji} = \text{exp}(- \frac{||v_i - v_j||^2_2}{2 \sigma^2}) \]

    高斯核函数的曲线其实也是一个高斯分布图。高斯核里有运用到euclidean distance(欧几里得距离),顶点距离也是越远相似度越低,这和高斯核是符合的。另外高斯核的度量都是大于0,这也符合谱聚类中对于相似度量的要求。

    还有一点就是,使用的二范数的平方这一度量来衡量相似度,所以这也满足了所求相似矩阵是一个对称矩阵的要求。


4. 拉普拉斯矩阵

4.1 非规范化的图拉普拉斯矩阵

也叫图拉普拉斯矩阵,此处的 \(L\) 是 非规范化的图拉普拉斯矩阵

\[L = D - W \]

其中 \(D\) 为度矩阵,\(W\) 为邻接矩阵。

4.2 规范化的图拉普拉斯矩阵

有如下两种规范化图拉普拉斯矩阵:

\[L_{\text{sym}} = D^{- \frac{1}{2}}LD^{- \frac{1}{2}} = I - D^{- \frac{1}{2}}WD^{-\frac{1}{2}} \]

\[L_{\text{rw}} = D^{-1}L = I - D^{-1}W \]

其中 \(L_{\text{sym}}\) 为 对称矩阵 ,\(\text{sym}\) 为单词symmetric缩写; \(L_{\text{rw}}\) 与随机游走相关,超过了课程考试讨论的范围,不多说了。 主要是我也不会


5. 谱聚类的过程

任务是要分成 \(k\) 类,得到簇划分 \(\mathcal C = \{C_1, C_2, \cdots , C_k \}\)。

  1. 计算样本点之间的距离,得到 相似矩阵 $S ;

  2. 选择一个衡量方法(一般选择全连接法,即使用 \(\text{RBF}\) 高斯核函数 计算相似度),通过 相似矩阵 \(S\) 得到 邻接矩阵 \(W\) ;

  3. 根据 邻接矩阵 \(W\) 来计算得到 度矩阵 \(D\) ;

  4. 通过 \(L = D - W\) 计算得到 拉普拉斯矩阵 \(L\) ;

  5. 拉普拉斯矩阵 \(L\) 进行标准化,即构建 规范化拉普拉斯矩阵 为 \(D^{- \frac{1}{2}}LD^{- \frac{1}{2}}\) (一般采用第一种,当然不进行规范化也是可以的);

  6. 拉普拉斯矩阵 进行 特征值分解,获取前 \(k\) 小的特征值对应的特征向量,构成特征矩阵 \(Q\),有 \(Q = [q_1, q_2, \cdots, q_k]\),其中 \(q_i\) 是大小为 \(1 \times n\) 的列向量,表示选取的第 \(i\) 小的特征向量;

  7. 特征矩阵 \(Q\) 中的所有行 \(r_1, r_2, \cdots, r_n\) 进行 聚类,一般使用 \(\text{K-means}\) 算法进行聚类,得到簇划分 \(\mathcal C = \{C_1, C_2, \cdots , C_k \}\) ;

  8. 得到原始数据分组 \(\mathcal A = \{A_1, A_2, \cdots , A_k \}\) ,其中 \(A_i = \{v_j | r_j \in C_i\}\) (\(v_j\) 为第 \(j\) 个样本点,\(r_j\) 为第 \(j\) 个样本点对应的所构成的 特征矩阵 \(Q\) 的行特征向量)。

PS:第 5 步可以省去,直接对 拉普拉斯矩阵 \(L\) 进行特征值分解。


6. 谱聚类核心代码

6.1 手写实现

import numpy as np
from sklearn.metrics import pairwise_distances
from sklearn.cluster import KMeans
from sklearn.cluster import SpectralClustering

X, y = ... # 数据

# 相似度矩阵,使用 RBF
def w(x, y, sigma=2.50):
    return np.exp(-1.0 * (x - y).T @ (x - y) /(2 * sigma**2)) # 高斯径向基核函数

# 邻接矩阵
W = pairwise_distances(X, metric=w)

# 度矩阵
D = np.diag(W.sum(axis=1))

# 拉普拉斯矩阵
L = D - W

# 拉普拉斯矩阵规范化,不计算也行
L_norm = np.sqrt(np.linalg.inv(D)) @ L @ np.sqrt(np.linalg.inv(D))

# 特征分解
eigenvals, eigvector = np.linalg.eig(L_norm)

# 将特征值按照升序排列
ind = np.argsort(eigenvals)
eig_vec_sorted = eigvector[:,ind] #对应的特征向量也要相应调整顺序

# 取出前k个最小的特征值对应的特征向量,k和要聚类的簇数一样
k = 3
Q = eig_vec_sorted[:, :k] # 特征矩阵

# 对特征矩阵Q进行聚类 训练得到模型
model = KMeans(n_clusters=k)
Q = np.real(Q)

# 用得到的模型进行预测
y_pred = model.fit_predict(Q)

6.2 调用 sklearn 实现

from sklearn.cluster import SpectralClustering 

X, y = ... # 数据

# 谱聚类
k = 3
model = SpectralClustering(n_clusters=k) 

# 预测
y_pred = model.fit_predict(X) 

参考文章

一文带你深入浅出地搞懂谱聚类

谱聚类算法

标签:Spectral,Clustering,frac,text,矩阵,cdots,ij,聚类
From: https://www.cnblogs.com/MAKISE004/p/17811603.html

相关文章

  • K-means聚类算法
    目录K-means聚类算法聚类和分类的区别找相似簇是什么K-means和KNN中理解K的含义如何量化“相似”1)随机选择质心%20%E9%9A%8F%E6%9C%BA%E9%80%89%E6%8B%A9%E8%B4%A8%E5%BF%83)2)求出新质心点%20%E6%B1%82%E5%87%BA%E6%96%B0%E8%B4%A8%E5%BF%83%E7%82%B9)总结Sklearn使用K-means算......
  • 关于“聚类算法”
        今天我在csdn上看到一篇文章关于聚类算法的文章。我了解到聚类算法是一类无监督学习的算法,用于将数据集中的对象按照相似性进行分组或聚集。聚类算法的目标是将相似的数据点归为一类,同时将不相似的数据点分开。        常见的聚类算法包括:1.K-means聚类算法。......
  • R语言文本挖掘:kmeans聚类分析上海玛雅水公园景区五一假期评论词云可视化|附代码数据
    互联网时代,大量的新闻信息、网络交互、舆情信息以文本形式存储在数据库中,如何利用数据分析和文本挖掘的算法,将海量文本的价值挖掘出来,成为我们团队近期的一个研究方向,本案例就是我们的一个尝试。文本聚类其实也就是聚类分析在文本方向上的应用,首先我们要把一个个文档的自然语言转......
  • R语言有限混合模型聚类FMM、广义线性回归模型GLM混合应用分析威士忌市场和研究专利申
    最近我们被客户要求撰写关于有限混合模型聚类FMM的研究报告,包括一些图形和统计输出。摘要有限混合模型是对未观察到的异质性建模或近似一般分布函数的流行方法。它们应用于许多不同的领域,例如天文学、生物学、医学或营销。本文给出了这些模型的概述以及许多应用示例。介绍有限混合......
  • 【scipy 基础】--聚类
    物以类聚,聚类算法使用最优化的算法来计算数据点之间的距离,并将它们分组到最近的簇中。Scipy的聚类模块中,进一步分为两个聚类子模块:vq(vectorquantization):提供了一种基于向量量化的聚类算法。vq模块支持多种向量量化算法,包括K-means、GMM(高斯混合模型)和WAVG(均匀分布)。hierar......
  • SPSS Modeler分析物流发货明细数据:K-MEANS(K均值)聚类和Apriori关联规则挖掘|附代码数据
    全文链接:http://tecdat.cn/?p=32633原文出处:拓端数据部落公众号物流发货明细数据在现代物流业中扮演着至关重要的角色。通过对这些数据进行挖掘和分析,我们可以发现隐含在背后的供应链运营规律和商业模式,从而指导企业在物流策略、成本管理和客户服务等方面做出更加科学和有效的决......
  • R语言上市公司经营绩效实证研究 ——因子分析、聚类分析、正态性检验、信度检验|附代
    全文链接:http://tecdat.cn/?p=32747原文出处:拓端数据部落公众号随着我国经济的快速发展,上市公司的经营绩效成为了一个备受关注的话题。本文旨在探讨上市公司经营绩效的相关因素,并运用数据处理、图示、检验和分析等方法进行深入研究,帮助客户对我国45家上市公司的16项财务指标进行......
  • K-medoids聚类算法
    发展:们每次选簇的平均值作为新的中心,迭代直到簇中对象分布不再变化。因此一个具有很大极端值的对象会扭曲数据分布,造成算法对极端值敏感在聚类分析中,异常值通常会引起问题,因为它们可能会被分配到一个独立的聚类,从而干扰正常的聚类结果。这可能导致聚类算法产生不合理或不稳定的......
  • R语言改进的K-Means(K-均值)聚类算法分析股票盈利能力和可视化|附代码数据
    全文链接:http://tecdat.cn/?p=32418原文出处:拓端数据部落公众号大量数据中具有"相似"特征的数据点或样本划分为一个类别。聚类分析提供了样本集在非监督模式下的类别划分。人们在投资时总期望以最小的风险获取最大的利益,面对庞大的股票市场和繁杂的股票数据,要想对股票进行合理......
  • 据类方法之:KMeans聚类分析
    书接上回,在上一篇博客中完成了数据的降维分析,这里在降维后的基础上继续进行聚类分析,使用前2个PC进行KMeans据类并可视化。fromsklearn.clusterimportKMeansfromcollectionsimportCounter#语言定义颜色和画布colors=['b','g','r','y','k','c','m�......