簡體   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