问题:
我很困惑为什么我们使用我们的列车数据上的CountVectorizer转换我们的测试数据进行单词分类。
为什么我们不创建新的CountVectorizer并将测试数据与此拟合并让分类器在测试CountVectorizer上进行预测?
在此处查看:How to standardize the bag of words for train and test?
从答案中删除:
LabeledWords=pd.DataFrame(columns=['word','label'])
LabeledWords.append({'word':'Church','label':'Religion'} )
vectorizer = CountVectorizer()
Xtrain,yTrain=vectorizer.fit_transform(LabeledWords['word']).toarray(),vectorizer.fit_transform(LabeledWords['label']).toarray()
forest = RandomForestClassifier(n_estimators = 100)
clf=forest.fit(Xtrain,yTrain)
for each_word,label in Preprocessed_list:
test_featuresX.append(vectorizer.transform(each_word),toarray())
test_featuresY.append(label.toarray())
clf.score(test_featuresX,test_featuresY)
我们可以看到用户创建了一个CountVectorizer并使其适合训练数据。然后将分类器适合此CountVectorizer。之后,用户使用适合列车数据的CountVectorizer转换测试数据,并将其输入分类器。那是为什么?
我想要完成的任务: 我正在尝试实现一堆视觉词汇。它使用相同的概念,但我不确定应该如何创建我的列车和测试集进行分类。
答案 0 :(得分:1)
您希望您的测试数据与您的列车数据通过相同的管道,以使测试和训练之间的差异尽可能与现实世界和您的模型之间的差异相似即可。在数据中进行测试和训练分裂的重点是帮助验证模型的概括,并允许测试集中的额外数据泄漏到训练集上训练的模型中,这使您无法准确了解该泛化能力
另外,正如@ Juanpa.arrivillaga所说,文本处理在预测分析的标准经验法则之上打开了许多蠕虫。通过使用两个不同的计数矢量化器,你将得到一个模型(在这种情况下是一个随机森林)训练,以期望第一个坐标对应于某些单词,如" apple"然后给它点上一些像#34; grape。"在这种情况下你可能取得的任何成功都只是偶然的。