离群检测的精确度和召回率

时间:2015-02-17 09:25:06

标签: machine-learning svm

我正在尝试使用一类SVM来计算异常值检测的精确度,召回率和f1分数(在我的情况下是网络中的攻击)。我以严谨的方式遇到了一个问题。我自己解释一下。由于精度计算如下:

precision = true_positive /(true_positive + false_positive)

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

我知道计算精度的方式肯定是错误的。我错过了什么?

提前致谢!

1 个答案:

答案 0 :(得分:0)

  

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

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

  

但是,如果我使用我已经知道有大量攻击的数据集,而不更改我的检测算法,则true_positive的数量会增加,然后精度会更高。

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

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

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

  2. 要确定您在精确度和召回之间是否有足够的平衡,请考虑使用F1 score

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

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