繁体   English   中英

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

[英]fit() vs fit_predict() metthods in sklearn KMeans

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

所以我的问题是,

  1. 如果fit()满足需求,那么为什么它们是fit_predict()
  2. 编写代码时fit()fit_predict()可以互换吗?

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

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

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

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

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

在 scikit-learn 中,有fitfit_transform等类似的东西。
Fitpredictlabels_对于聚类至关重要。
因此fit_predict只是高效的代码,其结果与 fit 和 predict(或标签)的结果相同。

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

暂无
暂无

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

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