我想在不平衡的分类问题上使用sklearn.ensemble.GradientBoostingClassifier。我打算针对Area Under the Receiver Operating Characteristic Curve (ROC AUC)进行优化。为此,我想重新分配班级以使小班级对分类器更加重要。

通常,这可以通过设置class_weight =“ balanced”来完成(例如,在RandomForestClassifier中),但是GradientBoostingClassifier中没有此类参数。

该文件说:

“平衡”模式使用y的值自动将权重与输入数据中的类频率成反比地调整为n_samples /(n_classes * np.bincount(y))

如果y_train是我的目标数据框,元素在{0,1}中,则说明该文件暗示应重现class_weight =“ balanced”

sample_weight = y_train.shape[0]/(2*np.bincount(y_train))
clf = ensemble.GradientBoostingClassifier(**params)
clf.fit(X_train, y_train,sample_weight = sample_weight[y_train.values])


这是正确的还是我错过了什么?

最佳答案

我建议您在scikit-learn中使用class_weight.compute_sample_weight实用程序。
例如:

from sklearn.utils.class_weight import compute_sample_weight
y = [1,1,1,1,0,0,1]
compute_sample_weight(class_weight='balanced', y=y)


输出:

array([ 0.7 ,  0.7 ,  0.7 ,  0.7 ,  1.75,  1.75,  0.7 ])


您可以将其用作sample_weight关键字的输入。

07-24 09:53