我有一个不平衡的数据集,其中200000个描述是0类,大约10000个是1类。然而,在我的训练数据集中,我有相等数量的“正”和“负”样本,每个样本大约8,000个。因此,现在我对如何正确使用分类器的"class_weight“选项感到困惑。似乎只有当训练数据中的“正”和“负”样本的数量与整个数据集中的数量相同时,它才有效。在这种情况下,它将是8,000个“正”和160000个“负”,这是不现实的。减少“阳性”样本的数量似乎也不是一个好主意。还是我错了?
发布于 2017-12-06 23:29:55
class_weight选项的作用无非是增加表示不足的类出错的权重。换句话说,错误地对稀有类进行分类会受到更严厉的惩罚。
分类器很可能在您的测试集上执行得更好(其中两个类表示相同,因此两者同样重要),但这是您可以很容易地自己验证的。
一个副作用是predict_proba返回的概率与实际概率相差甚远。(如果你想知道为什么,可以画出简单的平均概率和预测得分的分布,没有和有不同的class_weight=。预测的分数如何变化?)。根据您的最终用例(分类、排名、概率估计),您应该考虑模型中的选择。
发布于 2017-12-07 23:10:06
严格地说,从您的训练集的角度来看,您不会面临班级不平衡的问题,因此您完全可以将class_weight保留为其默认的None值。
这里和一般的不平衡数据集(您没有提供任何信息)的真正问题是,这两个类的错误分类成本是否相同。这是一个“商业”决策(即不是统计/算法决策)。
通常,不平衡的数据集伴随着不同错误分类成本的问题;医疗诊断在这里是一个教科书示例,因为:
因此,这是您应该考虑的实际问题(即,甚至在构建训练集之前)。
如果,对于您正在尝试解决的业务问题,将"0“错误分类为"1”和将"1“错误分类为"0”之间没有任何区别,并且假设您的训练集是平衡的,那么您可以继续进行,而不必担心分配不同的类权重……
https://stackoverflow.com/questions/47677754
复制相似问题