我有一个训练集,想要使用分类方法来根据这个训练集对其他文档进行分类。我的文档类型是新闻,类别包括体育、政治、经济等。
我完全理解朴素贝叶斯和KNN,但支持向量机和决策树有些模糊,不知道是否能自己实现?还是有应用程序可以使用这些方法?
在这种情况下,我应该使用什么方法最好呢?
谢谢!
我有一个训练集,想要使用分类方法来根据这个训练集对其他文档进行分类。我的文档类型是新闻,类别包括体育、政治、经济等。
我完全理解朴素贝叶斯和KNN,但支持向量机和决策树有些模糊,不知道是否能自己实现?还是有应用程序可以使用这些方法?
在这种情况下,我应该使用什么方法最好呢?
谢谢!
虽然这是最简单的算法,且所有变量都被认为相互独立。但在真正的文本分类情况下,这种方法表现良好。我肯定会首先尝试这种算法。
KNN用于聚类而非分类。我认为你误解了聚类和分类的概念。
SVM有SVC(分类)和SVR(回归)算法可用于分类和预测。有时它表现很好,但从我的经验来看,在文本分类中,它的性能很差,因为它对好的分词器(过滤器)要求很高。但数据集的字典总是有一些脏的tokens。准确性非常不好。
我从未尝试过这种方法进行文本分类。因为我认为决策树需要几个关键节点,而对于文本分类,很难找到“几个关键tokens”,且随机森林对于高稀疏维度效果很差。
供参考
这些都是根据我的经验,但对于你的情况,你没有更好的方法来决定使用哪些方法,除了尝试每个算法来适应你的模型。
Apache的Mahout是一个非常好的机器学习算法工具。它集成了三个方面的算法:推荐、聚类和分类。你可以尝试这个库。但你必须学习一些关于Hadoop的基础知识。
而Weka是一个软件工具包,可以用于实现多种算法的经验。
线性支持向量机(Linear SVMs)是文本分类问题中最优秀的算法之一(与逻辑回归一起)。在这样的高维特征空间中,决策树表现很差。
Pegasos 算法是最简单的线性支持向量机算法之一,非常有效。
编辑:多项式朴素贝叶斯(Multinomial Naive bayes)也可以很好地用于文本数据,但通常不如线性支持向量机表现出色。kNN 可以正常运行,但它已经是一个缓慢的算法,并且在文本问题上从未达到过最高的准确率。
如果您熟悉Python,可以考虑使用NLTK和scikit-learn。前者专注于自然语言处理,而后者是一个更全面的机器学习包(但它拥有很多文本处理模块)。两者都是开源的,并在SO上拥有良好的社区支持。