我正在尝试使用一类SVM来计算异常值检测的精确度,召回率和f1分数(在我的情况下是网络中的攻击)。我以严谨的方式遇到了一个问题。我自己解释一下。由于精度计算如下:
precision = true_positive /(true_positive + false_positive)
如果我使用我已经知道具有少量攻击的数据集进行测试,那么与true_positive相比,false_positive的数量将非常大,因此精度将非常低。 但是,如果我使用我已经知道有很多攻击的数据集,而不更改我的检测算法,则true_positive的数量会增加,然后精度会更高。
我知道计算精度的方式肯定是错误的。我错过了什么?
提前致谢!
答案 0 :(得分:0)
如果我使用我已经知道具有少量攻击的数据集进行测试,那么与true_positive相比,false_positive的数量将非常大,因此精度将非常低。
这是(可能)预期的行为,因为您的数据集是倾斜的。但是,您应该获得可接受的recall值。
但是,如果我使用我已经知道有大量攻击的数据集,而不更改我的检测算法,则true_positive的数量会增加,然后精度会更高。
在这种情况下,我打赌回忆会很低。
根据您的描述,您可以做一些问题和事情。如果您在问题中添加更多信息,我可以解决更具体的问题:
为什么使用多个测试集,所有测试集都是不平衡的?您应该使用平衡甚至更好的内容,将k-fold cross validation与整个数据集一起使用。用它来查找模型的最佳参数。
要确定您在精确度和召回之间是否有足够的平衡,请考虑使用F1 score。
使用confusion matrix来确定您的措施是否可以接受。
绘制learning curves以帮助避免过度拟合。