如何在Sklearn中将sample_weight参数用于算法

时间:2019-03-21 19:30:43

标签: python machine-learning scikit-learn

我的数据集非常不平衡,我正在执行分类任务。因此,我尝试了所有算法,例如决策树,朴素贝叶斯算法,逻辑回归算法,对于每种算法,我在scikit learning中都遇到了一个名为sample_weights的参数。

假设我的数据集中有大约100k个正数据点和20k个负数据点。
0.83 %的正面标签和0.16 %的负面标签

从文档中,我认为此参数用于通过给具有较少数据点(即固定数据集)的类更多的权重来解决此类问题。

  

class_weight:字典或“平衡”,默认值:无

     

与类关联的权重,格式为{class_label:weight}。如果   没有给出,所有类都应该具有权重。对于   多输出问题,可以在同一目录中提供字典列表   顺序为y的列。

我的问题是,对于上述不平衡数据集示例,我理想的class_weights应该是什么,以便可以避免过采样或欠采样之类的技术?

1 个答案:

答案 0 :(得分:1)

权重应设置为balanced,以便像平衡平衡那样训练班级。

类别权重等于随机超采样。我认为,SMOTE这样的智能过采样技术比训练过程中向样本添加权重的方法更为有效。

但是,过采样技术会增加计算成本,因为模型需要在更大数据集上进行训练(由于过采样)。另一方面,类加权对模型没有没有的额外计算成本。除非训练一个非常昂贵的模型,否则我通常更喜欢SMOTE。