Weka中Percentage split与RemovePercentage拆分结果为何差异显著?
Weka两种拆分方式结果差异巨大的原因分析
核心问题出在两种拆分方式的底层逻辑完全不一样,主要有这几个关键点:
随机打乱 vs 硬切数据
Weka自带的Percentage split默认会先随机打乱整个数据集,再按比例拆分训练集和测试集。但你用RemovePercentage手动拆分时,应该是直接从原始数据的开头或结尾硬切,完全没做随机打乱。如果你的原始数据是按类别排序的(比如前半段全是类别A,后半段全是类别B),那手动拆分的测试集可能全是模型训练时没接触过的类别,准确率自然暴跌。分层抽样 vs 无差别切分
Percentage split会自动做分层抽样,尽量保持训练集和测试集的类别比例和原始数据一致。但RemovePercentage是单纯按实例数量切分,很容易导致训练集和测试集的类别分布严重失衡。比如原始数据80%是正例,Percentage split的测试集也会维持这个比例,但手动切的测试集可能只有20%正例,模型练的是正例主导的模式,去测负例多的数据集当然不准。预处理的应用时机
如果你的流程里用到了预处理过滤器(比如标准化、特征选择),两种拆分方式的处理逻辑也不同:Percentage split是先拆分数据,再只对训练集做预处理,测试集用训练集的预处理统计量(比如均值、方差)来转换;- 而你用
RemovePercentage时,大概率是先在全数据集上跑了预处理,再拆分,测试集用的是全数据集的统计量,和模型训练时的基准不一致,会直接拉低性能。
随机种子的影响
Percentage split有默认的随机种子,每次运行如果种子不同,拆分结果也会变。如果你的手动拆分刚好碰到了一个极端不利的样本分布,也会出现结果差距大的情况。
内容的提问来源于stack exchange,提问作者M. Lee
相关产品推荐
相关产品推荐

