我刚接触机器学习,正在处理一个样本不平衡的数据集,负样本数量是正样本数量的两倍。为了解决这个问题,我使用了scikit-learn中的随机森林类class_weight='balanced',得到了ROC-AUC得分为0.904,而对于Class-1的召回率为0.86。但是当我尝试通过分配权重来进一步提高AUC得分时,结果并没有太大的差异。即使按照如下方式设置Class_weight={0:0.5, 1:2.75},假设会惩罚每一个错误分类的1,但它似乎并没有像预期那样工作。
randomForestClf = RandomForestClassifier(random_state = 42, class_weight = {0: 0.5, 1:2.75})
尝试了不同的值,但对于召回率为1的情况没有太大影响,召回率甚至有所降低(0.85),AUC值也非常微不足道(0.90122)。只有当其中一个标签被设置为0时,它似乎才有效。 进一步尝试了设置样本权重,但这也似乎没有起作用。
# Sample weights
class_weights = [0.5, 2]
weights = np.ones(y_train.shape[0], dtype = 'float')
for i, val in enumerate(y_train):
weights[i] = class_weights[val]
以下是与我类似的问题的参考,但提供的解决方案对我没有用。sklearn RandomForestClassifier的class_weights似乎没有作用。
我是否漏掉了什么?谢谢!