谱聚类算法.zip

  • r8_102104
    了解作者
  • 50.5KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-04-29 11:43
    上传日期
直接下载运行即可,需要注意修改相应的读取和写入路径,data是数据集,由于相关参数选取的不太合适已经数据集的原因,所以聚类效果不是特别理想
谱聚类算法.zip
  • 谱聚类算法
  • data.xlsx
    51.1KB
  • 谱聚类算法.py
    2.3KB
内容介绍
""" 谱聚类算法 """ # 读取数据 from numpy.linalg import * import numpy as np import pandas as pd from sklearn.cluster import SpectralClustering, KMeans import math data = pd.read_excel( "D:\\wangyang\\聚类算法\\算法程序\\谱聚类算法\\data.xlsx", names=range(7), header=None) # 添加列索引 n, m = data.shape # 获取数据的行数与列数 sigma = 0.5 k = 3 # 计算邻接矩阵 def Adjacency_matrix(data): """ 计算邻接矩阵 data:数据集,n*m的矩阵 不足:两个嵌套循环导致的计算量还是很大的,所以还需要优化 """ W = np.zeros((n, n)) # 初始化邻接矩阵 for i in range(n): x_i = np.array(data.loc[i]) for j in range(n): x_j = np.array(data.loc[j]) w_ij = np.linalg.norm(x_i - x_j, ord=2) # 计算向量的2-范数 W[i][j] = math.exp(-w_ij**2 / (2 * sigma**2)) return W def Degree_matrix(W): """ 计算度矩阵 输入:W是邻接矩阵,n*n """ D = np.zeros((n, n)) for i in range(n): D[i][i] = sum(W[i]) return D def diagpower_matrix(X, k): """ 对矩阵对角线上的元素进行运算 输入:X是一个方阵,类型是dataframe k是幂次方,一个实数 """ nn, mm = X.shape for i in range(nn): X[i][i] = X[i][i]**k return X W = Adjacency_matrix(data) D = Degree_matrix(W) # 计算拉普拉斯矩阵 L = D - W L = diagpower_matrix(D, -0.5) * L * diagpower_matrix(D, -0.5) # 矩阵标准化 eigenvalues, Feature_vector = np.linalg.eig(L) # k个最小特征值对应的特征向量组成的n*k的矩阵 data2 = Feature_vector[np.argsort(eigenvalues)[:k]].T result = KMeans(n_clusters=k, max_iter=100) # 构造聚类器 result.fit(data2) # 聚类 label = result.labels_ # 获取聚类标签 centroids = result.cluster_centers_ # 获取聚类中心 # 写入文件 label = pd.DataFrame(label) label.to_excel("D:\\wangyang\\聚类算法\\算法程序\\谱聚类算法\\label.xlsx", index=False, header=False) centroids = pd.DataFrame(centroids) centroids.to_excel("D:\\wangyang\\聚类算法\\算法程序\\谱聚类算法\\centroids.xlsx", index=False, header=False)
评论
    相关推荐