我正在寻找一种以特定方式对数据集进行采样的优雅方法。我找到了一些解决方案,但我想知道你们中是否有人知道更好的方法。
以下是我正在查看的任务:
我想平衡我的数据集,因此我对类0的实例数量与类1相同,因此在下面的示例中,我们有5个类1实例和11个0类实例:
id | class ------ | ------ 1 | 1 1 | 0 1 | 0 1 | 0 1 | 0 2 | 1 2 | 1 2 | 0 2 | 0 2 | 0 3 | 1 3 | 1 3 | 0 3 | 0 3 | 0 3 | 0
Sofar我刚刚删除了6个0级实例,但我想防止一个id的所有实例都被删除。我尝试使用sklearn进行分层“分裂”,但它不起作用,因为并非每个id都包含多个项目。所需的输出应该类似于:
id | class ------ | ------ 1 | 1 1 | 0 2 | 1 2 | 1 2 | 0 2 | 0 3 | 1 3 | 1 3 | 0 3 | 0
有什么好主意吗?
答案 0 :(得分:0)
我最好的猜测:'保护'每个id中的一个随机行(用这些行创建单独的数据帧),然后从原始数据帧中删除直到满意为止(包括“受保护”数据帧中的类将与之齐起的事实还剩下什么)并连接两个数据帧?
答案 1 :(得分:0)
我想到了这一点:
级联
df0 = df [df ['class'] == 0]
df1 = df [df ['class'] == 1]
df_strat = pd.concat([df0.sample(df1.shape [0]),df1])