【发布时间】:2021-06-22 05:27:04
【问题描述】:
在许多机器学习应用中,可能需要加权损失,因为某些类型的错误预测可能比其他错误更糟糕。例如。在医学二元分类(健康/生病)中,假阴性(患者没有得到进一步检查)比假阳性(后续检查会发现错误)更糟糕。
所以如果我这样定义一个加权损失函数:
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 分类器?
【问题讨论】:
-
你的意思是class_weight吗?
-
我不确定。对我来说,班级权重意味着不仅损失而且奖励(正确地上课)都会得到提升,对吧?是否有更深入的解释 class_weight 的作用?我找不到。
-
class_weight 用于不平衡数据集,其中每个类中有不同数量的样本;为了不训练一个偏向于具有大量样本的类的模型,class_weight 就派上用场了。通过根据您拥有的类数为每个类分配不同的权重,如果当前样本用于训练,则深度神经网络的模型权重不会发生太大变化,反之亦然样本。
-
好吧,我没有不平衡的数据集,我想人为地使损失不平衡,因为 FP 比 FN 更可取。我从您的评论中得到的是 class_weights 不是我的问题的答案,对吧?
-
是的,class_weights 不是您问题的答案。但是,您可以做的是开发一个模型,然后使用 sklearn.metrics.classification_report 查看结果。你需要的是高精度分数和相对较高的召回分数。
标签: python machine-learning scikit-learn classification