作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个信用卡数据集,其中 98% 的交易是非欺诈交易,2% 是欺诈交易。
我一直在尝试在训练和测试拆分之前对多数类别进行欠采样,并在测试集上获得非常好的召回率和精度。
当我仅在训练集上进行欠采样并在独立集上进行测试时,我的精度非常差,但召回率相同!
我的问题是:
我是否应该在分成训练和测试之前进行欠采样,这会扰乱数据集的分布并且不能代表现实世界吗?
还是上述逻辑只适用于过采样?
谢谢
最佳答案
如果您有机会收集更多数据,那可能是最好的解决方案。(假设您已经尝试过此步骤)
如果精度很差而召回率很好,这表明您的模型擅长将欺诈类预测为欺诈,但该模型对非欺诈类的预测很困惑,大多数时候它会将非欺诈类预测为欺诈(如果你为多数类设置0,为少数类设置1)。这意味着您必须尝试降低多数类的欠采样率。
通常欠采样/过采样只会在训练 split 时进行,这是正确的方法。然而,
在欠采样之前,请确保您的训练拆分具有与主数据集相同的类分布。 (拆分时使用分层)
如果您使用 python sklearn
库来训练您的分类器,请设置参数 class_weight='balanced'
。
例如:
from sklearn.linear_model import LogisticRegression
Lr = LogisticRegression(class_weight='balanced')
如果您在拆分之前进行欠采样,则测试拆分分布可能不会复制真实世界数据的分布。因此,人们通常会避免在 split 前进行采样。
关于machine-learning - 训练/测试拆分之前或之后的欠采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66120039/
我是一名优秀的程序员,十分优秀!