聚类根据给定的样本数据集定义一个描述成对数据点相似度的亲合矩阵,并且计算矩阵的特征值和特征向量 , 然后选择合适 的特征向量聚类不同的数据点。
谱聚类可以在任意形状的样本空间聚类,且收敛于全局最优解,因此在处理高维数据方面存在着明显优势。总的来说,该算法存在一些不足之处。算法在聚类之前需要设置具体应用的尺度参数,通常需要一些经验。初始聚类中心对整个聚类效果影响很大,存在初始值敏感问题。很难找到图划分的优化解,聚类数目对于整个聚类效果有很大影响。
setp1:计算图的拉普拉斯矩阵L=D-w
setp2:归一化拉普拉斯矩阵
setp3:计算归一化后的拉普拉斯矩阵的特征值和特征向量Q
setp4:对Q进行K-means聚类,return(c1,c2,c3...cn)
优点:因此比传统的聚类算法更加健壮一些,对于不规则的误差数据不是那么敏感,计算复杂度比 K-means 要小
代码:
from sklearn.cluster import SpectralClustering
from sklearn import datasets
from dask.array.learn import predict
import numpy as np
iris = datasets.load_iris()
X = iris.data
y = iris.target
print(y)
clf=SpectralClustering(n_clusters=3)
predicted=clf.fit_predict(X)
print(predicted)
k2y = np.array([0,1,2])
print(k2y[predicted])
print((k2y[predicted] == y).astype(int).mean())
聚类精度为0.9