Scikit-learn Sklearn.cluster.SpectralClustering
作用
Scikit-learn Sklearn.cluster.SpectralClustering 是一种基于谱聚类算法的无监督学习模型,其作用是将数据集中的数据聚为不同的类别。该算法通过对数据样本间的相似度矩阵进行特征分解,得到样本的降维表示,在低维空间中聚类。
使用方法
参数
SpectralClustering 共包含六个可调参数,其中比较重要的是以下四个:
- n_clusters:int,指定聚类类别数,默认值为 8。
- n_init:int,指定聚类中心初始化的次数,默认值为 10。
- gamma:float,调节相似度矩阵稠密程度的参数,当参数值较大时矩阵更稠密,特征值和特征向量的估计更加准确。默认值为 1.
- affinity:string,指定相似性矩阵的计算方法,可选值为"rbf"、"nearest_neighbors"或者"precomputed",默认为"rbf"。
返回值
SpectralClustering.fit(X) 方法返回一个 SpectralClustering 对象自身。
SpectralClustering.fit_predict(X) 方法返回训练数据集的预测标签。
示例
下面使用两个实例来说明 SpectralClustering 的使用方法。
实例一:使用 Sklearn 自带的数据集
此例使用 Sklearn 自带的鸢尾花数据集,对数据进行谱聚类。
import numpy as np
from sklearn.cluster import SpectralClustering
from sklearn.datasets import load_iris
iris = load_iris()
X = iris['data']
sc = SpectralClustering(n_clusters=3, random_state=0, gamma=1, affinity='rbf')
labels = sc.fit_predict(X)
print("预测标签:", labels)
实例二:使用自定义数据集
此例使用自定义的数据集,由三个高斯分布生成,对数据进行谱聚类。
import numpy as np
from sklearn.cluster import SpectralClustering
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
X, y_true = make_blobs(n_samples=300, centers=3, cluster_std=0.5, random_state=0)
sc = SpectralClustering(n_clusters=3, gamma=1, affinity='nearest_neighbors')
labels = sc.fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')
plt.show()
模型评估
对于谱聚类模型的评估可以使用轮廓系数(Silhouette Coefficient)。
from sklearn.metrics import silhouette_score
score = silhouette_score(X, labels)
Silhouette Coefficient的取值范围在[-1,1]之间,且越接近于1表示聚类效果越好,越接近于-1表示聚类效果越差。
总结
SpectralClustering 是一种基于谱聚类算法的无监督学习模型,其可以有效地处理复杂数据集上的聚类任务。通过调整不同的可调参数,可以实现对不同数据集的具体优化,同时对于没有标签的数据集,应该使用轮廓系数对模型进行评价。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解 Scikit-learn 的 cluster.SpectralClustering函数:谱聚类算法 - Python技术站