Scikit learn - 如何使用 SVM 和随机森林进行文本分类?

Posted

技术标签:

【中文标题】Scikit learn - 如何使用 SVM 和随机森林进行文本分类?【英文标题】:Scikit learn - How to use SVM and Random Forest for text classification? 【发布时间】:2014-03-25 06:54:27 【问题描述】:

我有一组trainFeatures 和一组testFeatures,带有正面、中性和负面标签:

trainFeats = negFeats + posFeats + neutralFeats
testFeats  = negFeats + posFeats + neutralFeats

例如,trainFeats 中的一项是

(['blue', 'yellow', 'green'], 'POSITIVE') 

测试功能列表相同,因此我为每个集合指定标签。我的问题是如何使用随机森林分类器和 SVM 的 scikit 实现来获得该分类器的准确度以及每个类的精度和召回分数?问题是我目前使用单词作为特征,而从我读到的这些分类器需要数字。有没有一种方法可以在不改变功能的情况下实现我的目的?非常感谢!

【问题讨论】:

【参考方案1】:

您可以查看scikit-learn tutorial,尤其是the section on learning and predicting,了解如何创建和使用分类器。该示例使用了 SVM,但使用 RandomForestClassifier 代替它很简单,因为所有分类器都实现了 fitpredict 方法。

使用文本功能时,您可以使用CountVectorizer 或DictVectorizer。看看feature extraction,尤其是section 4.1.3。

你可以找到一个分类文本文档的例子here。

然后你可以用classification report得到分类器的精度和召回率。

【讨论】:

感谢您的回复!我的问题是我目前使用单词作为特征,而从我读到的内容中,我看到随机森林和 SVM 需要数字。这就是我完全陷入困境的地方! @Crista23 我明白了。问题的第一个版本中没有提到这一点。我用更多信息更新了答案。 感谢您的回复!确实非常有用!当我尝试对 testData 进行矢量化时,我仍然面临一个问题: vec = DictVectorizer(sparse=False) testFeatures1 = vec.fit_transform(testFeatures) 给我一个内存错误。它在训练数据的情况下工作正常,因为我有大约 8000 个实例,但在测试数据上有 80000 个并且它显示内存错误。有什么我可以做的吗?我真的需要测试所有测试数据。谢谢! @Crista23 这似乎是一个完全不同的问题。根据您的用例,可能会有不同的方法。我建议您发布一个包含更多详细信息的新问题,以便其他人也可以做出贡献。另外,尝试搜索here,可能已经有一些类似的问题。 您可以尝试对测试集进行批量分类。

以上是关于Scikit learn - 如何使用 SVM 和随机森林进行文本分类?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 scikit-learn 的 SVM 中使用非整数字符串标签? Python

如何使用 scikit.learn 将字符串列表用作 svm 的训练数据?

如何让 SVM 很好地处理 scikit-learn 中的缺失数据?

如何获取 Scikit-learn 的 svm 中的训练误差?

如何获得 scikit-learn SVM 分类器的所有 alpha 值?

Scikit Learn:如何在回归中设置 SVM 输出范围?