如何理解sklearn.metrics中的sample_weight?

cao*_*gyu 6 machine-learning scikit-learn

当我们评估模型时,我们需要设置sample_weight吗?现在我已经训练了一个关于分类的模型,但是数据集不平衡。当我使用compute_sample_weight('balanced')设置sample_weight时,分数非常好。“1”级精度:0.88,召回率:0.86。但是如果我不设置sample_weight,分数就会很差。精度:0.85,召回率:0.21。样本权重会破坏原始数据分布吗?

Flo*_*tel 0

样本权重参数仅在训练期间使用。

假设您有一个数据集,其中 16 个点属于“0”类,4 个点属于“1”类。

如果没有此参数,在优化过程中,它们的损失计算权重为 1:它们对模型最小化损失的贡献相同。这意味着 80% 的损失是由于“0”类点造成的,20% 是由于“1”类点造成的。

通过将其设置为“平衡”,scikit-learn 将自动计算分配给“0”类和“1”类的权重,使得 50% 的损失来自“0”类,50% 来自“1”类。

此参数会影响您需要用来将“0”类预测与“1”类预测分开的“最佳阈值”,并且还会影响模型的性能。

  • 采样权重不仅用于训练期间,还用于验证/测试。特别是当我们将不同测试集上的多个模型与 pr AUC 等指标进行比较时,通常需要平衡测试集。 (6认同)