如何在python中执行1:1分层抽样?在
假设Pandas数据帧df
严重不平衡。它包含一个二进制组和多列分类子组。在
df = pd.DataFrame({'id':[1,2,3,4,5], 'group':[0,1,0,1,0], 'sub_category_1':[1,2,2,1,1], 'sub_category_2':[1,2,2,1,1], 'value':[1,2,3,1,2]})
display(df)
display(df[df.group == 1])
display(df[df.group == 0])
df.group.value_counts()
对于主group==1
的每个成员,我需要找到group==0
的单个匹配。在
scikit learn中的StratifiedShuffleSplit
将只返回随机数据部分,而不是1:1匹配。在
如果我理解正确,您可以使用np.random.permutation:
输出
^{pr2}$注意,这个解决方案假设
group 1
的每个可能的子类别组合的大小小于group 0
中相应子组的大小。更健壮的版本涉及使用np.random.choice替换:有选择的版本与有置换的版本没有相同的假设,尽管它要求每个子类别组合至少有一个元素。在
相关问题 更多 >
编程相关推荐