当前位置: 首页 > 知识库问答 >
问题:

如何将加权损失添加到Scikit-learn分类器中?

邓鸿彩
2023-03-14
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分类器,如随机森林或SVM分类器?

共有1个答案

叶允晨
2023-03-14

恐怕你的问题是不恰当的,这是由于损失和度量的不同概念之间存在着根本的混淆。

损失函数不适用于预测==target类型的条件--这是度量(如准确性、精确度、召回率等)所做的--然而,在损失优化(即训练)过程中不起作用,只用于性能评估。损失与难的类预测不起作用;它只对分类器的概率输出起作用,在这种等式条件从不适用的情况下。

损失和度量之间的另一层“隔离”是阈值的选择,这对于将html" target="_blank">分类器的概率输出(在训练期间唯一重要的东西)转换为“硬”类预测(对所考虑的业务问题唯一重要的东西)是必要的。并且,这个阈值在模型训练期间绝对没有作用(其中唯一相关的量是损失,它对阈值和硬类预测一无所知);正如在交叉验证线程减少分类概率阈值中很好地提到的:

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

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

我非常肯定,如果RBF所画的决策边界在拟合数据时考虑到这一点,我会得到更好的结果

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

因此,没有类似于这里显示的weight_loss的函数(本质上是一个度量,而不是一个损失函数,尽管它有名字),它使用了诸如prediction==target等式条件,不能用于模型训练。

以下SO思路的讨论也可能有助于澄清这一问题:

  • 损失和精度-这些学习曲线合理吗?
  • Keras中的损失函数和度量有什么区别?(尽管标题如此,但定义普遍适用,不仅适用于Kera)
  • 成本函数训练目标与精度期望目标
  • 如何解释机器学习模型的损失和准确性
 类似资料:
  • 问题内容: 我有一个使用Python的scikit- learn训练的分类器。如何使用Java程序中的分类器?我可以使用Jython吗?有什么方法可以在Python中保存分类器并在Java中加载分类器?还有其他使用方式吗? 问题答案: 您不能使用jython,因为scikit- learn非常依赖numpy和scipy,它们具有许多已编译的C和Fortran扩展,因此无法在jython中工作。 在

  • 问题内容: 我有一些文本类型的列的熊猫数据。这些文本列中包含一些NaN值。我想做的是通过(用最常用的值替换NaN )来估算那些NaN 。问题在于实施。假设有一个具有30列的Pandas数据框df,其中10列属于分类性质。一旦我运行: Python会生成一个,其中’run1’是带有分类数据的第一列中的普通(不丢失)值。 任何帮助将非常欢迎 问题答案: 要将平均值用于数字列,将最频繁的值用于非数字列,

  • 问题内容: 我想使两个按钮看起来像按钮。只有当我使用actionlink的#ID来应用时,我才能实现此目的。我想为操作链接分配一个类,但是当我使用下面的代码时,出现一个错误,提示我缺少“}”。 这是我正在应用的样式: 这可行,我想我可以将另一个#ID添加到样式中,但想将样式应用于Class。 问题答案: 您必须使用字符,因为class是C#中的关键字。这是MSDN文档的链接

  • K-means k是一个超参数,表示要聚类成多少类。K-means计算方法是重复移动类的重心,以实现成本函数最小化,成本函数为: 其中μk是第k类的重心位置 试验 构造一些样本用户试验,如下: # coding:utf-8 import sys reload(sys) sys.setdefaultencoding( "utf-8" ) import matplotlib.pyplot as pl

  • 本文向大家介绍scikit-learn库如何用于在Python中加载数据?,包括了scikit-learn库如何用于在Python中加载数据?的使用技巧和注意事项,需要的朋友参考一下 Scikit-learn,通常称为sklearn,是Python中的一个开源库,用于实现机器学习算法。 在Python强大而稳定的界面的帮助下,这包括分类,回归,聚类,降维等等。该库基于Numpy,SciPy和Mat

  • 问题内容: 在带有一些实例变量和方法的ES6类中,如何向其添加mixin?我在下面给出了一个示例,尽管我不知道mixin对象的语法是否正确。 如果我运行,它将失败,因为类上没有任何内容,就像在mixin中一样,这就是为什么我需要将mixin变量和方法添加到类中的原因。 我看到有一个lodash mixin函数https://lodash.com/docs/4.17.4#mixin,但是我不知道如何