使用RandomForest算法,灵敏度和特异性进行预测

时间:2018-03-04 15:29:18

标签: python r machine-learning data-science

我是ML的新手,并使用随机森林算法开发一个简单的预测模型。我也在使用Confusion Matrix评估我的模型,并计算我建模型的灵敏度和特异性分数。

虽然我在概念上理解这两个,但我现在停留在这样一个点,我的模型总是导致灵敏度得分为1,特异性得分为0.它得到91%的准确度得分(91/100训练样本是预测正确)。

现在我从中推断出什么?我的模型是否太敏感而且不具体?我是否必须明白我的模型将更多地发出假阳性而不是假阴性? (这在我的场景中可能会很好),因为我正在处理的域名是预测欺诈,其中误报更好。

作为旁注,在典型的ML工作流程中,灵敏度和特异性分数如何在实践中经常使用?它是否用于在客户端系统上保留某种阈值,以便用一小撮盐进行预测?我可以调整哪些参数来获得这些参数的不同值?目前,我只是调整了随机森林模型变量,如没有树,没有节点等。但这些数字始终保持不变。

1 个答案:

答案 0 :(得分:0)

我认为,您可以根据特异性和敏感性数字做出的最佳推断是您的模型以某种方式错误指定,存在数据错误,或者数据的某些其他非参数方面或导致此问题的代码问题。

如你所知:(使用:真阳性,假阴性......)

Sensitivity = TP/(TP + FN) 

Specificity = TN/(FP + TN)

Accuracy = (TP + TN) / (TP + FP + TN + FN) 

要获得灵敏度= 1,TP = TP + FN。当然,有许多方法可能会发生,但要查找的方法是TP = FN,或FN = 0(因为TP不能为0)。

此外,0的特异性意味着TN = 0,无论FP和TN是什么。但在这里我也会看看FP和TN的分布。

如果TN = 0,那么对于精度= 0.9,它必须是TP = 0.9,这表明即使TN = 0,FP和/或FN>实际上FP + FN = 0.1(因为分母必须等于1)。

@desertnaut提到的一种可能性是你有一个严重的阶级不平衡问题。也就是说,少数类(您想要预测的那个)是数据中所有观察总数的非常非常小的一部分。要研究这一点,只需绘制目标的分布。如果你发现少数民族阶级比总数少10%,(一般来说,一个类别占据其他10:1),那么你很可能会开始在你的模型中看到问题。

Here's a good tutorial on dealing with imbalanced data.

And here's a paper if you're more technically minded and want to confront an imbalance in a more academic way.

那就是说,我也会看看你的模型代码。检查您如何分离培训和测试:

  • 训练集中的班级余额是否代表整个班级的余额?
  • 如果有的话,你如何进行交叉验证?更改方法会为spec / sens提供不同的结果吗?
  • 类别的数据类型是否始终正确(对于其他变量,是否正确)?由于RF可以处理分类变量,因此如果您将int编码为string(只是为了选择示例),则可能不会产生错误,这可能会产生奇怪的结果。

查看具有完美分数(1/0)的任何结果通常表示不正确地指定模型参数(或超参数)之外的其他内容。并非它无法发生。它很少见。