【问题标题】:How can I change threshold for classification in NaiveBayesMultinomial or compute confusion matrix manually in Weka如何在 NaiveBayesMultinomial 中更改分类阈值或在 Weka 中手动计算混淆矩阵
【发布时间】:2014-05-22 23:39:38
【问题描述】:

我正在从事一个垃圾邮件过滤器挖掘项目,我目前正在使用 NaiveBayesMultinomial 分类器通过计算单词出现的频率来区分垃圾邮件和非垃圾邮件。

问题是WEKA默认将分类阈值设置为0.5。但是,将非垃圾邮件误分类为垃圾邮件比反之更有害。

我想调整一下WEKA的NaiveBayesMultinomial算法的阈值,看看混淆矩阵是如何变化的。如果这不能直接实现,我如何利用 WEKA 的输出来计算不同阈值的混淆矩阵?


以下是对测试拆分进行评估时项目当前结果的摘要:

总结:

Correctly Classified Instances        2715               98.4766 %
Incorrectly Classified Instances        42                1.5234 %
Kappa statistic                          0.9679
Mean absolute error                      0.0184
Root mean squared error                  0.1136
Relative absolute error                  3.8317 %
Root relative squared error             23.2509 %
Total Number of Instances             2757     `

按类别的详细精度:

               TP Rate   FP Rate   Precision   Recall  F-Measure   ROC Area  Class
                 0.998     0.035      0.978     0.998     0.988      0.998    ham
                 0.965     0.002      0.996     0.965     0.98       0.999    spam
Weighted Avg.    0.985     0.022      0.985     0.985     0.985      0.998

混淆矩阵:

   a    b   <-- classified as
1669    4 |   a = ham
  38 1046 |   b = spam

【问题讨论】:

    标签: weka naivebayes confusion-matrix


    【解决方案1】:

    可以使用代价敏感分类来调整概率阈值。

    如果所需的阈值是k,则设置误报成本μ和误报成本λ,这样:

    k = μ / (μ + λ)

    例如,如果您希望阈值为 0.4,请将 μ 设置为 2,将 λ 设置为 3。换句话说,使用以下成本矩阵:

    0 3
    2 0
    

    参考:使用 Weka 进行更多数据挖掘 — Lesson 4.6 Cost-sensitive classification vs. cost-sensitive learning (slides)。


    公式解释:

    在有两个类别的朴素贝叶斯中,如果类别 A 的概率为 p,则类别 B 的概率为 (1 - p)。

    如果阈值为 0.5,如果我们得到 p > 0.5,或者换句话说,p > (1 - p),我们将分类为 A 类。

    假设将A误分类为B(假阴性)的代价是Ca,而将B误分类为A(假阳性)的代价是Cb。然后,只有当将 A 误分类为 B 的概率加权成本大于将 B 误分类为 A 的概率加权成本时,我们才将其分类为 A 类。换句话说,如果这是真的,则分类为 A:

    Ca * p > Cb * (1 - p)

    重新排列不等式,我们得到:

    p > Cb / (Ca + Cb)

    【讨论】:

      【解决方案2】:

      您可以在成本效益分析屏幕中更改它。 在结果列表中右键单击结果并选择可视化阈值曲线。

      里面有一个滑块可以移动阈值,你的新混淆矩阵在左下角。

      【讨论】:

        【解决方案3】:

        我搜索了谷歌,似乎在 WEKA 中不太可能这样做。

        但这仍然可以通过“测试选项”->“更多选项”->“输出预测”来实现 然后它会给我每个测试样本的可能性结果。

        从那里我可以使用其他工具来完成其余的工作。

        【讨论】:

          猜你喜欢
          • 2013-02-19
          • 2014-10-14
          • 2017-09-25
          • 2014-07-09
          • 1970-01-01
          • 2017-02-25
          • 2015-12-14
          • 2018-04-01
          相关资源
          最近更新 更多