我经常使用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)
https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/linear_model/stochastic_gradient.py
在此之后它转到sgd_fast并且我对cpython不是很好。你能否对这些问题表现出一些敏锐的态度。
答案 0 :(得分:6)
class_weight
确实有助于提高受不平衡数据训练的分类模型的ROC AUC或f1分数。
您可以尝试class_weight="auto"
选择与班级频率成反比的权重。你也可以尝试传递你自己的权重有一个python字典,类标签为键,权重为值。
通过交叉验证的网格搜索可以调整权重。
在内部,这是通过从sample_weight
派生class_weight
来完成的(取决于每个样本的类标签)。然后使用样本权重来缩放单个样本对用于训练具有随机梯度下降的线性分类模型的损失函数的贡献。
功能惩罚是通过penalty
和alpha
超参数独立控制的。 sample_weight
/ class_weight
对此没有任何影响。