我想为训练制作一个更平衡的多类熊猫数据框架。我的训练集的简化版本如下所示:
不平衡数据帧:类0、1和2的计数分别为7、3和1
animal class
0 dog1 0
1 dog2 0
2 dog3 0
3 dog4 0
4 dog5 0
5 dog6 0
6 dog7 0
7 cat1 1
8 cat2 1
9 cat3 1
10 fish1 2
我用代码做了这个:
import pandas as pd
data = {'animal': ['dog1', 'dog2', 'dog3', 'dog4','dog5', 'dog6', 'dog7', 'cat1','cat2', 'cat3', 'fish1'], 'class': [0,0,0,0,0,0,0,1,1,1,2]}
df = pd.DataFrame(data)
现在,我想对大多数类进行随机下采样,并对少数类进行随机上采样,使其达到每个类指定的值,以获得更平衡的数据帧
问题是,我可以在网上找到的所有pandas教程或其他有关stackoverflow的问题都涉及到将少数类随机过度采样到多数类的级别(例如:Duplicating training examples to handle class imbalance in a pandas data frame)或将多数类随机欠采样到少数类的级别
由于我面临着极端的不平衡,我无法使多数阶级的规模与少数阶级的规模相等。因此,我能找到的这些代码片段通常不适合我。理想情况下,我可以指定每个类通过过度采样或欠采样生成的样本的确切数量(取决于我为该类指定的数量以及该类包含的样本数量)
比如说,
如果我指明:
我想成为这样的人:
更平衡的数据帧:类0、1和2的计数分别为5、4和3
animal class
0 dog2 0
1 dog3 0
2 dog5 0
3 dog6 0
4 dog7 0
5 cat1 1
6 cat2 1
7 cat3 1
8 cat2 1
9 fish1 2
10 fish1 2
11 fish1 2
解决这一问题的最佳方法是什么
由于^{} 不允许
n
大于组大小,如果replace
不是True
,但具有replace beTrue
,则意味着即使在本可以进行下采样的组中也会发生替换相反,让我们尝试使用^{} +^{} ,并有条件地为每个组启用
replace
。 创建一个字典,将每个类映射到样本数,并使用条件逻辑确定是否替换:s
:^{} 可用于保留初始索引(如果重要):
s
:如果索引不重要,可以使用^a5}:
s
:相关问题 更多 >
编程相关推荐