SpectralClustering 中的 fit() 和 fit_predict() 有什么区别

ewa*_*lel 4 python cluster-analysis machine-learning python-3.x scikit-learn

我正在尝试理解和使用sklearn谱聚类。假设我们有 X 矩阵输入,并且我们创建一个谱聚类对象,如下所示:

clustering = SpectralClustering(n_clusters=2,
         assign_labels="discretize",
         random_state=0)
Run Code Online (Sandbox Code Playgroud)

然后,我们使用谱簇对象调用 fit_predict。

clusters =  clustering.fit_predict(X)
Run Code Online (Sandbox Code Playgroud)

让我困惑的是,“使用所选亲和力的 X 的亲和力矩阵何时创建”?因为根据文档, fit_predict()方法“在 X 上执行聚类并返回聚类标签”。但它并没有明确表示它还在聚类之前计算“使用所选亲和力的 X 的亲和力矩阵”。

我感谢任何帮助或提示。

des*_*aut 6

正如另一个答案中已经暗示的那样,fit_predict这只是返回集群标签的一种便捷方法。根据文档fit

使用选定的亲和度创建 X 的亲和度矩阵,然后将谱聚类应用于此亲和度矩阵。

尽管fit_predict

对 X 执行聚类并返回聚类标签。

这里,对 X 执行聚类应该理解为 的描述fit,即创建亲和力矩阵 [...]

不难验证,调用fit_predict相当于labels_从 after 的对象中获取属性fit;使用一些虚拟数据,我们有

from sklearn.cluster import SpectralClustering
import numpy as np

X = np.array([[1, 2], [1, 4], [10, 0],
               [10, 2], [10, 4], [1, 0]])

# 1st way - use fit and get the labels_
clustering = SpectralClustering(n_clusters=2,
     assign_labels="discretize",
     random_state=0)

clustering.fit(X)
clustering.labels_
# array([1, 1, 0, 0, 0, 1])

# 2nd way - using fit_predict
clustering2 = SpectralClustering(n_clusters=2,
     assign_labels="discretize",
     random_state=0)

clustering2.fit_predict(X)
# array([1, 1, 0, 0, 0, 1])

np.array_equal(clustering.labels_, clustering2.fit_predict(X))
# True
Run Code Online (Sandbox Code Playgroud)