scikit中的样本重量和类重量选项有什么区别?

Won*_*men 14 python classification machine-learning scikit-learn

我有班级不平衡问题,想要用成本敏感的学习来解决这个问题.

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

Scikit learn有2个选项,称为类权重和样本权重.样品重量实际上是选项2)和类重量选项1).选项2)是处理类不平衡的推荐方法.

Ibr*_*iev 10

这是类似的概念,但是使用sample_weights可以强制估算器更多地关注某些样本,并且使用class_weights可以强制估算器通过关注某个特定类来学习.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等技术人工生成样本.

  • 只是为了澄清,似乎"/"在这个答案中意味着"斜线"而不是"分裂".整体说得好. (2认同)

ldi*_*rer 8

sample_weight并且class_weight有一个类似的功能,就是让你的estimator更加关注一些样本。

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

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

概括起来:
class_weightsample_weight双方做2),选择2)是一种方式来处理类不平衡。我不知道普遍推荐的方法,我会针对您的具体问题尝试 1)、2) 和 1) + 2) 以查看哪种方法效果最好。