[英]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.