ele*_*ora 17 python machine-learning scikit-learn
我有4个类的数据,我正在尝试构建一个分类器.我有一个类的〜1000个向量,另一个有~10 ^ 4,第三个为~10 ^ 5,第四个为~10 ^ 6.我希望使用交叉验证,所以我查看了scikit-learn文档.
我的第一次尝试是使用StratifiedShuffleSplit但是这给了每个类相同的百分比,使得类仍然严重失衡.
有没有办法进行交叉验证,但是在训练和测试集中平衡了类?
作为旁注,我无法弄清楚StratifiedShuffleSplit和StratifiedKFold之间的区别.描述与我非常相似.
IVl*_*lad 21
我的第一次尝试是使用StratifiedShuffleSplit但是这给了每个类相同的百分比,使得类仍然严重失衡.
我觉得你会混淆分层策略会做什么,但你需要显示你的代码和结果,以确定发生了什么(与原始集合中的百分比相同的百分比,或相同返回的火车/测试集中的百分比?第一个是它应该如何).
作为旁注,我无法弄清楚StratifiedShuffleSplit和StratifiedKFold之间的区别.描述与我非常相似.
其中一个绝对应该工作.对第一个的描述肯定有点令人困惑,但这就是他们所做的.
提供列车/测试索引以在列车测试集中分割数据.
这意味着它将您的数据拆分为火车和测试集.分层部分意味着在这种分裂中将保持百分比.因此,如果10%
您的数据属于1级并且90%
属于2级,这将确保10%
您的列车组将在1级并且90%
将在2级.对于测试集也是如此.
你的帖子听起来好像你想要50%
测试集中的每个类.这不是分层所做的,分层保持了原始的百分比.你应该维护它们,因为否则你会给自己一个关于分类器性能的不相关的想法:谁在乎它如何分类50/50
分裂,在实践中你会看到10/90
分裂?
此交叉验证对象是KFold的变体,可返回分层折叠.通过保留每个类别的样本百分比来进行折叠.
参见k-fold交叉验证.没有分层,它只是将您的数据分成k
折叠.然后,每个折叠1 <= i <= k
使用一次作为测试集,而其他折叠用于训练.结果平均到最后.它类似于运行ShuffleSplit
k
时代.
分层将确保整个数据中每个类别的百分比在每个单独的折叠中相同(或非常接近).
有很多文献涉及不平衡的阶级.一些简单易用的方法涉及使用类权重和分析ROC曲线.我建议以下资源为此起点:
归档时间: |
|
查看次数: |
19629 次 |
最近记录: |