【发布时间】:2016-06-03 01:41:27
【问题描述】:
我正在为我的不平衡标记数据集使用 GradientBoostingClassifier。在 Sklearn 中,似乎类权重不作为该分类器的参数存在。我知道我可以在合适的时候使用 sample_weight,但是在处理 VotingClassifier 或 GridSearch 时我不能使用它。有人可以帮忙吗?
【问题讨论】:
标签: scikit-learn classification
我正在为我的不平衡标记数据集使用 GradientBoostingClassifier。在 Sklearn 中,似乎类权重不作为该分类器的参数存在。我知道我可以在合适的时候使用 sample_weight,但是在处理 VotingClassifier 或 GridSearch 时我不能使用它。有人可以帮忙吗?
【问题讨论】:
标签: scikit-learn classification
目前没有办法在 sklearn 中为 GB 使用 class_weights。
不要将其与 sample_weight 混淆
样本权重会改变损失函数和您尝试优化的分数。这通常用于抽样方法存在差距的调查数据。
类权重用于纠正类不平衡,作为过度/欠采样的代理。对于 sklearn 中的 GB,没有直接的方法可以做到这一点(你可以在随机森林中做到这一点)
【讨论】:
很晚了,但我希望它对其他成员有用。
在Zichen Wang in towardsdatascience.com的文章中,第5点Gradient Boosting被告知:
例如,梯度提升机 (GBM) 通过基于错误分类的示例构建连续的训练集来处理类别不平衡问题。它通常在不平衡数据集上优于随机森林。例如,梯度提升机 (GBM) 通过基于错误分类的示例构建连续的训练集来处理类不平衡。它通常在不平衡数据集上优于随机森林。
还有一张图表显示,grandient boosting 模型的一半的 AUROC 超过 80%。所以考虑到GB模型的性能和它们的完成方式,似乎没有必要像sklearn包中的RandomForestClassifier那样引入一种class_weight参数。
在 Andreas C. Müller 和 Sarah Guido 所著的《Pyhton 机器学习简介》一书中,2017 年版,第 89 页,第 2 章 *监督学习,决策树集成部分,小节梯度提升回归树(梯度提升机器):
他们通常对 参数设置比随机森林好,但如果参数设置正确可以提供更好的精度。
现在,如果由于目标变量中的类别比例不平衡而仍然存在评分问题,您可能应该查看是否应该拆分数据以在其上应用不同的模型,因为它们并不像看起来那样同质化是。我的意思是它可能有一个你在数据集训练中没有的变量(一个明显的隐藏变量),它对模型结果有很大影响,那么即使是更大的 GB 也很难给出正确的评分,因为它错过了你无法做到的大量信息make 有时出于多种原因出现在矩阵中进行计算。
一些更新:
我随机发现有一些库将其作为梯度提升实例对象的参数来实现。这是H2O 的情况,其中参数balance_classes 被告知:
通过过采样/欠采样平衡训练数据类计数(对于 数据不平衡)。
类型:bool(默认值:False)。
如果你想继续使用sklearn,你应该按照 HakunaMaData 所说的那样做:过采样/欠采样,因为当参数存在时,其他库最终会这样做。
【讨论】:
LGBMClassifier(is_unbalance=False)
是的,fit 方法中有sample_weight
sample_weight:类似数组,shape = [n_samples] 或 None
样本权重。如果没有,则样本的权重相同。在每个节点中搜索拆分时,会忽略将创建具有净零或负权重的子节点的拆分。在分类的情况下,如果拆分会导致任何单个类在任一子节点中具有负权重,则也会忽略拆分。
只需根据类别传递每个样本的权重
【讨论】: