![](/img/trans.png)
[英]How to apply tf-idf to whole dataset (training and testing dataset) instead of only training dataset within naive bayes classifier class?
[英]Computing TF-IDF on the whole dataset or only on training data?
在本書的第七章“TensorFlow Machine Learning Cookbook”中,作者在數據預處理中使用了scikit-learn的fit_transform
函數來獲取tfidf
fit_transform
特征進行訓練。 作者在將其分離為訓練和測試之前將所有文本數據提供給函數。 這是一個真正的動作,還是我們必須先分離數據,然后在fit_transform
上執行fit_transform
並在測試上進行transform
?
根據 scikit-learn 的文檔, fit()
用於
從訓練集中學習詞匯和 idf。
另一方面, fit_transform()
用於
學習詞匯和idf,返回term-document矩陣。
而transform()
將文檔轉換為文檔-術語矩陣。
在訓練集上,您需要同時應用fit()
和transform()
(或只是fit_transform()
本質上連接這兩個操作),但是,在測試集上,您只需要transform()
測試實例(即文檔)。
請記住,訓練集用於學習目的(學習是通過fit()
實現的),而測試集用於評估訓練后的模型是否可以很好地泛化到新的未知數據點。
更多細節可以參考文章fit() vs transform() vs fit_transform()
作者在分離訓練和測試之前給出了所有文本數據以發揮作用。 這是一個真正的動作,還是我們必須先分離數據,然后在訓練上執行 tfidf fit_transform 並在測試上進行轉換?
我認為這已經將有關測試集的一些信息泄漏到了訓練集中。
我傾向於始終遵循這樣的規則,即在任何預處理之前要做的第一件事是分離數據,創建一個保留集。
當我們談論文本數據時,我們必須確保模型僅在訓練集的詞匯表上進行訓練,因為當我們在現實生活中部署模型時,它會遇到它以前從未見過的單詞,所以我們有牢記這一點,對測試集進行驗證。
我們必須確保測試集中的新詞不是模型詞匯表的一部分。
因此我們必須在訓練數據上使用 fit_transform 並在測試數據上進行轉換。 如果您考慮進行交叉驗證,那么您可以在所有折疊中使用此邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.