Weka中Stratified Sampling拆分数据集问题及参数设置咨询
参数设置逻辑
你提到的5%子样本设20折的逻辑是对的:StratifiedRemoveFold的numberOfFolds参数N代表将数据集切分为N份等大的分层子集,单次操作移除1份的话,剩下的样本占比为(N-1)/N,被移除的样本占比为1/N。
7:3拆分的参数设置方案
你不需要将numberOfFolds设为120,按以下规则设置即可:
- 要获取30%的测试集:将
numberOfFolds设为10,依次执行3次StratifiedRemoveFold操作,每次分别设置foldNumber为1、2、3,将3次移除的子集合并,就是符合分层要求的30%测试集 - 要获取70%的训练集:将
numberOfFolds设为10,依次执行7次StratifiedRemoveFold操作,每次分别设置foldNumber为4、5、6、7、8、9、10,将7次移除的子集合并,就是符合分层要求的70%训练集
如果希望进一步降低稀有取值被集中分到同一子集的概率,可以将numberOfFolds设为100,30%测试集合并前30份、70%训练集合并后70份即可,切分粒度越细,两个子集的属性分布一致性越高。
兼容性报错修复
你遇到的Training set and Test set are incompatible错误,是因为默认分层抽样仅保证类别标签的分布与全集一致,不会强制其他标称属性的所有取值都覆盖到两个子集,当某个属性的某个取值样本量极小时,就会出现所有该取值样本都被分到训练集的情况。有两种常用修复方案:
- 拆分前预处理:统计所有标称属性的各取值样本量,将样本量小于5的稀有取值合并为同一其他类,避免出现取值样本量过少的情况
- 拆分后补全:拆分完成后,对测试集使用
AddValues过滤器,导入训练集的属性取值列表,将训练集存在但测试集缺失的取值补到测试集的属性取值定义中,不需要修改实际样本即可解决兼容性错误。
内容的提问来源于stack exchange,提问作者Encipher
相关产品推荐
相关产品推荐

