sklearn KMeans 中的 fit() 与 fit_predict() 方法

问题描述 投票:0回答:2

我们在

sklearn.cluster.KMeans
上制作模型有两种方法。第一个是
fit()
,另一个是
fit_predict()
。我的理解是,当我们在
fit()
模型上使用
KMeans
方法时,它给出了一个属性
labels_
,它基本上保存了哪个观察属于哪个集群的信息。
fit_predict()
还具有
labels_
属性。

所以我的问题是,

  1. 如果
    fit()
    满足需求,那么为什么他们是
    fit_predict()
  2. 编写代码时,
    fit()
    fit_predict()
    可以互换吗?
python scikit-learn k-means
2个回答
8
投票

KMeans
只是
sklearn
拥有的众多模型之一,并且许多模型共享相同的 API。基本功能是
fit
,它使用示例来教授模型,以及
predict
,它使用
fit
获得的知识来回答有关潜在新值的问题。

KMeans
将在训练期间自动预测所有输入数据的聚类,因为这样做是算法不可或缺的一部分。它保留它们以提高效率,因为预测原始数据集的标签非常常见。因此,
fit_predict
添加很少:它调用
fit
,然后返回
.labels_
fit_predict
只是一个调用
fit
的便捷方法,然后返回训练数据集的标签。 (
fit_predict
没有
labels_
属性,它只是为您提供标签。)

但是,如果您想在一组数据上训练模型,然后使用它来快速(并且不更改已建立的集群边界)获得原始数据中不存在的数据点的答案,您将需要使用

predict
,不是
fit_predict

在其他模型中(例如

sklearn.neural_network.MLPClassifier
),训练可能是一项非常昂贵的操作,因此您可能不希望每次想要预测某些内容时都重新训练模型;另外,预测结果也不一定是作为预测的一部分而生成的。或者,如上所述,您只是不想更改模型来响应新数据。在这些情况下,您无法从
fit
的结果中获得预测:您需要使用要获得预测的数据调用
predict

另请注意,

labels_
标有下划线,这是Python约定“不要碰这个,它是私有的”(在没有实际访问控制的情况下)。只要有可能,您应该使用已建立的 API。


2
投票

在 scikit-learn 中,还有

fit
fit_transform
等类似的东西。
Fit
predict
labels_
对于聚类至关重要。
因此
fit_predict
只是高效的代码,其结果与拟合和预测(或标签)的结果相同。

此外,在确定样本的聚类标签时,拟合的聚类模型仅使用一次。

© www.soinside.com 2019 - 2024. All rights reserved.