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

Can i use CountVectorizer on both test and train data at the same time or do I need to split it up?

我目前有一个 SVM 模型,可以将文本分为两种不同的 类。我目前正在使用 CountVectorizer 和 TfidfTransformer 创建我的 "word vector."

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

我的问题是,如果我先做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)

首先拆分训练集和测试集,然后只在训练集上拟合并变换测试集

如果你反过来做,你就是 leaking information 从测试集到训练集。这可能会导致过度拟合,这将使您的模型不能很好地泛化到新的、看不见的数据。

测试集的目标是测试您的模型在新数据上的表现。在文本分析的情况下,这可能意味着它以前从未见过的词,并且不知道这些词的重要性或出现的新分布。如果你第一次使用你的 CountVectorizerTfIdfTransformer,你将不知道它是如何响应的:毕竟,所有的数据都被转换器看到了。问题:你认为你建立了一个很棒的模型,性能很好,但是当它投入生产时,准确率会低很多。