Understanding Clouds from Satellite Images语义分割比赛中train_test_split与stratify配合使用

本文探讨了在Kaggle竞赛中,如何使用stratified split方法进行数据集分割,确保训练和验证集中的云类型分布一致。通过对原始数据集的分析和分割后的对比,展示了该方法能有效保持类别间的平衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用法来自:
https://www.kaggle.com/mobassir/keras-efficientnetb2-for-classifying-cloud

 

数据集中每张图片可能包含1种云朵到4种云朵不等。

比赛要求返回rle格式的submission.csv

 

 

其中数据集分割代码如下:

train_imgs, val_imgs = train_test_split(train_df['Image'].values, 
                                        test_size=0.2, 
                                        stratify=train_df['Class'].map(lambda x: str(sorted(list(x)))), # sorting present classes in lexicographical order, just to be sure
                                        random_state=2019)

所以这个加入stratify的train_test_split到底啥效果呢?

我们来探索下:

train_now = pd.DataFrame({'Image': train_imgs})#ndarray转化为DataFrame
result=pd.merge(left=train_df, right=train_now, how='inner', left_on='Image', right_on='Image')#train_df与train_now做交集运算


result["analysis"]=result["Fish"].apply(str)+result["Flower"].apply(str)+result["Sugar"].apply(str)+result["Gravel"].apply(str)#拼接dataframe中的后四列

print(result['analysis'].value_counts(normalize = False, dropna = False))#统计各个集合的数量

这里"集合"的意思是,每张卫星图片包含的云朵,例如[1,0,1,0]

表示包含了两种云朵。

 

最有一句result输出结果是:

1011    581
0011    581
0110    369
1010    369
0010    346
0100    284
0111    279
1110    262
1100    235
0001    230
1001    219
1000    219
1111    213
1101    126
0101    123

比较原来的train_df的集合数据:

1011    726
0011    726
1010    462
0110    462
0010    432
0100    355
0111    349
1110    328
1100    294
0001    287
1001    274
1000    274
1111    266
1101    157
0101    154

可知,split_train_test配合stratify的作用是:

每张图片中包含1~4种云朵,在分割的时候,根据每张图片所属云朵集合的不同,把图片分为15类,每一类图片中抽取80%作为train,其余作为validation

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值