赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:以下是本篇文章正文内容,下面案例可供参考
StratifiedKFold在我的理解就是我们在做K折交叉验证的时候,往往因为训练集数据分布不平衡,导致训练集的划分之后,照顾不到有的类别样本数目比较少,划分的时候不在训练集中,模型训练的时候,没看到过它,得到的模型训练的不那么好,因此要采用层次分折划分数据。其实很好理解,就是划分数据集的时候,按照类别的数目来,比如,一个类别个数为100个,那么,我就分90个给训练集,给10个给验证集,另外一个类别为1000个,就分为900:100的样子。
代码如下(示例):
sklearn中有这个包,自己调用就好。
from sklearn.model_selection import StratifiedKFold
with open(‘训练集的json文件路径’, 'r', encoding='utf8') as f:
json_anns = json.load(f)
anns = pd.DataFrame(json_anns)
# 划分10折,意味着9份给训练集,1份给验证集。
kf = StratifiedKFold(n_splits=10, random_state=2022, shuffle=True)
# 这是我的数据集中,类别ID,anns.category_id,就是根据这个值来划分
split_index = next(kf.split(anns, anns.category_id))
# 分别赋值,然后记得要reset_index表示新的dataframe的索引又是从0开始了。
train_index, vali_index = split_index[0], split_index[1]
train_data = anns.iloc[train_index, :].reset_index(drop=True)
val_data = anns.iloc[vali_index, :].reset_index(drop=True)
# 得到两个表格,分别为训练集和验证集的,那么,可以自定义pytorch数据集加载类,进行加载数据了
需要好好清修和仔细沉淀一下,把之前做过的事情系统总结一下!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。