mousecpn/MachineLearning_HW

老师,请问对分类问题划分训练、验证集时进行分层抽样是否有必要呢?

Opened this issue · 2 comments

train_test_split()中提供了stratify参数可以根据标签列进行分层采样,使各类样本占比保持一致,比如
image
image

以前看到过有说分层抽样会对分类的准确性造成较大的影响,但是自己又用别的二分类数据集验证了一下,好像对准确率召回率没什么大的影响。。

train_test_split()中提供了stratify参数可以根据标签列进行分层采样,使各类样本占比保持一致,比如 image image

以前看到过有说分层抽样会对分类的准确性造成较大的影响,但是自己又用别的二分类数据集验证了一下,好像对准确率召回率没什么大的影响。。

是有影响的,尤其是在大数据集下,影响会更明显。一般采用分层采样是一个比较合适的选择。
如果训练集的样本分布和验证集的样本分布不相同,就会让模型产生不合理的bias,这就是域迁移问题(Domain Gap)。
其实也有类似研究,就是当标签分布不平衡时的训练方法,课上也会提到当标签不平衡的时候应该怎么处理,也可以看看Focal loss这篇文章,这种思路现在比较主流。
既然你问到这个问题了,我就细讲一点吧。我们训练了一个模型划出了一个验证集,实际上是希望说验证集和真实分布更接近,因为真实分布的性能才是我们想要的结果。但是我们往往是没办法知道真实分布的标签类别的。
假设我们做一个图片的男女分类,可能真实分布下男女比例是3.12:1,但是我们收集到的数据里是1:1,事实上如果按照分层采样,验证集上的男女比例也是1:1,而这种情况下训练之后验证得到的结果也不是反映了真实分布的性能。
所以我们在使用分层采样的时候已经做了一个隐含假设,所收集的数据集男女比例(可知)=真实分布的男女比例(不可知)。

train_test_split()中提供了stratify参数可以根据标签列进行分层采样,使各类样本占比保持一致,比如 image image
以前看到过有说分层抽样会对分类的准确性造成较大的影响,但是自己又用别的二分类数据集验证了一下,好像对准确率召回率没什么大的影响。。

是有影响的,尤其是在大数据集下,影响会更明显。一般采用分层采样是一个比较合适的选择。 如果训练集的样本分布和验证集的样本分布不相同,就会让模型产生不合理的bias,这就是域迁移问题(Domain Gap)。 其实也有类似研究,就是当标签分布不平衡时的训练方法,课上也会提到当标签不平衡的时候应该怎么处理,也可以看看Focal loss这篇文章,这种思路现在比较主流。 既然你问到这个问题了,我就细讲一点吧。我们训练了一个模型划出了一个验证集,实际上是希望说验证集和真实分布更接近,因为真实分布的性能才是我们想要的结果。但是我们往往是没办法知道真实分布的标签类别的。 假设我们做一个图片的男女分类,可能真实分布下男女比例是3.12:1,但是我们收集到的数据里是1:1,事实上如果按照分层采样,验证集上的男女比例也是1:1,而这种情况下训练之后验证得到的结果也不是反映了真实分布的性能。 所以我们在使用分层采样的时候已经做了一个隐含假设,所收集的数据集男女比例(可知)=真实分布的男女比例(不可知)。

明白了!谢谢老师的解答!!