我有一个表,它有一个因变量(1或0)和大约650个特征。因变量值(1和0)的分布是1:8,有利于0.因此,当运行分类算法时,我需要进行类加权或从较不可用的类中重新采样以考虑类权重事项。我知道重新采样也会引入偏差,因为您正在复制数据中的某些记录,但这就是我目前所知的机器学习中的类不平衡问题的两种方法。
model_data1.readmission.value_counts()
Out[23]:
0 81718
1 11275
dtype: int64
所以我需要的是90K奇怪的观察结果,我希望至少有70-80K的观测结果,几乎相等的0和1的分布,不像我现在所示的那样。因此,基本上需要从11K奇数1次观测中重新采样,以增加数据中1次观测的大小。
如何做到这一点是postgres sql
答案 0 :(得分:0)
如果只取全部0然后复制1,直到数字相等?
with counts as (
select sum(case when dep = 0 then 1.0 else 0 end) as dep0,
sum(case when dep = 1 then 1.0 else 0 end) as dep1
from t
)
select t.*
from (select t.*, row_number() over (partition by dep order by random()) as seqnum, dep0
from t cross join
(select generate_series(1, ceiling(dep1 / dep0)
from counts
) c
) t
where seqnum <= dep0;