我们在评估模型时需要设置样本权重吗?现在我训练了一个分类模型,但数据集是不平衡的。当我使用compute_sample_weight('balanced')设置样本权重时,得分非常好。'1'类的精度为0.88,召回率为0.86。
如果我不设置样本权重,得分会很差。精度为0.85,召回率为0.21。
样本权重会破坏原始数据分布吗?
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
样本权重参数仅在训练过程中使用。
假设您有一个数据集,其中16个点属于类别“0”,4个点属于类别“1”。
如果没有此参数,在优化过程中,它们的损失计算权重为1:它们对模型正在最小化的损失的贡献相等。这意味着80%的损失归因于类别“0”的点,20%的损失归因于类别“1”的点。
通过将其设置为“平衡”,scikit-learn将自动计算分配给类“0”和类“1”的权重,使得50%的损失来自类“0”,50%来自类“1”。
该参数影响您需要用于将类“0”预测与类“1”分开的“最佳阈值”,并且还影响您的模型性能。