Skip to content

聚类方法

约 1018 个字 预计阅读时间 3 分钟

Warning

这章我看的昏昏的,只算预发布

一些定义

样本间距

dij=(k=1p|xikxjk|r)1r

首先计算协方差矩阵 S

S=1n1i=1n(xix¯)(xix¯)T

首先计算协方差矩阵 S

rij=SijSiiSjj
cosθij=xiTxjxiTxixjTxj

一些矩阵

S=i=1n(xix¯)(xix¯)T
S=1n1i=1n(xix¯)(xix¯)T

类相关定义

一个类就是数据集的一个子集

类内最远间距

DG=maxxixjGdij

也就是所有样本的平均值

x¯=1nxiGxi

可以使用两类中样的最短距离,最长距离,中心距离或者平均距离

聚合聚类

聚合聚类三要素为:

  • 样本间距
  • 合并规则
  • 停止条件

给定以上三要素,一般的聚合聚类的算法为:

  • 开始:每个样本为一个类
  • 重复:一句合并规则(一般为找到最小类间间距),合并两类
  • 停止:达到停止条件即返回,比如类的个数达到要求

该算法的复杂度为O(n3m),其中 m 为维度数,n 为样本个数

聚合聚类属于层次聚类,因为我们可以得到从 n 类-1 类这一系列的分类结果

注意在过程中我们可以使用[dij]矩阵来加速运算

K-means

时间复杂度为O(mnk)

k 的选取应该大到类直径不再减小为止

谱聚类

数学上,谱字一般跟特征值分解的方法有关

我们把数据集{(xi)}中的每一个点都对应到一个无向完全图上的点,两点之间连边的权重设置为它们的相似度。

相似度

wij=e||xixj||22σ2

显然,距离越近,相似度越大。

对于那些足够遥远的点,我们可以不再相连,直接把相似度置 0.如何确定这些足够遥远的点呢 - 用 k 近邻确定几个邻近的点 - 用一个ϵ半径来区分远近

定义一个点的度为其所有边的权重和,那么我们可以得到下面三个矩阵

矩阵定义

Dii=j=1nwij
W=[wij]
L=DW

我们可以发现如下性质:

  • L 的行和为 0
  • L 有一个特征向量为 0,该特征值有一个特征向量为全 1
  • L 有 n 个非负特征值,n 是顶点数
  • L 办正定,且fTLf=12ij=1nwij(fifj)2
  • L 零特征值的重数等于连通子图的个数

所以当 L 只有一个连通子图的时候,零特征值只有 1 重,也就是全 1 向量

当 L 的连通图多于一个的时候,加入 L 可以写成:

L=[L1000L2000]

那么其对应的零特征向量为:

[110000][001100][000011]

基本上可以认为,每个连通子图自己构成一个分块Li,这个Li也有一个自己对应的特征零向量

那么我们将这些特征向量拼接成一个矩阵

F=[f1f2fn]

然后按照行对其进行聚类就可以(也就是说每个连通子图被聚成一类)

Comments