gpt4 book ai didi

python - Class_weight 和 sample_weight 对 sklearn Random Forest 无效

转载 作者:行者123 更新时间:2023-12-05 05:38:27 24 4
gpt4 key购买 nike

我是 ML 的新手,我一直在处理一个不平衡的数据集,其中负样本的数量是正样本的两倍。为了解决这些问题,我设置了 scikit-learn Random forest class_weight = 'balanced',这给了我 0.904 的 ROC-AUC 分数,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's class_weights seems to have no effect

有什么我遗漏的吗?谢谢!

最佳答案

原因是你把树完全长出来,这导致每个叶节点都是纯净的。无论类权重如何,这都会发生(尽管通向那些纯节点的树的结构会发生变化)。每棵树的预测概率将(几乎)全部为 0 或 1,因此总体概率估计仅由树之间的分歧驱动。

如果您设置例如max_depth=10(或您喜欢的任何树复杂度参数),现在许多/大多数叶节点将是纯的。设置较大的正类权重会产生偏向正类的叶子值(但仍然不仅仅是 0 和 1),因此概率估计将全面偏斜,从而导致更高的召回率(在精度的代价,大概)。

ROC 曲线相对不受类别平衡和较大权重引起的偏高概率的影响,因此对于固定的 max_depth,不应受到权重变化的严重影响

关于python - Class_weight 和 sample_weight 对 sklearn Random Forest 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72909466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com