You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言验证身高80分位与篮球关联时重复抽样准确率一致问题排查

问题原因分析

导致所有轮次准确率完全相同的原因有两点,核心是代码的测试集选取逻辑存在错误:

1. 测试集抽样逻辑bug

你通过as.numeric(rownames(train_i))获取训练集对应的原始行号,但dplyr的sample_frac函数在处理tibble类型数据时,默认不会保留原始数据集的行号,返回的训练集会被重置行号为1~2100(3000条样本的70%)。
这就意味着你每一轮迭代的sid永远是1到2100,对应的测试集test_i永远是原始数据集的第2101~3000行,训练集、分位阈值、测试集每一轮完全相同,准确率自然不会发生变化。

修复方案

替换迭代内的抽样逻辑为基础R的索引抽样即可:

train_idx <- sample(1:nrow(my_data), size = 0.7 * nrow(my_data))
train_i <- my_data[train_idx, ]
test_i <- my_data[-train_idx, ]

2. 数据集构造的特殊属性

你构造的数据集三个分组的身高完全没有重叠:

  • data3身高范围约为155~185,80%样本标签为不参与篮球运动
  • data2身高范围约为187~193,80%样本标签为参与篮球运动
  • data1身高范围约为195~225,80%样本标签为参与篮球运动
    这种完全分离的身高分布,会导致不管怎么随机抽取训练集,计算得到的80%分位阈值永远落在193~195的区间内,刚好区分data1和剩下的两组。就算你修复了抽样bug,多轮迭代的准确率波动也会非常小。

内容的提问来源于stack exchange,提问作者stats_noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:45:04