如何使用 DecisionTreeClassifier 来平衡分类?
How to balance classification using DecisionTreeClassifier?
我有一个数据集,其中 classes 是不平衡的。 class 是 0
、1
或 2
。
如何计算每个 class 的预测误差,然后在 scikit-learn 中相应地重新平衡 weights
?
如果您想完全平衡(将每个 class 视为同等重要),您可以简单地传递 class_weight='balanced'
,如 docs:
中所述
The “balanced” mode uses the values of y to automatically adjust
weights inversely proportional to class frequencies in the input data
as n_samples / (n_classes * np.bincount(y))
如果classA的频率是10%,classB的频率是90%,那么classB就会成为主导class并且你的决策树将变得偏向占主导地位的 classes
这种情况下,可以给模型传一个dic{A:9,B:1}
来指定每个class的权重,比如
clf = tree.DecisionTreeClassifier(class_weight={A:9,B:1})
class_weight='balanced'
也可以,只是根据每个class个频率的比例自动调整权重
我用了class_weight='balanced'
后,每个class的记录数都变成一样了(88923左右)
我有一个数据集,其中 classes 是不平衡的。 class 是 0
、1
或 2
。
如何计算每个 class 的预测误差,然后在 scikit-learn 中相应地重新平衡 weights
?
如果您想完全平衡(将每个 class 视为同等重要),您可以简单地传递 class_weight='balanced'
,如 docs:
The “balanced” mode uses the values of y to automatically adjust weights inversely proportional to class frequencies in the input data as
n_samples / (n_classes * np.bincount(y))
如果classA的频率是10%,classB的频率是90%,那么classB就会成为主导class并且你的决策树将变得偏向占主导地位的 classes
这种情况下,可以给模型传一个dic{A:9,B:1}
来指定每个class的权重,比如
clf = tree.DecisionTreeClassifier(class_weight={A:9,B:1})
class_weight='balanced'
也可以,只是根据每个class个频率的比例自动调整权重
我用了class_weight='balanced'
后,每个class的记录数都变成一样了(88923左右)