繁体   English   中英

使用R和SVM进行文本分类。 矩阵功能

[英]Text classification with R and SVM. Matrix features

我在玩文本分类和SVM。

我的理解是,通常为训练矩阵选择特征的方法实质上是使用“单词袋”,其中我们最终得到一个矩阵,该矩阵具有与文档中不同单词一样多的列,并且该值列是每个文档中每个单词出现的次数(当然,每个文档用一行表示)。

为了一切正常,我可以训练算法,依此类推,但有时会出现类似的错误

封装时出错:测试数据与模型不匹配!

通过深入研究,我找到了这个问题的答案predict.svm中的错误:测试数据与模型不匹配 ,这实际上表示如果模型具有特征A,B和C,则要分类的新数据应包含列A,B和C。 当然, 对于文本来说,这有点棘手,我要分类的新文档中可能包含分类器从未在训练集中看到的单词。

更具体地说,我使用的是RTextTools库,而内部使用SparseM和tm库,用于训练svm的对象的类型为“ matrix.csr”。

不管图书馆的具体细节如何,我的问题是,在文档分类中是否有任何技术可以确保培训文档和新文档具有不同的词这一事实不会阻止对新数据进行分类?

更新通过@lejlot提出的解决方案是简单地使用create_matrix功能时利用该originalMatrix可选参数的RTextTools实现非常简单。 本质上,originalMatrix应该是一个人使用create_matrix函数训练数据时创建的SAME矩阵。 因此,在训练好数据并建立模型之后,还请保留原始文档矩阵,在使用新示例时,请确保在为预测集创建新矩阵时使用此类对象。

不管图书馆的具体细节如何,我的问题是,在文档分类中是否有任何技术可以确保培训文档和新文档具有不同的词这一事实不会阻止对新数据进行分类?

是的,这是非常琐碎的。 在应用任何训练或分类之前,您需要创建一个预处理对象,该对象应该将文本映射到矢量表示形式。 特别是-它存储用于培训的整个词汇表 稍后,您可以在测试文档上重用同一预处理对象,并且只需忽略之前存储的词汇中的单词(OOV单词,因为它们在文献中经常被引用)。

显然,还有许多其他的“启发式”方法,您可以尝试将它们映射到现有单词而不是丢弃它们(尽管从理论上讲还不够合理)。 而是-您应该创建中间表示,这将是您的新“预处理”对象,该对象可以处理OOV单词(通过一些levenstein距离映射等)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM