分组和拆分以避免泄漏

时间:2019-08-13 17:49:07

标签: python python-3.x pandas

我有一只熊猫dataframe,其中数据的排列方式如下:

        filename     label
0       4456723      0  
1       4456723_01   0
2       4456723_02   0
3       ab43912      1
4       ab43912_01   1 
5       ab43912_03   1 
...     ...          ... 

我想将此dataframe随机分成trainingvalidation组。虽然这样做会引起泄漏,因为这些文件是略有变化的图像,但以不同的名称表示,例如ab43912, ab43912_01, ab43912_03,都是相同的图像,但都有一些变化。

有没有一种有效的方法可以将这些文件分组,然后进行不引起泄漏的分割?

1 个答案:

答案 0 :(得分:2)

您可以手动手动选择约80%的唯一文件句柄。

df = pd.DataFrame({'filename': list('aaabbbcccdddeeefff')})
df['filename'] = df['filename'] + ['', '_01', '_02']*6

# Get the unique handles
files = df.filename.str.split('_').str[0]

# Randomly select ~80%.
m = files.isin(np.random.choice(files.unique(), int(files.nunique()*0.8), replace=False))

# Split
train, test = df.loc[m], df.loc[~m]

实际上,由于N较小,我们进行了2 / 3-1 / 3的分配

train

   filename
0         a
1      a_01
2      a_02
6         c
7      c_01
8      c_02
12        e
13     e_01
14     e_02
15        f
16     f_01
17     f_02

test

   filename
3         b
4      b_01
5      b_02
9         d
10     d_01
11     d_02