我在训练和测试数据上同时使用CountVectorizer可以吗,还是需要先分开它们?

我目前有一个支持向量机(SVM)模型,用于将文本分类为两个不同的类别。我现在使用CountVectorizer和TfidfTransformer来创建我的“词向量”。

问题是我认为我在转换所有文本的顺序上可能做错了,先转换所有文本然后再进行分割。

我的问题是,如果我先进行train_test_split,然后只对训练数据进行fit_transform,再对测试数据进行transform,会有什么不同吗?

正确的做法是什么?

非常感谢,祝 coding 愉快!

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)

回答:

首先将数据分为训练集和测试集,然后只在训练集上进行拟合,并在测试集上进行转换

如果你反过来做,你就会从测试集中泄露信息到训练集中。这可能会导致过拟合,使你的模型无法很好地泛化到新的、未见过的数据上。

测试集的目的是测试你的模型在新数据上的表现如何。在文本分析的情况下,这可能意味着模型之前从未见过的单词,并且不知道这些单词的重要性,或者单词出现的新分布。如果你首先使用CountVectorizerTfIdfTransformer,你将不知道它如何应对这些情况:毕竟,所有的数据都被转换器见过了。问题在于:你认为你已经构建了一个表现优秀的模型,但当它投入生产时,准确率会大大降低。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注