二值分类、精确召回曲线和阈值

2024-09-28 22:25:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python编写代码。 在我的工作中,我有一个参数,其中有多个可能的值,还有一些数据X以及相关的二进制目标值y。在

对于每个参数的值,我使用scickit learn on Xy运行一些分类算法(例如:naivebayes)。 在这一步中,我们使用交叉验证,对数据集进行80:20的列测试,并将结果平均化。在

这将为每个参数值生成一个分数(精确召回曲线下的区域),并且我们选择得分最高的那个作为该分类器的首选参数值。 然后,我们希望使用数据X全部来训练算法,而不是仅仅使用其中的80%,从而获得一些决策函数f,我们将用它来进行预测。在


这些决策函数返回的概率或数值表示算法“有多确定”某个样本属于某个类;它们不能正确预测样本的。 这是通过阈值t完成的:数值小于t的样本被分配为类0,其余样本被分配为类1。在

我们可以回忆起这些预测的准确性。 改变t的值正是在精确召回空间中生成多个点的原因,允许我们为给定的模型绘制一条曲线(从而计算曲线下的面积)。 我们对交叉验证中的每一个步骤都这样做。在


现在,我们有一些数据Z,我们可以应用f,但是我们没有标签。 我们如何为我们的模型选择合适的值t?在

更具体地说,考虑交叉验证期间生成的模型(对于相同的首选参数值)。 每一个这样的模型都有一个相应的决策函数,因此有一个相应的具有相关阈值的精确召回曲线。在

给定其中一条曲线中的一个点p_0,并由此得到一个相关的阈值t_0值,那么假设其他曲线中靠近p_0的点将具有接近t_0的相关阈值,这是否合理? 换句话说,如果我们使用交叉验证期间获得的阈值的平均值作为阈值,那么期望我们的模型(用所有数据训练)的行为与我们在交叉验证中得到的模型的行为相似是否合理?在


您可以假设在交叉验证中获得的模型的平均值与每个交叉验证模型本身之间几乎没有差异。 对于前面提到的naivebayes分类器,例如

Example plot with multiple precision-recall curves: one for each cross validation fold, as well as the mean curve

所以不同的褶皱会产生非常紧密的曲线。在


Tags: 数据代码模型算法参数分类器阈值曲线