-
多模态谱聚类(Multi-modal Spectral Clustering, MMSC)是一种处理具有
多个表示或视图
的数据集的聚类方法。它旨在通过融合不同模态或视图
下的互补
信息来提高
聚类性能。 -
MMSC的核心在于构建一个
综合
所有视图信息的拉普拉斯矩阵
,并在此基础上执行谱聚类,以得到最终的聚类结果。 -
具体来说,MMSC通过
最小化
每个视图的谱聚类误差
和最小化
多模态聚类的标签矩
阵与每个视图的标签矩阵之间的距离
来优化目标函数。
具体例子与步骤
例子场景:考虑一个图像数据集,其中每个图像有三个不同的特征表示或视图:颜色信息、纹理信息和形状信息。我们的目标是将这些图像根据它们的内容相似性
进行聚类。
涉及的公式:
MMSC的目标函数可以表示为:
min
G
≥
0
,
G
⊤
G
=
I
∑
i
=
1
m
tr
[
(
G
(
i
)
)
⊤
L
(
i
)
G
(
i
)
]
+
α
tr
[
(
G
−
G
(
i
)
)
⊤
(
G
−
G
(
i
)
)
]
\min_{G\geq0, G^\top G=I} \sum_{i=1}^m \text{tr}[(G^{(i)})^\top L^{(i)} G^{(i)}] + \alpha \text{tr}[(G - G^{(i)})^\top(G - G^{(i)})]
G≥0,G⊤G=Imini=1∑mtr[(G(i))⊤L(i)G(i)]+αtr[(G−G(i))⊤(G−G(i))]
其中,
G
是最终的多视图聚类标签矩阵,
G
(
i
)
是针对第
i
个视图的聚类标签矩阵,
L
(
i
)
是第
i
个视图的拉普拉斯矩阵,
α
是一个惩罚系数,用于控制各视图间的一致性。
其中, G 是最终的多视图聚类标签矩阵, G^{(i)} 是针对第 i 个视图的聚类标签矩阵, L^{(i)} 是第 i 个视图的拉普拉斯矩阵, \alpha 是一个惩罚系数,用于控制各视图间的一致性。
其中,G是最终的多视图聚类标签矩阵,G(i)是针对第i个视图的聚类标签矩阵,L(i)是第i个视图的拉普拉斯矩阵,α是一个惩罚系数,用于控制各视图间的一致性。
计算步骤:
-
数据预处理: 对每个视图的数据进行
标准化
处理,确保不同特征尺度的公平比较。 -
构建相似矩阵与拉普拉斯矩阵:
- 对于每个视图 v ,计算相似矩阵 S ( v ) ,通常基于样本间距离或相似度。 对于每个视图 v ,计算相似矩阵 S^{(v)} ,通常基于样本间距离或相似度。 对于每个视图v,计算相似矩阵S(v),通常基于样本间距离或相似度。
- 计算归一化拉普拉斯矩阵 L ( v ) = D ( v ) − S ( v ) ,其中 D ( v ) 是 S ( v ) 的对角度矩阵,用于度量每个样本的度。 计算归一化拉普拉斯矩阵 L^{(v)} = D^{(v)} - S^{(v)} ,其中 D^{(v)} 是 S^{(v)} 的对角度矩阵,用于度量每个样本的度。 计算归一化拉普拉斯矩阵L(v)=D(v)−S(v),其中D(v)是S(v)的对角度矩阵,用于度量每个样本的度。
-
优化目标函数:
- 根据目标函数,通过交替优化方法求解 G ( i ) ,首先固定 G ,求解 G ( i ) ,再固定 G ( i ) 更新 G 。 根据目标函数,通过交替优化方法求解 G^{(i)} ,首先固定 G ,求解 G^{(i)} ,再固定 G^{(i)} 更新 G 。 根据目标函数,通过交替优化方法求解G(i),首先固定G,求解G(i),再固定G(i)更新G。
- 使用公式 G ( i ) = α ( L ( i ) + α I ) − 1 G 来迭代更新 G ( i ) 。 使用公式 G^{(i)} = \alpha(L^{(i)} + \alpha I)^{-1}G 来迭代更新 G^{(i)} 。 使用公式G(i)=α(L(i)+αI)−1G来迭代更新G(i)。
-
求解最终聚类标签矩阵:
- 将上述更新步骤
重复执行
,直至达到某种收敛准则,比如 ( G ) 的变化小于某个阈值。 - 最终的 ( G ) 表示所有视图数据的
综合聚类标签。
- 将上述更新步骤
-
聚类:
- 将优化后的 ( G ) 应用于原始数据,根据其行向量分配每个样本到相应的聚类。
在这个过程中,MMSC通过融合不同视图的信息,可以有效应对单一视图中可能存在的噪声和不完整性
,从而提升聚类的准确性和鲁棒性。
例子
数据集描述
- 模态1(Text):包含10篇文章的
关键词
频率向量,每篇文章用一个100维的向量表示。 - 模态2(Image):每篇文章对应一张图片,通过图像处理技术转化为100维的特征向量。
目标
将这10篇文章根据它们的文本内容
和图像
特征分成3个主题类别。
步骤1:数据预处理
- 对每个模态的数据进行
标准化
处理,确保所有特征在相同尺度上比较。
步骤2:构建相似度矩阵
对于每个模态 v ,构建相似度矩阵 S ( v ) ,使用余弦相似度衡量样本间的相似性。 对于每个模态 v,构建相似度矩阵 S^{(v)},使用余弦相似度衡量样本间的相似性。 对于每个模态v,构建相似度矩阵S(v),使用余弦相似度衡量样本间的相似性。
S
i
j
(
v
)
=
x
i
(
v
)
⋅
x
j
(
v
)
∥
x
i
(
v
)
∥
2
∥
x
j
(
v
)
∥
2
S_{ij}^{(v)} = \frac{\mathbf{x}_i^{(v)} \cdot \mathbf{x}_j^{(v)}}{\|\mathbf{x}_i^{(v)}\|_2 \|\mathbf{x}_j^{(v)}\|_2}
Sij(v)=∥xi(v)∥2∥xj(v)∥2xi(v)⋅xj(v)
其中,
x
i
(
v
)
表示模态
v
下第
i
个样本的特征向量。
其中,\mathbf{x}_i^{(v)} 表示模态 v 下第 i 个样本的特征向量。
其中,xi(v)表示模态v下第i个样本的特征向量。
步骤3:构造拉普拉斯矩阵
计算每个模态的归一化拉普拉斯矩阵 L ( v ) 。 计算每个模态的归一化拉普拉斯矩阵 L^{(v)}。 计算每个模态的归一化拉普拉斯矩阵L(v)。
D
(
v
)
=
diag
(
S
(
v
)
1
)
D^{(v)} = \text{diag}(S^{(v)} \mathbf{1})
D(v)=diag(S(v)1)
L
(
v
)
=
D
(
v
)
−
S
(
v
)
L^{(v)} = D^{(v)} - S^{(v)}
L(v)=D(v)−S(v)
其中,
1
是一个全
1
向量,
D
(
v
)
是
S
(
v
)
的对角度矩阵。
其中,\mathbf{1} 是一个全1向量,D^{(v)} 是 S^{(v)} 的对角度矩阵。
其中,1是一个全1向量,D(v)是S(v)的对角度矩阵。
步骤4:MMSC目标函数
定义MMSC的优化目标,最小化各模态的谱聚类误差和模态间标签矩阵的一致性误差。
min
G
∑
v
=
1
2
Tr
(
G
⊤
L
(
v
)
G
)
+
α
∑
v
=
1
2
Tr
(
(
G
−
G
(
v
)
)
⊤
(
G
−
G
(
v
)
)
)
\min_{G} \sum_{v=1}^2 \text{Tr}(G^\top L^{(v)} G) + \alpha \sum_{v=1}^2 \text{Tr}((G - G^{(v)})^\top (G - G^{(v)}))
Gminv=1∑2Tr(G⊤L(v)G)+αv=1∑2Tr((G−G(v))⊤(G−G(v)))
其中,
G
是最终的聚类标签矩阵,
G
(
v
)
是基于单模态
v
的聚类结果,
α
是一个调节模态间一致性和模态内聚类质量的权重参数。
其中,G 是最终的聚类标签矩阵,G^{(v)} 是基于单模态 v 的聚类结果,\alpha是一个调节模态间一致性和模态内聚类质量的权重参数。
其中,G是最终的聚类标签矩阵,G(v)是基于单模态v的聚类结果,α是一个调节模态间一致性和模态内聚类质量的权重参数。
步骤5:求解G
使用迭代算法求解 G ,一种方法是交替优化 G ( v ) 和 G 。 使用迭代算法求解 G,一种方法是交替优化 G^{(v)} 和 G。 使用迭代算法求解G,一种方法是交替优化G(v)和G。
-
固定 G ,求解每个模态的 G ( v ) 。 固定 G,求解每个模态的 G^{(v)}。 固定G,求解每个模态的G(v)。
G ( v ) = ( α I + L ( v ) ) − 1 G G^{(v)} = (\alpha I + L^{(v)})^{-1}G G(v)=(αI+L(v))−1G -
固定 G ( v ) ,更新 G 。这个步骤可能涉及迭代求解或使用其他优化技术。 固定 G^{(v)},更新 G。这个步骤可能涉及迭代求解或使用其他优化技术。 固定G(v),更新G。这个步骤可能涉及迭代求解或使用其他优化技术。
步骤6:聚类
- 当 (G) 收敛或达到预定迭代次数后,使用 (G) 对每个样本分配聚类标签。
结果评估
- 使用外部指标(如ARI、NMI)评估聚类结果的质量。
import numpy as np
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.metrics.pairwise import cosine_similarity
from scipy.sparse import diags, eye
from scipy.sparse.linalg import eigsh
# 假设数据
# 模态1(文本特征)和模态2(图像特征)
modality1_data = np.random.rand(10, 100) # 10个样本,每个样本100维特征
modality2_data = np.random.rand(10, 128) # 同理,10个样本,每个样本128维特征
# 数据预处理:标准化
modality1_data = (modality1_data - modality1_data.mean(axis=0)) / modality1_data.std(axis=0)
modality2_data = (modality2_data - modality2_data.mean(axis=0)) / modality2_data.std(axis=0)
# 构建相似度矩阵
def build_similarity_matrix(data):
similarity_matrix = cosine_similarity(data)
return similarity_matrix
similarity_matrix1 = build_similarity_matrix(modality1_data)
similarity_matrix2 = build_similarity_matrix(modality2_data)
# 构造拉普拉斯矩阵
def laplacian_matrix(similarity_matrix):
degree_matrix = diags(np.sum(similarity_matrix, axis=1))
return degree_matrix - similarity_matrix
laplacian1 = laplacian_matrix(similarity_matrix1)
laplacian2 = laplacian_matrix(similarity_matrix2)
# 简化示例:交替优化寻找聚类标签(此处使用PCA降维和K-means作为代替)
# 实际MMSC涉及更复杂的优化过程,这里仅示意
# 假设初始聚类中心由第一个模态的KMeans得到
k = 3 # 假设聚类数为3
initial_labels = KMeans(n_clusters=k).fit_predict(modality1_data)
G = np.eye(k)[initial_labels]
# 交替优化简化步骤(理想情况下应迭代优化G和Gv)
# 这里省略了实际的交替优化步骤,直接展示如何利用G进行后续处理
# 实际操作中,您需要设计循环来交替更新G和Gv,并且可能需要梯度下降或其他优化策略
# 假设已得到最终的G,使用G进行聚类
# 注意,真实实现中需要根据G进行具体操作,这里直接使用KMeans展示
final_clusters = KMeans(n_clusters=k).fit_predict(np.hstack((modality1_data, modality2_data)))
print("Final cluster labels:", final_clusters)
Final cluster labels: [0 1 2 1 2 0 1 0 0 0]