【问题标题】:What is the difference between sample weight and class weight options in scikit learn?scikit learn中的样本权重和类权重选项有什么区别?
【发布时间】:2023-03-27 19:48:01
【问题描述】:

我有班级不平衡问题,想通过成本敏感型学习来解决这个问题。

  1. 下样和上样
  2. 赋予类权重以使用修改后的损失函数

问题

Scikit learn 有 2 个选项,称为类权重和样本权重。样本权重实际上是否在执行选项 2) 和类别权重选项 1)。是选项 2) 处理类不平衡的推荐方法。

【问题讨论】:

  • 我认为这在很大程度上取决于问题。您能否提供更多信息,说明您的数据有多不平衡,或许您已经尝试过哪些方法?

标签: python machine-learning scikit-learn classification


【解决方案1】:

这是类似的概念,但是使用 sample_weights 可以强制 estimator 更多地关注某些样本,而使用 class_weights 你可以强制 estimator 关注某些特定类来学习。 sample_weight=0 或 class_weight=0 基本上意味着估计器在学习过程中根本不需要考虑这些样本/类。因此,如果这个类的 class_weight = 0,分类器(例如)将永远不会预测某个类。如果一些 sample_weight/class_weight 在其他样本/类上大于 sample_weight/class_weight - 估计器将首先尝试最小化该样本/类的错误。您可以同时使用用户定义的 sample_weights 和 class_weights。

如果您想通过简单的克隆/删除对训练集进行欠采样/过采样 - 这将等于增加/减少相应的 sample_weights/class_weights。

在更复杂的情况下,您还可以尝试使用SMOTE 等技术人工生成样本。

【讨论】:

  • 只是为了澄清,似乎“/”在这个答案中表示“斜线”而不是“除法”。总体来说很好的解释。
  • @DataMan,是的,这是真的。我同意 sample_weight/class_weight=0 看起来很奇怪。
  • @IbraimGaniev 假设我有一个数据集,有 10 万个样本。 99% 为 0,1% 为 1。我将如何为这些数据指定样本权重?是1:100的比例还是别的什么? clf.fit(X, y, sample_weight=None)[source] 和 scikit 文档说:Per-sample weights. Rescale C per sample. Higher weights force the classifier to put more emphasis on these points. 我不明白在这段代码中物理写什么值:sameple_weight = {0:.01, 1:.90} 或者它必须是一个向量?如果有怎么办?
  • 关于 SMOTE 的注意事项:如果样本太少或特征重叠,则无法可靠地生成样本。
【解决方案2】:

sample_weightclass_weight 有一个类似的功能,就是让你的估算器更加关注一些样本。

实际样本权重为sample_weight * weights from class_weight

这与欠采样/过采样的目的相同,但行为可能不同:假设您有一个随机选择样本的算法(如在随机森林中),是否过采样很重要。

总结一下:
class_weightsample_weight 都做 2),选项 2) 是处理类不平衡的一种方法。我不知道普遍推荐的方法,我会针对您的具体问题尝试 1)、2) 和 1) + 2),看看哪种方法最有效。

【讨论】:

  • @Idrier 假设我有一个数据集,有 100k 个样本。 99% 为 0,1% 为 1。我将如何为这些数据指定样本权重?是1:100的比例还是别的什么? clf.fit(X, y, sample_weight=None)[source] 和 scikit 文档说:Per-sample weights. Rescale C per sample. Higher weights force the classifier to put more emphasis on these points. 我不明白在这段代码中物理写什么值:sameple_weight = {0:.01, 1:.90} 或者它必须是一个向量?如果有怎么办?
  • @Chuck 我也和你一样对同样的事情感到困惑。我很想知道适用于样本权重和类权重计算的确切公式,Idirer 为公式提供了很好的示例,但我也在寻找像您的问题这样的实际示例。
猜你喜欢
  • 2013-06-20
  • 2016-08-01
  • 2015-03-10
  • 2017-08-06
  • 2018-03-18
  • 2014-03-20
  • 2018-07-02
  • 2020-07-13
  • 1970-01-01
相关资源
最近更新 更多