1

如何确定深度学习模型的最佳阈值。我正在使用 CNN 预测癫痫发作。我想确定我的深度学习模型的最佳阈值以获得最佳结果。

我正在尝试超过 2 周的时间来寻找如何做到这一点。

任何帮助,将不胜感激。

代码

history=model.fit_generator(generate_arrays_for_training(indexPat, filesPath, end=75), #end=75),
                                validation_data=generate_arrays_for_training(indexPat, filesPath, start=75),#start=75),
                                steps_per_epoch=int((len(filesPath)-int(len(filesPath)/100*25))),#*25), 
                                validation_steps=int((len(filesPath)-int(len(filesPath)/100*75))),#*75),
                                verbose=2,
                                epochs=50, max_queue_size=2, shuffle=True, callbacks=[callback,call])
4

2 回答 2

1

通常,选择正确的分类阈值取决于用例。您应该记住,选择阈值不是超参数调整的一部分。分类阈值的值会极大地影响模型训练后的行为。

如果你增加它,你希望你的模型对预测非常确定,这意味着你将过滤掉误报——你的目标是精确度。当您的模型是关键任务管道的一部分时,可能会出现这种情况,其中基于模型的正输出做出的决策代价高昂(在金钱、时间、人力资源、计算资源等方面......)

如果你减少它,你的模型会说更多的例子是积极的,这将允许你探索更多可能是积极的例子(你的目标是召回。当假阴性是灾难性的,例如在医疗案例中,这很重要(你宁愿检查是否低概率患者得了癌症,而不是忽视他,后来发现他确实病了)

有关更多示例,请参阅精度何时比召回更重要?

现在,在召回率和精度之间进行选择是一种权衡,您必须根据自己的情况进行选择。帮助您实现这一目标的两个工具是 ROC 和 Recall-Precision Curves How to Use ROC Curves and Precision-Recall Curves for Classification in Python这表明模型如何根据分类阈值处理误报和误报

于 2020-06-14T18:53:33.340 回答
0

许多 ML 算法能够预测类别成员的分数,在将其绘制到类别标签之前需要对其进行解释。您可以通过使用阈值(例如 0.5)来实现这一点,其中大于阈值的值被映射到一个类,其余的映射到另一个类。

1 级 =预测 < 0.5;0 级 =预测 => 0.5

为您遇到的问题找到最佳阈值至关重要,而不仅仅是假设分类阈值,例如 0.5;

为什么?对于具有严重类不平衡的分类问题,默认阈值通常会导致性能非常差。

请参阅,ML 阈值是针对特定问题的,必须进行微调在此处阅读有关它的简短文章

确定深度学习模型的最佳阈值以获得最佳结果的最佳方法之一是调整用于将概率映射到类的阈值。

CNN 的最佳阈值可以直接使用 ROC Curves 和 Precision-Recall Curves 计算。在某些情况下,您可以使用网格搜索来微调阈值并找到最佳值。

下面的代码将帮助您检查将提供最佳结果的选项。GitHub链接

from deepchecks.checks.performance import PerformanceReport
check = PerformanceReport()
check.run(ds, clf)
于 2022-02-02T18:52:28.987 回答