谱聚类及其创新思考(python)

50 篇文章 4 订阅
12 篇文章 0 订阅
#谱聚类
'''
对样本求相似性矩阵, 其实就是把每个sample当作一个node,构建一个图关系。
1 求向量之间的关系有很多方法 比如 F1范数, F2范数, 无穷范数,余弦  f(x1, x2)---> scalar
如果大家想改进的话这里我建议可以用度量学习的技巧去替换求向量之间关系的方法
'''
import numpy as np
def distance(x1, x2):
    dis = 0
    for i in range(x1.shape[0]):
        dis += (x1[i] - x2[i]) ** 2
    return np.e ** (-np.sqrt(dis)/2)

# 很显然是两个类(1, 0, 1)&(1, 5, 0)  (100, 100, 100)&(99, 100, 99)
x = np.array([[1, 0, 1], [1, 5, 0], [100, 100, 100], [99, 100, 99]])
# 构建一个W:= 相似度矩阵
W = np.zeros((4, 4))

for i in range(x.shape[0]):
    for j in range(x.shape[0]):
        W[i][j] = distance(x[i], x[j])
# 对称阵有很多好的性质,1.存储数据的时候能节省接近一半的资源,2.是方阵可以求逆矩阵, 3.有n个不同的特征值与特征向量
#print(W)

'''
求度矩阵D之后就求拉普拉斯矩阵了 拉普拉斯矩阵为L= D - W纯粹为巧合,在推导式时出发点为拉普拉斯算子即我们求离散数据的每个节点的势
拉普拉斯矩阵的每一行代表了图中每个节点的收益。(节点做一次差其实对应了求一次导数, 二阶导数为节点做两次差的和)
'''
D = np.zeros((4, 4))
D[0][0] = np.sum(W, axis=0)[0]
D[1][1] = np.sum(W, axis=0)[1]
D[2][2] = np.sum(W, axis=0)[2]
D[3][3] = np.sum(W, axis=0)[3]
#print(D)

L = np.zeros((4, 4))
L = D - W
#print(L)

'''
1. 类似于降维,但是这里很多博客表述的并不对,首先我们没有将求出的特征向量组成的矩阵对原始矩阵进行矩阵乘法,降低维度
2. 这里我只用了一个向量
'''
eigenvalue, featurevector = np.linalg.eig(L)
f_v = featurevector[:, np.argmax(eigenvalue)]

print(f_v) 
# [ 1.92585366e-38  8.23138568e-38  7.07106781e-01 -7.07106781e-01]
# 结果很显然 前两个是一对,后两个是一对 我们的维度很低 没必要用k-means 如果你想创新可以换一个聚类方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
谱聚类(Spectral Clustering)是一种基于图论和线性代数的聚类算法,它将数据点的相似性转化为图的边权重,然后通过对图进行谱分解和聚类来实现数据点的划分。下面是谱聚类算法的简单Python伪码: 输入:数据集X,聚类数k,相似度矩阵W 1. 构建相似度矩阵W:根据数据集X,计算每对数据点之间的相似度,并构建相似度矩阵W。 2. 构建拉普拉斯矩阵L:计算拉普拉斯矩阵L,有多种方式可以计算,常用的有标准化的拉普拉斯矩阵和对称归一化的拉普拉斯矩阵。 3. 对L进行谱分解:对拉普拉斯矩阵L进行谱分解,得到特征值和对应的特征向量。 4. 特征向量归一化:将特征向量按行进行归一化,得到归一化后的特征向量矩阵U。 5. 使用k-means对U进行聚类:对归一化后的特征向量矩阵U进行k-means聚类,得到最终的聚类结果。 伪码中的步骤2和步骤3是谱聚类的核心步骤,它们通过特征值分解和特征向量归一化来实现数据点的降维和聚类。在实际的代码实现中,可以使用Python中的科学计算库(如NumPy、SciPy)和聚类库(如scikit-learn)来进行相似度矩阵的计算、矩阵操作和聚类算法的应用。 请注意,这只是谱聚类算法的简单伪码,实际的实现可能会涉及更多细节和优化。如果您需要详细了解谱聚类算法的实现,请参考相关文献或开源库中的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值