我可以同时对测试数据和训练数据使用 CountVectorizer 还是需要将其分开?

Lab*_*bba 2 machine-learning word-count scikit-learn text-classification

我目前有一个 SVM 模型,可以将文本分为两个不同的类别。我目前正在使用 CountVectorizer 和 TfidfTransformer 来创建我的“词向量”。

问题是,当我首先转换所有文本然后将其拆分时,我认为我可能以错误的顺序进行操作。

我的问题是,如果我先执行train_test_split,然后仅对训练数据执行fit_transform,然后对测试数据进行转换,会有什么区别吗?

正确的做法是什么?

非常感谢,祝您编码愉快!

count_vect = CountVectorizer(stop_words='english')
X_counts = count_vect.fit_transform(textList)

tfidf_transformer = TfidfTransformer()
X_tfidf = tfidf_transformer.fit_transform(X_counts)

X_train, X_test, y_train, y_test = train_test_split(X_tfidf, correctLabels, test_size=.33, random_state=17)
Run Code Online (Sandbox Code Playgroud)

Jon*_*oop 6

首先拆分训练集和测试集,然后仅拟合训练集并转换测试集

如果您以相反的方式进行操作,则会将信息从测试集泄漏到训练集。这可能会导致过度拟合,从而使您的模型无法很好地推广到新的、未见过的数据。

测试集的目标是测试模型在新数据上的表现。就文本分析而言,这可能意味着它以前从未见过的单词,并且对单词的重要性一无所知,或者单词出现的新分布。如果您第一次使用CountVectorizerand TfIdfTransformer,您将不知道它如何响应:毕竟,变压器已经看到了所有数据。问题是:你认为你已经构建了一个具有出色性能的出色模型,但是当它投入生产时,精度会低很多。