我有一个数据集,其中的类是不平衡的。这些类要么是 0, 1 或 2.
0
1
2
如何计算每个班级的预测误差,然后重新平衡?weights 中相应的?
weights
如果你想完全平衡(将每个类视为同等重要),你可以简单地通过 class_weight='balanced'正如《公约》中所述 文件:
class_weight='balanced'
平衡 "模式使用y的值自动调整权重,与输入数据中的类频率成反比,如图所示。n_samples / (n_classes * np.bincount(y))
n_samples / (n_classes * np.bincount(y))
如果A类的频率是10%,B类的频率是90%,那么B类就会成为优势类,你的决策树就会变得偏向优势类
在这种情况下,你可以通过一个dic? {A:9,B:1} 到模型中,以指定每个类的权重,如
{A:9,B:1}
clf = tree.DecisionTreeClassifier(class_weight={A:9,B:1})
该 class_weight='balanced' 也可以,只是根据各班频率的比例自动调整权重。
在我使用 class_weight='balanced',各班级的记录数变得相同(约88923)。