【发布时间】:2013-05-13 21:30:06
【问题描述】:
假设我有基于文本的训练数据和测试数据。更具体地说,我有两个数据集——训练和测试——它们都有一个包含文本的列,并且对手头的工作很感兴趣。
我使用 R 中的 tm 包来处理训练数据集中的文本列。在删除空格、标点符号和停用词之后,我对语料库进行词干处理,最后创建了一个 1 克的文档术语矩阵,其中包含每个文档中单词的频率/计数。然后,我采用了预先确定的截止值,例如 50,并且只保留那些计数大于 50 的术语。
在此之后,我使用 DTM 和因变量(存在于训练数据中)训练了一个 GLMNET 模型。到目前为止,一切都顺利而轻松。
但是,当我想根据测试数据或未来可能出现的任何新数据对模型进行评分/预测时,我该如何进行?
具体来说,我想知道的是如何在新数据上创建准确的 DTM?
如果新数据集没有任何与原始训练数据相似的单词,则所有术语的计数都应为零(这很好)。但我希望能够在任何新语料库上复制完全相同的 DTM(就结构而言)。
有什么想法/想法吗?
【问题讨论】:
-
如果我正确理解了您的问题(我不确定我是否正确,没有可重现的示例来演示您正在尝试做什么。),似乎最简单的方法是使用所有数据创建术语文档矩阵,然后将该矩阵拆分为测试和训练集。这样一来,即使一个矩阵的多个项只有零,您也可以在两个矩阵中表示所有项。您遇到了麻烦,因为您在创建术语文档矩阵之前拆分数据。
-
我同意 Schaun,但我只能使用我目前拥有的测试数据来做到这一点。我正在寻找一种在我明天获得新数据时可以使用的解决方案。否则,如果总是向现有数据添加新数据会很痛苦,那么每次都重新创建 DTM 并重新训练模型。
-
同样,使用示例数据可以更轻松地回答您的问题。怎么样:将您的新数据转换为术语文档矩阵,然后使用
plyr包的rbind.fill函数将其绑定到旧数据,这将创建一个包含两个原始矩阵的所有列的新矩阵。您的训练数据将包含新数据中不在训练数据中的任何术语的 NA 列。然后,您可以删除这些列。您的新数据将包含训练数据中任何术语的 NA 列,但新数据中没有,您可以将这些 NA 替换为零。 -
谢谢肖恩;这确实有帮助。不幸的是,我没有任何样本数据。本质上,我试图弄清楚任何包中是否存在应该巧妙地执行此操作的函数。例如,创建了一个 dtm,它使用现有的结构在提供新数据时创建一个新的。在网上搜索并没有发现任何内容,所以我想在这里发布。
标签: r machine-learning nlp text-mining tm