Scikit learn 使用TF-IDF测试和训练具有不同数量特征的集合
我正在做一个简单的二元分类,我给你们举一个我遇到的问题的例子:假设我们有n文档(文档1,文档2,…,文档n)。我们将使用TF-IDF作为特征值,使用单词包训练二元分类器。我们的培训文件具有m功能(从技术上讲,m是我们在清理和预处理后在所有这些n个文档中拥有的唯一标记的数量) 现在,假设我们有一个经过训练的模型,我们将预测一个新文档的标签。我们首先应该像对待培训文档一样对测试文档进行预处理。然后,我们应该使用TF-IDF为测试文档构建一个特征向量。这里有两个问题:Scikit learn 使用TF-IDF测试和训练具有不同数量特征的集合,scikit-learn,classification,tf-idf,training-data,Scikit Learn,Classification,Tf Idf,Training Data,我正在做一个简单的二元分类,我给你们举一个我遇到的问题的例子:假设我们有n文档(文档1,文档2,…,文档n)。我们将使用TF-IDF作为特征值,使用单词包训练二元分类器。我们的培训文件具有m功能(从技术上讲,m是我们在清理和预处理后在所有这些n个文档中拥有的唯一标记的数量) 现在,假设我们有一个经过训练的模型,我们将预测一个新文档的标签。我们首先应该像对待培训文档一样对测试文档进行预处理。然后,我们应该使用TF-IDF为测试文档构建一个特征向量。这里有两个问题: 对于训练集和测试集,特性的数量
- 对于训练集和测试集,特性的数量不会相同。我读过一些关于这个问题的解决方案,但是,从科学的角度来看,我不能满足李>
- 仅为一个测试文档或其中几个文档计算TF-IDF是没有意义的。因为我们在训练集和测试集中拥有的标记字典不一定相同,即使我们在这两个集合中拥有相同数量的特性,也不一定意味着这些特性相同
我无法科学地证实这一点,但您可以尝试使用m功能字典,并计算测试集中这些功能的TF-IDF分数。这将为每个测试文档创建一个向量,该向量与训练向量大小相同,并且与训练模型时使用的相同特征相关。但是,您必须解决训练集中没有出现在测试集中的单词的问题
我可以问一下为什么您使用TF-IDF,而不是像朴素贝叶斯或随机森林这样的东西吗?您应该在培训期间找出所有可能的特征及其IDF权重;在测试时,使用基于训练数据集找到的特征和权重。不要在测试文档上计算IDF 1) 使用单词袋法时,常用的方法是丢弃训练过程中看不到的单词。如果你在训练期间没有看到一个单词,你就没有关于它的任何信息,因此它不会影响预测结果 2) 是的,在预测时建立词汇表和计算IDF权重是没有意义的。使用在训练阶段发现的特征和重量 scikit learn提供了一个解决方案
将tf*idf放在比训练数据集更大的数据集上可能是有意义的,以便对训练数据中发现的单词进行更精确的idf估计,但我不确定人们这样做的频率。“训练集中没有出现在测试集中的单词”这正是我要寻找答案的问题!据我所知,一旦我们有了特征向量,我们就可以使用随机森林和朴素贝叶斯算法。问题在于使用TF-IDF创建用于训练和测试集的特征向量。特别是,我认为无论我们使用什么算法,我们都应该首先创建特征向量。想想在现实世界场景中,你将如何处理,在现实世界中,你已经用所有可用数据进行了训练,但仍然在预测时出现了新的文本数据。