我想在不平衡的分类问题上使用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
关键字的输入。