我可以同时在测试和训练数据上使用CountVectorizer吗?还是需要将其拆分?

时间:2019-02-02 10:03:57

标签: machine-learning scikit-learn text-classification word-count

我目前有一个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)

1 个答案:

答案 0 :(得分:0)

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

如果相反,那么您leaking information从测试仪到训练仪。这可能会导致过度拟合,从而使您的模型无法很好地推广到看不见的新数据。

测试集的目标是测试模型在新数据上的性能。就文本分析而言,这可能意味着它从未见过的单词,也不知道单词出现的重要性或新分布。如果您首先使用CountVectorizerTfIdfTransformer,您将不知道它如何响应:毕竟,所有数据都已被转换器看到。问题是:您认为您已经建立了一个性能出色的出色模型,但是将其投入生产后,准确性将大大降低。