繁体   English   中英

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

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

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

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

然后,我们使用频谱聚类对象调用fit_predict。

clusters =  clustering.fit_predict(X)

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

感谢您的帮助或提示。

查看fit_predict() 源代码 ,看来这只是一种便捷方法-实际上只是调用fit()并从对象返回标签。

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

使用选定的亲和力为X创建一个亲和力矩阵,然后将光谱聚类应用于此亲和力矩阵。

fit_predict

在X上执行聚类并返回聚类标签。

在这里, 在X上执行聚类应该理解为fit描述的内容,即创建亲和度矩阵[...]

这是不难验证调用fit_predict相当于获得labels_后从对象属性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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM