gpt4 book ai didi

python - 随机森林中的 class_weight 超参数改变混淆矩阵中的样本量

转载 作者:行者123 更新时间:2023-11-30 09:49:53 28 4
gpt4 key购买 nike

我目前正在研究一个随机森林分类模型,其中包含 24,000 个样本,其中 20,000 个样本属于 class 0其中 4,000 个属于 class 1 。我做了一个train_test_split其中 test_set 是 0.2整个数据集( test_set 中大约有 4,800 个样本)。由于我正在处理不平衡的数据,因此我查看了超参数 class_weight旨在解决这个问题。

我设置class_weight='balanced'时遇到的问题看看confusion_matrix我得到的训练集是这样的:

array([[13209, 747],
[ 2776, 2468]])

正如你所看到的,下面的数组对应于 False Negative = 2776接下来是 True Positive = 2468 ,而上面的数组对应于 True Negative = 13209接下来是 False Positive = 747 。问题是样本量属于 class 1根据confusion_matrix2,776 (False Negative) + 2,468 (True Positive)总计为 5,244 samples属于class 1 。这没有任何意义,因为整个数据集仅包含属于 class 1 的 4,000 个样本。其中只有 3,200 个位于 train_set 中。它看起来像 confusion_matrix返回 Transposed矩阵的版本,因为实际样本量属于class 1training_set train_set 中应总计有 3,200 个样本和 test_set 中的 800 。一般来说,正确的数字应该是 747 + 2468,总计为 3,215,即属于 class 1 的正确样本数量。 。有人可以解释一下我使用 class_weight 时会发生什么吗? ? confusion_matrix是真的吗?返回 transposed矩阵的版本?我是否以错误的方式看待它?我尝试寻找答案并访问了几个有些相似的问题,但没有一个真正涵盖了这个问题。

这些是我查看的一些来源:

scikit-learn: Random forest class_weight and sample_weight parameters

How to tune parameters in Random Forest, using Scikit Learn?

https://datascience.stackexchange.com/questions/11564/how-does-class-weights-work-in-randomforestclassifier

https://stats.stackexchange.com/questions/244630/difference-between-sample-weight-and-class-weight-randomforest-classifier

using sample_weight and class_weight in imbalanced dataset with RandomForest Classifier

如有任何帮助,我们将不胜感激,谢谢。

最佳答案

复制 docs 中的玩具示例:

from sklearn.metrics import confusion_matrix

y_true = [0, 1, 0, 1]
y_pred = [1, 1, 1, 0]

tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
(tn, fp, fn, tp)
# (0, 2, 1, 1)

因此,您提供的混淆矩阵的读数似乎是正确的。

Is it true that the confusion_matrix returns a transposed version of the matrix?

正如上面的例子所示,没有。但是一个非常简单(而且看起来很无辜)的错误可能是您交换了 y_truey_pred 参数的顺序,这确实很重要;结果确实是一个转置矩阵:

# correct order of arguments:
confusion_matrix(y_true, y_pred)
# array([[0, 2],
# [1, 1]])

# inverted (wrong) order of the arguments:
confusion_matrix(y_pred, y_true)
# array([[0, 1],
# [2, 1]])

从您提供的信息中无法判断这是否是原因,这很好地提醒了您为什么应该始终提供实际代码,而不是口头描述您的想法 你的代码正在做...

关于python - 随机森林中的 class_weight 超参数改变混淆矩阵中的样本量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47079266/

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