详解 Scikit-learn 的 cluster.SpectralClustering函数:谱聚类算法

Scikit-learn Sklearn.cluster.SpectralClustering

作用

Scikit-learn Sklearn.cluster.SpectralClustering 是一种基于谱聚类算法的无监督学习模型,其作用是将数据集中的数据聚为不同的类别。该算法通过对数据样本间的相似度矩阵进行特征分解,得到样本的降维表示,在低维空间中聚类。

使用方法

参数

SpectralClustering 共包含六个可调参数,其中比较重要的是以下四个:

  1. n_clusters:int,指定聚类类别数,默认值为 8。
  2. n_init:int,指定聚类中心初始化的次数,默认值为 10。
  3. gamma:float,调节相似度矩阵稠密程度的参数,当参数值较大时矩阵更稠密,特征值和特征向量的估计更加准确。默认值为 1.
  4. 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技术站

(0)
上一篇 2023年3月30日
下一篇 2023年3月30日

相关文章

合作推广
合作推广
分享本页
返回顶部