Day1(2022.8.8)
一.谱聚类算法介绍
1.基本思想
(1)采用无向图思想,数据集中的每个样本点视为一个节点,样本点之间的相似度用节点之间的权重表示(相似度越高,权重越大)。对图进行划分,相似度高的节点划分在一起,得到一个子图,就得到一个簇,连接不同簇的边的权重应该较小
(2)距离较远的两个点的相似性较低,距离较近的两个点的相似性较高
2.输入输出
输入:包含n个样本点的数据集,降维后的维度,聚类数目,聚类方法(以最常用的k-means为例),相似矩阵生成方式(以最常用的基于高斯核距离的全连接生成方式为例)
输出:聚类得到的簇,,...,
3.基本流程
(1)利用高斯核函数对样本点之间的相似性进行度量,构建数据集的相似矩阵(也就是边的权重矩阵)W,采用的是全连接法
,其中代表节点 和节点 之间的距离
每两个样本点之间都有一个相似度,距离越大相似度越低
(2)构建数据级的度矩阵D
,其中每个非零元素代表一个节点的度(即与该节点相连的所有边的权重之和)
(3)构建数据集的为标准化的拉普拉斯矩阵L
L是对称和半正定的
且L有n个非负的实数特征值
(4)将L标准化
(4)求解的特征值和特征向量,选出前小特征值对应的特征向量,用他们构成特征矩阵V
是一个的矩阵
(5)将V的每一行单位化,即使得,得到矩阵U
例如
(6)用k-means算法对新的样本 (也就是矩阵U的每一个行向量,每个样本点都是维度的)聚类成簇,,...,
每一个簇包含若干个样本点(行向量)
(7)输出簇,其中
二.个人思考
1.所谓谱,就是指方阵的全体特征值,谱聚类是通过对样本的拉普拉斯矩阵进行聚类,从而间接达到对原样本聚类的目的
2.谱聚类的基础是图论和线性代数相关知识(如文中提得最多的矩阵、特征值、特征向量等) ,要想掌握谱聚类算法,进而展开后续的并行优化,就必须先把这两方面的基础知识回顾一遍并把与算法相关的知识搞清楚
3.谱聚类可以理解为一个降维的过程,先将高维空间的数据映射到低维,再用其他的聚类方法对降维后的数据进行聚类,因此在掌握谱聚类算法基本流程和原理后,重点在于掌握这些常用的聚类算法及其后续的并行优化。例如:在最常用的k-means聚类算法中,需要计算每个样本点与簇中心的距离,但在谱聚类算法中的k-means算法的输入是一个个的1*k1维向量,因此我猜测距离计算应该就是两个向量各元素的距离平方和开根号(这点论文中没有提到,待后续验证),当然也可以是自定义的距离计算方式,这就需要在实践中找到最优解
4.掌握和优化谱聚类算法的三个重点:
(1)相似矩阵生成方式的比较和选择
(2)聚类算法的比较和选择
如常用的k-means又设计优化初始簇中心选取的k-means++和Kmc2算法
(3)拉普拉斯矩阵特征值和特征向量的计算方法,如论文中提到的幂迭
Day2(2022.8.9)
一.k-means聚类算法及其改进
1.k-means聚类算法
输入:包含n个样本点的数据集,聚类数目
输出:k个簇,每个簇包含若干个样本点
算法思想:
1.从数据集中随机选取k个样本点作为k个簇的中心,计算每一个样本点到这k个簇中心的距离
距离计算方案:
方案一:欧氏距离,也即Day1笔记中猜想的方案
方案二:曼哈顿距离
方案三:余弦相似度
2.对于每一个样本点(所有的),比较它到k个簇中心的距离,将其聚类到距离最近的那个簇中,对于新的k个簇,更新它们的簇中心
簇中心的更新方案:
方案一:选择簇中与其他点距离均值最小的点作为簇中心
方案二:若样本点拥有坐标,可选择簇中所有点坐标的均值作为簇中心
3.判断:
如果k个簇中心都不再发生变化或者迭代次数达到设置的阈值,终止;否则重复步骤2
注意点:
每一次步骤2都需要遍历数据集中所有的样本和上一次迭代得到的所有k个簇
2.k-means++聚类算法
改进点:随机选取初始聚类中心的做法导致算法的不稳定性,可能陷入局部最优的情况
不同点:主要在于初始的k个簇中心的选择,其余部分都和k-means相同
初始的k个簇中心的选择方案:
1.随机选择一个样本点作为初始聚类中心
2.对于数据集中的每一个样本点,计算它与当前存在的所有聚类中心的距离的最小值(即与最近的一个聚类中心的距离),记为
3.选择一个新的样本点作为新的聚类中心,选取的原则是:较大的点被选中的概率较大
一种具体做法是:
(1)把数据集中所有样本点的相加,记为(2)在0到中随机选取一个值
(3)随机选取一个样本点,其有一个,
(4)若,重复步骤(3);当时,选取当前的样本点为簇中心
4.重复步骤2,3,直到选出k个簇中心
5.效果:
一定程度上降低了k-means算法对初始数据集的依赖,降低了算法的不稳定性,有效提高了算法效率,减少了算法开销
疑问:
1.(3)理解正确吗
2.为什么不直接选最大的样本点
3.Kmc2(不太理解)
改进点: k-means在选取每一个簇中心时都要重复遍历数据集,在大规模数据上时,由于其顺序执行的特性和重复遍历的缺陷,在并行拓展应用上有很大的瓶颈
算法思想:
先随机选择一个初始中心点,然后遍历数据集,使用MCMC采样方法构造一条马尔科夫链,当其稳定时再取最后k-1个数作为簇中心(不太理解)
不同点:与k-means相比,只需遍历一次数据集
输入输出同上,但输入多了一个链的长度m
算法步骤也不太理解