Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
NOTGOOOOD opened this issue Oct 17, 2021 · 2 comments

Comments

@NOTGOOOOD
Copy link

NOTGOOOOD commented Oct 17, 2021

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

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

@NOTGOOOOD NOTGOOOOD changed the title 老师,请问对分类问题构造训练、验证集时进行分类采样是否有必要呢? 老师,请问对分类问题划分训练、验证集时进行分层抽样是否有必要呢? Oct 18, 2021
@mousecpn
Copy link
Owner

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

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

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

@NOTGOOOOD
Copy link
Author

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

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants