分组和拆分以避免泄漏

2024-06-16 16:26:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandasdataframe,其中数据排列如下:

        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,都是相同的图像,但有一些变化

有没有什么有效的方法来对这些文件进行分组,然后进行不导致泄漏的拆分


Tags: 文件数据方法图像名称dataframetrainingfilename
1条回答
网友
1楼 · 发布于 2024-06-16 16:26:56

您可以手动随机选择~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]

实际上我们得到了2/3-1/3的分裂,因为N很小

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

相关问题 更多 >