什么是class_weight参数在scikit-learn SGD中的作用

nit*_*254 2 machine-learning python-2.7 scikit-learn

我经常使用scikit-learn,我想了解一些关于SGD"class_ weight"参数的见解.

我能够弄清楚直到函数调用

plain_sgd(coef, intercept, est.loss_function,
                 penalty_type, alpha, C, est.l1_ratio,
                 dataset, n_iter, int(est.fit_intercept),
                 int(est.verbose), int(est.shuffle), est.random_state,
                 pos_weight, neg_weight,
                 learning_rate_type, est.eta0,
                 est.power_t, est.t_, intercept_decay)
Run Code Online (Sandbox Code Playgroud)

https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/linear_model/stochastic_gradient.py

在此之后它转到sgd_fast并且我对cpython不是很好.你能否对这些问题表现出一些敏锐的态度.

  1. 我有一个偏向于开集的阶级,其中正面等级为15k,负等级为36k.class_weight会解决此问题吗?或者进行欠采样将是一个更好的主意.我的数字越来越好,但很难解释.
  2. 如果是,那么它实际上是如何做到的.我的意思是它应用于特征惩罚还是对优化函数的权重.我该如何解释这个外行?

ogr*_*sel 6

class_weight 确实可以帮助提高在不平衡数据上训练的分类模型的ROC AUC或f1分数.

您可以尝试class_weight="auto"选择与班级频率成反比的权重.你也可以尝试传递你自己的权重有一个python字典,类标签作为键,权重作为值.

可以通过交叉验证的网格搜索来调整权重.

在内部,这是通过sample_weightclass_weight(取决于每个样本的类标签)得出来完成的.然后使用样本权重来缩放单个样本对用于训练具有随机梯度下降的线性分类模型的损失函数的贡献.

通过penaltyalpha超参数独立控制特征惩罚.sample_weight/ class_weight对它没有影响.