#谱聚类 ''' 对样本求相似性矩阵, 其实就是把每个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))
谱聚类及其创新思考(python)
最新推荐文章于 2024-09-23 19:50:01 发布