【问题标题】:how to improve feature selection for Naive bayes?如何改进朴素贝叶斯的特征选择?
【发布时间】:2014-01-03 05:19:47
【问题描述】:

我正在处理数千份需要分类为大约 5 类的文件。我正在使用朴素贝叶斯分类器。当我在一些示例邮件上对其进行测试时,它运行良好,但是当我将其实际应用于原始数据集时,计算变得非常复杂,因为有更多的特征。在某一时刻,这些值非常小,几乎为零。所以我的问题是如何避免这个获取非常小的值的问题以及如何改进特征选择?

【问题讨论】:

  • 这是最难的一点。 ML 中有一个专门的分支专门用于特征选择。除了依赖被证明在文本分类中得分很高的特征之外,没有比选择特征并在测试集上评分更好的方法。

标签: java machine-learning


【解决方案1】:

我们还观察到,朴素贝叶斯在使用大量特征时往往会给出较差的概率估计。所以特征选择在这里确实是一个好主意。此外,研究特征选择总是一个好主意,尤其是在您的特征集非常大的情况下。如果做得好,它可以提高你的学习模型的泛化能力。

有多种方法可以为朴素贝叶斯执行特征选择:

  • 第一步通常用于计算每个特征的信息增益或增益比(参见 Weka),并按这些值对它们进行排名。第一次排名评估有助于识别最相关的特征和可以删除的特征。这种方法的优点是,即使在大型数据集上也能快速运行。另一方面,它没有考虑特征可能相关的事实。
  • 尝试 Weka 的 Cfs 评估(与 BestFirst-Search 配合得很好)。它通过特征与类变量(与信息增益相关)的相关性和特征间相关性来计算子集的价值。由于您需要搜索最佳功能集,因此这种方法的成本要高得多。但是,它可以帮助显着减少特征的数量。对我们来说,它有助于将特征数量从 30,000 个减少到约 50 个。
  • 另一种方法是使用 PCA(主成分分析)。当使用得到的主分量向量作为特征时,可以只选择那些解释数据集中主要方差的向量。使用这种方法,您实际上仍然需要将所有特征注入您的方法,但朴素贝叶斯处理的特征较少,因此可以提供更好的概率估计。

显然,还有更多方法可以执行特征选择,例如使用朴素贝叶斯分类器来评估不同的特征集。然而,在大规模数据集的背景下,我们发现这样的方法太慢了。

上述所有方法都在 Weka ML 库中可用。还请确保当您选择特征时,您只考虑您的训练数据。切勿将部分测试数据用于特征选择。

【讨论】:

    【解决方案2】:

    没有必要仅仅为了避免接近零的值而选择特征——如果您的朴素贝叶斯分类器在对数空间中工作,那么 \prod_i p(f_i | c_j) 将变为 \sum_i log p(f_i | c_j),它不会t 下溢。您可以通过以下方式计算后验概率:

    p(c_j | f) = exp([ log p(c_j) + log p(f|c_j) ] - sum_j' [ log p(c_j') + log p(f|c_j') ])

    至于是否出于其他原因需要进行特征选择……可能是,这取决于问题。降维通常更适合文档分类,因为它可以发现相似/同义词。但最终你必须实现它们才能看到——首先尝试 LSA/PCA,因为它们最简单。如果你有足够的数据,或者放弃朴素贝叶斯,直接使用多层神经网络(你会得到非线性和降维,直接有助于分类任务)。

    【讨论】:

      【解决方案3】:

      Weka 通过搜索数据中所有可能的特征组合来支持特征选择,以找到最适合预测的子集(基于分数和排名)。检查example code 以供参考。

      【讨论】:

        猜你喜欢
        • 2015-01-24
        • 2012-04-09
        • 2011-12-04
        • 1970-01-01
        • 2021-07-19
        • 2020-11-06
        • 2011-09-11
        • 2018-11-04
        • 2019-01-28
        相关资源
        最近更新 更多