基于postgres中的因变量值重新采样

时间:2015-12-11 01:51:21

标签: sql postgresql

我有一个表,它有一个因变量(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

1 个答案:

答案 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;