• 大小: 41KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-27
  • 语言: Python
  • 标签: 机器学习  聚类  

资源简介

python实现谱聚类代码并进行可视化,内涵样例数据集和代码

资源截图

代码片段和文件信息

# coding=utf-8
import scipy.io as sio
from sklearn.cluster import KMeans
import numpy as np
import random
import copy
import matplotlib.pyplot as plt
import operator

def loaddata():  # 读取数据
    file = ‘GaussianData.mat‘
    file = ‘ringData.mat‘
    data = sio.loadmat(file)
    matrix = np.array(data[‘Dataset‘])
    return matrix
def distance(p1p2):  # 欧式距离
    return  np.linalg.norm(p1-p2)
def getWbyKNN(datak):  # 利用KNN获得相似度矩阵
    points_num = len(data)
    dis_matrix = np.zeros((points_numpoints_num))
    W = np.zeros((points_numpoints_num))
    for i in range(points_num):
        for j in range(i+1points_num):
            dis_matrix[i][j] = dis_matrix[j][i] = distance(data[i]data[j])
    for idxeach in enumerate(dis_matrix):
        index_array  = np.argsort(each)
        W[idx][index_array[1:k+1]] = 1  # 距离最短的是自己
    tmp_W = np.transpose(W)
    W = (tmp_W+W)/2  #转置相加除以2是为了让矩阵对称
    return W
def getD(W):    # 获得度矩阵
    points_num = len(W)
    D = np.diag(np.zeros(points_num))
    for i in range(points_num):
        D[i][i] = sum(W[i])
    return D
def getEigVec(Lcluster_num):  #从拉普拉斯矩阵获得特征矩阵
    eigvaleigvec = np.linalg.eig(L)
    dim = len(eigval)
    dictEigval = dict(zip(eigvalrange(0dim)))
    kEig = np.sort(eigval)[0:cluster_num]
    ix = [dictEigval[k] for k in kEig]
    return eigval[ix]eigvec[:ix]
def randRGB():
    return (random.randint(0 255)/255.0
            random.randint(0 255)/255.0
            random.randint(0 255)/255.0)
def plot(matrixCcentersk):
    colors = []
    for i in range(k):
        colors.append(randRGB())
    for idxvalue in enumerate(C):
        plt.plot(matrix[idx][0]matrix[idx][1]‘o‘color=colors[int(C[idx])])
    for i in range(len(centers)):
        plt.plot(centers[i][0]centers[i][1]‘rx‘)
    plt.show()
def getCenters(dataC):  # 获得中心位置
    centers = []
    for i in range(max(C)+1):
        points_list = np.where(C==i)[0].tolist()
        centers.append(np.average(data[points_list]axis=0))
    return centers
if __name__ == ‘__main__‘:
    cluster_num = 2
    KNN_k = 5
    data = loaddata()
    W = getWbyKNN(dataKNN_k)
    D = getD(W)
    L = D-W
    eigvaleigvec = getEigVec(Lcluster_num)
    # print eigvaleigvec
    clf = KMeans(n_clusters=cluster_num)
    s = clf.fit(eigvec)
    C = s.labels_
    centers = getCenters(dataC)
    plot(datas.labels_centerscluster_num)

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-06-23 11:17  spectral_cluster\
     文件       10200  2017-03-01 21:09  spectral_cluster\Gaussian.txt
     文件        4794  2017-03-01 21:09  spectral_cluster\GaussianData.mat
     文件        2903  2017-03-12 19:32  spectral_cluster\readme.md
     文件       17102  2017-03-01 21:09  spectral_cluster\ringData.mat
     文件       37400  2017-03-01 21:09  spectral_cluster\ringData.txt
     文件        2583  2017-03-12 17:54  spectral_cluster\spectral_clustering.py

评论

共有 条评论