[英]fit() vs fit_predict() metthods in sklearn KMeans
当我们在 sklearn.cluster.KMeans 上制作sklearn.cluster.KMeans
时,有两种方法。 首先是fit()
,另一个是fit_predict()
。 我的理解是,当我们在KMeans
model 上使用fit()
方法时,它会给出一个属性labels_
,它基本上保存了关于哪个观察属于哪个集群的信息。 fit_predict()
也有labels_
属性。
所以我的问题是,
fit()
满足需求,那么为什么它们是fit_predict()
?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 中,有fit
和fit_transform
等类似的东西。
Fit
和predict
或labels_
对于聚类至关重要。
因此fit_predict
只是高效的代码,其结果与 fit 和 predict(或标签)的结果相同。
此外,拟合聚类 model 在确定样本的聚类标签时仅使用一次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.