如何理解 sklearn.metrics 中的sample_weight



评估模型时是否需要设置sample_weight?现在我已经训练了一个关于分类的模型,但数据集是不平衡的。当我用compute_sample_weight('平衡')设置sample_weight时,分数非常好。精度:0.88,召回:0.86 对于"1"级。但是如果我不设置sample_weight,分数会很糟糕。精度:0.85,召回率:0.21。sample_weight会破坏原始数据分发吗?

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

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

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

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

此参数会影响用于将类"

0"预测与类"1"分开所需的"最佳阈值",并且还会影响模型的性能。

我的理解是:sample_weight本身与平衡或不平衡无关,它只是反映样本数据分布的一种方式。所以基本上以下两种表达方式是等价的,表达式 1 在空间复杂度方面肯定更有效率。这个"sample_weight"与任何语言的任何其他统计包相同,与随机抽样无关

表达式 1

X = [[1,1],[2,2]]
y = [0,1]
sample_weight = [1000,2000]  # total 3000

表达式 2

X = [[1,1],[2,2],[2,2],...,[1,1],[2,2],[2,2]] # total 300 rows
y = [0,1,1,...,0,1,1]
sample_weight = [1,1,1,...,1,1,1]  # or just set as None

相关内容

  • 没有找到相关文章

最新更新