如何解决如何为 Scikit-learn 分类器添加加权损失?
在许多 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-learn 分类器,例如 Random Forests 或 SVM 分类器?
解决方法
我担心你的问题是不恰当的,因为损失和度量的不同概念之间存在根本性的混淆。
损失函数不适用于prediction == target
类型的条件 - 这就是指标(如准确度、精确度、召回率)等)do - 然而,这在损失优化(即训练)期间不起作用,仅用于性能评估。损失对于硬类预测不起作用;它仅适用于分类器的概率输出,在这种情况下,此类等式条件从不适用。
损失和指标之间的额外“隔离”层是阈值的选择,这是转换分类器的概率输出所必需的(仅在训练期间重要) 到“硬”类预测(仅对正在考虑的业务问题重要)。同样,这个阈值在模型训练过程中完全没有作用(唯一相关的数量是损失,它对阈值和硬类预测一无所知);很好地放入交叉验证线程 Reduce Classification Probability Threshold:
当您为新样本的每个类别输出概率时,练习的统计部分就结束了。选择一个阈值,超过该阈值,您将新观察结果分类为 1 与 0 不再是统计数据的一部分。它是决策组件的一部分。
尽管您当然可以尝试使用严格定义的模型训练(即损失最小化)之外的额外程序来优化此(决策)阈值,但正如您在评论中简要描述的那样,您的期望是
我很确定,如果 RBF 绘制的决策边界在拟合数据时考虑到这一点,我会得到更好的结果
使用类似于您的 weight_loss
函数的东西是徒劳的。
因此,没有与此处显示的 weight_loss
类似的函数(本质上是一个度量,而不是损失函数,尽管它的名称如此),它采用了诸如 prediction == target
之类的相等条件,可用于模型训练。
以下 SO 线程中的讨论也可能有助于澄清问题:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。