编程语言
首页 > 编程语言> > python – 在sklearn countvectorizer中fit_transform和transform之间有什么区别?

python – 在sklearn countvectorizer中fit_transform和transform之间有什么区别?

作者:互联网

我刚开始学习随机森林,所以如果这听起来很愚蠢我很抱歉

我最近练习bag of words introduction : kaggle,我想澄清一些事情:

使用vectorizer.fit_transform(“清洁评论列表*上的*”)

现在当我们在火车评论上准备一堆单词数组时,我们在火车评论列表中使用了fit_predict,现在我知道fit_predict做了两件事,>首先,它适合数据并知道词汇,然后在每次审核时生成向量.

因此,当我们使用vectorizer.transform(“清洁列车评论列表”)时,这只是将测试评论列表转换为每个评论的向量.

我的问题是…..为什么不在测试列表上使用fit_transform !!我的意思是在文件中它说它会导致过度拟合,但等待它对我来说是否有意义使用它反正,让我给你我的预期:

当我们不使用fit_transform时,我们基本上是说使用最常用的火车评论词来制作测试评论的特征向量!!为什么不使用测试中最频繁的单词来制作测试特征数组呢?

我的意思是随机关怀吗?如果我们给随机森林火车特征数组和训练特征情绪工作和训练自己,然后给它测试特征数组不会只是给出它的情绪预测.

注意:我可能没有以正确的方式询问,但是当人们试图回答时,我会更新问题更清楚..

解决方法:

您没有对测试数据执行fit_transform,因为当您适应随机森林时,随机森林会根据您提供的功能的值来学习分类规则.如果要应用这些规则来对测试集进行分类,则需要确保使用相同的词汇表以相同的方式计算测试要素.如果训练的词汇和测试特征不同,那么特征就不会真正有意义,因为它们会反映出与训练文档不同的词汇.

现在,如果我们专门讨论CountVectorizer,那么请考虑以下示例,让您的训练数据包含以下3个句子:

>狗是黑色的.
>天空是蓝色的.
>狗在跳舞.

现在为此设置的词汇将是{Dog,is,black,sky,blue,dancing}.现在,您将训练的随机森林将尝试根据这6个词汇表的计数来学习规则.因此,您的功能将是长度为6的向量.现在,如果测试集如下:

>狗是白色的.
>天空是黑色的.

现在,如果您使用fit_transform的测试数据,您的词汇将看起来像{Dog,white,is,Sky,black}.因此,您的每个文档将由长度为5的向量表示,表示每个术语的计数.现在,这就像将苹果与橙子进行比较一样.您将学习先前词汇计数的规则,并且这些规则不能应用于此词汇表.这就是您只适合训练数据的原因.

希望有所帮助!

标签:python,tokenize,scikit-learn,random-forest
来源: https://codeday.me/bug/20190527/1166133.html