【问题标题】:Precision and recall for outlier detection异常值检测的精度和召回率
【发布时间】:2015-04-17 23:22:42
【问题描述】:

我正在尝试使用一类 SVM 计算异常值检测(在我的例子中是网络攻击)的精度、召回率和 f1 分数。我在以严格的方式这样做时遇到了问题。我自己解释。由于精度计算如下:

精度 = true_positive /(true_positive + false_positive)

如果我使用我已经知道有少量攻击的数据集进行测试,那么与 true_positive 相比,false_positive 的数量会非常大,因此精度会非常低。 但是,如果我使用一个我已经知道有很多攻击的数据集,那么在不改变我的检测算法的情况下,true_positive 的数量会增加,然后精度会更高。

我知道我计算精度的方式一定有问题。我错过了什么?

提前致谢!

【问题讨论】:

    标签: machine-learning svm


    【解决方案1】:

    如果我使用我已经知道的具有少量攻击的数据集进行测试,那么与 true_positive 相比,false_positive 的数量会非常大,因此精度会非常低。

    这是(可能)预期的行为,因为您的数据集是倾斜的。但是,您应该得到一个可以接受的recall 值。

    但是,如果我使用我已经知道有很多攻击的数据集,那么在不改变我的检测算法的情况下,true_positive 的数量会增加,然后精度会更高。

    在这种情况下,我敢打赌回忆会很低。

    根据您的描述,有一些问题和您可以做的事情。如果您在问题中添加更多信息,我可以解决更具体的问题:

    1. 为什么要使用多个测试集,所有这些都是不平衡的?您应该使用平衡的东西,甚至更好的是,将k-fold cross validation 与您的整个数据集一起使用。使用它为您的模型找到最佳参数。

    2. 要确定您是否在准确率和召回率之间取得了足够好的平衡,请考虑使用F1 score

    3. 使用confusion matrix 来确定您的措施是否可以接受。

    4. 绘制learning curves 以帮助避免过度拟合。

    【讨论】:

      猜你喜欢
      • 2017-04-08
      • 2023-04-07
      • 2012-11-26
      • 2014-02-20
      • 1970-01-01
      • 2020-06-22
      • 2018-02-18
      • 2018-08-16
      • 2011-08-18
      相关资源
      最近更新 更多