我有一个非常不平衡的数据集,我正在执行分类任务。因此,我尝试了所有算法,即(决策树、朴素贝叶斯、逻辑回归),对于每一种算法,我都在 scikit learn 中遇到了一个名为 sample_weights
的参数。
假设我的数据集中有大约 10 万个正数据点和 2 万个负数据点。
即 0.83 %
的正标签和 0.16 %
的负标签
根据文档,我假设此参数用于通过为具有较少数据点(即不平衡数据集)的类赋予更多权重来解决此类问题。
class_weight : dict or ‘balanced’, default: None
Weights associated with classes in the form {class_label: weight}. If not given, all classes are supposed to have weight one. For multi-output problems, a list of dicts can be provided in the same order as the columns of y.
我的问题是,对于上述不平衡数据集示例,我理想的 class_weights 应该是多少,这样我就可以避免过采样或欠采样等技术?
最佳答案
权重应该设置为balanced
,这样训练的类就好像它们是平衡的。
类别权重相当于随机过采样。在我看来,智能过采样技术如 SMOTE是一种比在训练过程中给样本增加权重的方法更有效的方法。
但是,过采样技术会增加计算成本,因为模型需要在更大数据集上进行训练(由于过采样)。另一方面,类加权对模型没有额外的计算成本。除非训练非常计算量大的模型,否则我通常更喜欢 SMOTE。
关于python - 如何在 sklearn 算法中使用 sample_weight 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55288023/