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

What is the difference between fit() and fit_predict() in SpectralClustering

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

clustering = SpectralClustering(n_clusters=2,
         assign_labels="discretize",
         random_state=0)

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

clusters =  clustering.fit_predict(X)

让我困惑的是 'the affinity matrix for X using the selected affinity is created' 什么时候?因为根据文档 fit_predict() 方法 'Performs clustering on X and returns cluster labels.' 但它没有明确说它在聚类之前也计算 'the affinity matrix for X using the selected affinity'.

感谢任何帮助或提示。

查看 fit_predict()source code 似乎这只是一种方便的方法 - 它实际上只是从对象调用 fit() 和 returns 标签。

正如另一个答案中已经暗示的那样,fit_predict 只是 return 集群标签的一种便捷方法。根据documentationfit

Creates an affinity matrix for X using the selected affinity, then applies spectral clustering to this affinity matrix.

同时 fit_predict

Performs clustering on X and returns cluster labels.

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

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

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