如何将加权损失添加到Scikit学习分类器中



在许多ML应用程序中,加权损失可能是可取的,因为某些类型的错误预测可能比其他错误更糟糕。例如,在医学二元分类(健康/疾病(中,患者没有进行进一步检查的假阴性结果比假阳性结果更糟糕,在假阳性结果中,后续检查会发现错误。

因此,如果我定义一个加权损失函数如下:

def weighted_loss(prediction, target):
if prediction == target:
return 0  # correct, no loss
elif prediction == 0:  # class 0 is healthy
return 100  # false negative, very bad
else:
return 1  # false positive, incorrect

我如何将类似的东西传递给scikit学习分类器,如随机森林或SVM分类器?

恐怕您的问题不合理,源于损失度量的不同概念之间的根本混淆。

损失函数在prediction == target型条件下不起作用-这就是指标(如准确性、精密度、召回率等(所起的作用-但在损失优化(即培训(过程中不起作用,仅用于绩效评估。损失对于艰难的阶级预测来说是不起作用的;它只适用于分类器的概率输出,其中这种等式条件永远不适用。

一层附加的";"绝缘";在损失和度量之间是阈值的选择,这对于将分类器的概率输出(在训练期间唯一重要的事情(转换为"零"是必要的;硬";类预测(对于正在考虑的业务问题来说,唯一重要的事情(。同样,这个阈值在模型训练过程中绝对不起作用(其中唯一相关的量是损失,它对阈值和硬类预测一无所知(;正如交叉验证线程中所说的那样,降低分类概率阈值:

当你为每一类新样本输出一个概率时,你的练习的统计部分就结束了。选择一个阈值,超过该阈值将新观察分类为1对0,这不再是统计的一部分。它是决策组件的一部分。

尽管您当然可以尝试在狭义模型训练(即损失最小化(之外使用额外的程序来优化这个(决策(阈值,正如您在评论中简要描述的那样

我非常确信,如果RBF绘制的决策边界在拟合数据时考虑到这一点,我会得到更好的结果

使用类似于weight_loss函数的东西是徒劳的。

因此,没有类似于此处显示的weight_loss的函数(本质上是度量,而不是损失函数,尽管它的名称是这样的(,它采用了类似prediction == target的相等条件,可以用于模型训练。

以下SO主题中的讨论也可能有助于澄清问题:

  • 损失&准确性-这些是合理的学习曲线吗
  • Keras中损失函数和度量之间的区别是什么?(尽管有标题,但这些定义通常适用,不仅适用于喀拉拉邦(
  • 成本函数训练目标与精度期望目标
  • 如何解释机器学习模型的损失和准确性

最新更新