正确拆分数据集
Posted
技术标签:
【中文标题】正确拆分数据集【英文标题】:Correctly splitting the dataset 【发布时间】:2017-04-10 13:05:01 【问题描述】:我已经下载了一个包含 10 个类对象的数据集,用于对象检测。数据集不分为训练、验证和测试。但是,作者在论文中提到将数据集分为 20% 训练、20% 验证和 60% 测试,并且图像是随机选择的。
按照作者所说的标准,我随机选择了 20% 的图像用于训练,20% 的图像用于验证,60% 的图像用于测试。
我想知道几件事 1)我需要将困难的图像放入训练集或验证集或测试集中吗?例如,目前测试集中有 41 个困难图像,训练集中有 30 个,验证集中有 20 个。 2) 如何确保所有十个对象类均等分布?更新 3)理想情况下,平衡分割困难的图像应该平均分布?如果测试难度更大、训练难度更大或验证难度更大,对结果的影响有多大?
十类:飞机、储罐、棒球场、网球场、篮球场、田径场、桥梁、船舶、港口、车辆。
我总共有 650 张图片,其中 466 张图片正好属于一个类别,并且一张图片中有多个对象 飞机 = 88 图像,储罐 = 10 图像,棒球场 = 46 图像,网球场 = 29 图像,篮球场 =32 图像,地面跑道 = 55 图像,桥梁 58 图像,船舶 = 36 图像,港口 27 图像,以及车辆 = 85 张图片。
剩下的 184 张图片有多个类别。
总共有 757 架飞机、302 艘船、655 个储罐、390 个棒球场、524 个网球场、159 个篮球场、163 个地面跑道、224 个港口、124 座桥梁和 477 辆汽车
【问题讨论】:
【参考方案1】:最常见的技术是随机选择。例如,如果您有 1000 张图像,您可以创建一个包含每个文件名称的数组,并且您可以使用随机排列对元素进行随机化。然后你可以使用前 200 个元素进行训练,接下来的 200 个元素用于验证,其他元素用于测试(在 20%、20%、60% 的情况下)
如果有一个非常不平衡的类,你可以在每组中强制使用相同比例的类。要做到这一点,你必须逐级执行我提到的过程。
您不应该手动选择图像。如果您知道数据集中有一些困难的图像,您不能手动选择它们以将它们包含在训练、验证和测试集中。
如果您想公平比较您的算法,如果几张图像可以高度修改准确性。您可以多次重复随机拆分。在某些情况下,训练集中会有很多困难的图像,而在其他情况下,在验证或测试集中会有很多困难的图像。然后,您可以提供准确性(或您正在使用的指标)的平均值和标准差。
更新:
我明白了,在您的描述中,您的图像中有多个对象。不是吗? 例如,你能有两艘船和一座桥吗? 我曾经使用在每个图像中包含单个对象的数据集。然后为了检测图像中的多个对象,我扫描图像的不同部分以寻找单个对象。
可能您提到的论文的作者随机划分了数据集。如果您在研究论文中使用更复杂的划分,您应该提及它。
关于您的问题,即在每组中添加更多困难图像的效果如何,答案非常复杂。这取决于算法以及训练集图像与验证集和测试集图像的相似程度。
使用复杂模型(例如具有大量层和神经元的神经网络),您可以在训练集上获得所需的准确度(例如 100%)。然后,如果图像与验证集和测试集中的图像非常相似,则准确性将相似。但是,如果它们不是很相似,那么您就已经过拟合,并且验证和测试集中的准确性会变慢。为了解决这个问题,您需要一个更简单的模型(例如减少神经元数量或使用良好的正则化技术),在这种情况下,训练集的准确度会更慢,但验证集和测试集的准确度会更接近使用训练集获得的准确率。
【讨论】:
"您不应该手动选择图像。"那是什么意思?我怎么能随机选择呢? 我已编辑答案以包含更多信息 我添加了有关数据集的更多详细信息。关于你的第一个答案。我随机使用了图像,没有看到哪个难哪个容易。我选择了 80 张飞机图像,然后选择 20% 用于验证,20% 用于训练,剩下 60% 用于测试。通过这种方式,我为所有类和具有多个类的图像分离了所有类。比我检查它是否平衡(即困难和容易的图像平均分布)与否。然后我发现测试集中有 41 个困难图像,训练集中有 30 个,验证集中有 20 个。 或记住这个数字总共有 757 架飞机、302 艘船、655 个储罐、390 个棒球场、524 个网球场、159 个篮球场、163 个地面跑道、224 个港口、124 座桥梁和477 辆车我应该将 757 的 20% 用于训练,757 的 20% 用于验证,757 的 60% 用于测试?? 是的,图像中有不止一个对象,它们是单个图像中的多个类,如船舶、桥梁、港口和飞机。我必须使用区域提议提取方法来扫描图像的不同部分并寻找单个对象。我不想做任何复杂的除法以上是关于正确拆分数据集的主要内容,如果未能解决你的问题,请参考以下文章
如何按百分比将 CSV 数据集拆分为训练集和测试集,并将拆分后的数据集与 pandas 一起保存到本地文件夹中? [复制]