簡體   English   中英

在 tf-idf 中哪種方式是正確的? 擬合所有然后變換訓練集和測試集或擬合訓練集然后變換測試集

[英]Which way is right in tf-idf? Fit all then transform train set and test set or fit train set then transform test set

1.Fit train set then transform test set scikit-learn 提供這個例子

from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, stop_words='english')
X_train = vectorizer.fit_transform(data_train.data)
X_test = vectorizer.transform(data_test.data)

2.Fit all 然后轉換我在很多情況下看到的訓練集和測試集

import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, stop_words='english')
X_all = np.append(train_x, test_x, axis=0)
vectorizer.fit(X_all)
X_train = vectorizer.transform(train_x)
X_test = vectorizer.transform(test_x)

所以,我很困惑哪種方式是正確的,為什么

這實際上取決於您的用例。

在第一種情況下,您的測試集 TF-IDF 值僅基於訓練集中的頻率。 這允許您控制“參考”語料庫並將您的結果與測試集中的數據去相關,當您的測試集中的數據是從與您在正常情況下所期望的非常不同的數據分布中采樣時,這很有意義。 請注意,這僅適用於 scikit 以一種對以前未見過的單詞具有魯棒性的方式實現 TF-IDF。

在第二種情況下,當您使用測試集進行訓練時,您的頻率也將基於測試集中的內容。 這允許測試集域中數據的更具代表性的頻率值,這可以提高下游任務的性能,並確保在測試時不會出現新的看不見的單詞。

tl;博士都工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM