代码中有注释:
# encoding=utf-8
import matplotlib.pyplot as plt
import numpy as np
from numpy import linalg as LA
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics.pairwise import rbf_kernel
from sklearn.preprocessing import normalize
def similarity_function(points):
"""
相似性函数,利用径向基核函数计算相似性矩阵,对角线元素置为0
对角线元素为什么要置为0我也不清楚,但是论文里是这么说的
:param points:
:return:
"""
res = rbf_kernel(points)
for i in range(len(res)):
res[i, i] = 0
return res
def spectral_clustering(points, k):
"""
谱聚类
:param points: 样本点
:param k: 聚类个数
:return: 聚类结果
"""
W = similarity_function(points)
# 度矩阵D可以从相似度矩阵W得到,这里计算的是D^(-1/2)
# D = np.diag(np.sum(W, axis=1))
# Dn = np.sqrt(LA.inv(D))
# 本来应该像上面那样写,我做了点数学变换,