【发布时间】:2017-07-09 11:06:02
【问题描述】:
我在 R 邮件列表中提出了这个问题,但我认为这里是寻找答案和提示的更好地方。
我目前正在研究学生论文的文本分类,尝试 识别是否适合某个类别的文本。我使用来自的文本 一个学期 (A) 的培训和另一学期 (B) 的课文 测试分类器。我的工作流程是这样的:
- 从 A 中读取所有文本,构建一个包含大约 1387 个术语的 DTM(A)(包 tm)
- 从 B 中读取所有文本,构建一个包含大约 626 个术语的 DTM(B)
- 使用 SVM(包 e1071)通过 DTM(A) 训练分类器
现在我想使用分类器对 DTM(B) 中的所有文本进行分类。但 当我尝试使用 predict() 时,我总是收到错误消息:Error in eval(expr,envir,enclos):找不到对象'XY'。据我所知, 原因是 DTM(A) 和 DTM(B) 的数量不同 术语,因此并非用于训练模型的每个术语都是 在 DTM(B) 中可用。
当然,用两个不同的特征空间进行分类是有问题的,但我想为这个“现实世界的问题”找到一个解决方案。这个想法是确定学生上交的文本是否适合其他文本。所以我天真的想法是用一个学期的文本[DTM(A)]开发一个预测模型,然后用这个模型来评估另一个学期的新文本[DTM(B)]。由于新文本不在原始 DTM 中,因此特征空间不同。到目前为止,我只找到了使用从所有文本创建的 DTM 的代码,但这需要创建一个新的 DTM(A)` 并每次都重新训练 SVM。
我的问题是:我应该/如何处理这个问题?我应该匹配条款吗 在 DTM(A) 和 DTM(B) 中使用,以获得相同的特征空间? 这可以通过减少 DTM(A) 中的术语数量或 向 DTM(B) 添加几个空/NA 列。或者有没有其他解决方案 我的问题?
亲切的问候
比约恩
【问题讨论】:
-
谢谢,但您链接的帖子不是关于不同的特征空间,这意味着 DTM 中的不同列,而是关于不同级别的分类变量。
-
你可以概括一下。没有机器学习方法可以处理新的预测器;本质上,当您为具有新级别的分类变量创建虚拟变量时,您会得到。所以基本上就像我在回答中所说的那样,你需要维护一个变量列表,这些变量是训练的一部分,因此也是模型的一部分。根据此列表过滤您的测试/预测数据,然后继续对受过训练的对象进行评分。
-
您可能希望以一种聪明的方式进行训练测试划分,以便训练数据包含尽可能多的单词。
标签: r svm text-classification