按照比例将大数据按照类型比例,随机提取测试数据

为了解决训练数据比例不均衡的问题,博主提出了一种按照比例从原始数据中抽取测试数据的方法。通过预计算每个类别应保留的数量,使用n选m的随机策略在O(n)的时间复杂度内完成。在读取每条记录时,根据记录类型判断是否保留,以保持所需比例。同时提出了两个疑问:是否存在更优解决方案,以及在未知类别数量情况下最佳算法的时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

之前因为测试跌倒,需要数据训练,但是采集到的数据比例相差极大,非摔倒的容易采集,但是摔倒的数据比较麻烦。还要采集很多假摔的数据,这样导致最后摔倒,非摔倒,假摔的比例严重出现问题,最终影响训练效果。所以我需要将数据按照比例,从原始数据中提取数据来训练。并且我还得保证能够训练的数据量最大。尽量少删除数据。

解决方法

我想到的方法就是从利用n选m 的随机数的方式。时间是O(n)。但是有个前提条件是知道数据集的大小,每个类别的数量大小。另外首先利用比例计算出每个类别最后的数量。

先说一下计算移除数据的方式。

 
 
 
  1. s1. 利用选择标志的方式,选出按照比例最小的类别,用smallest_index记录。初始化smallest_index=0.percent 表示最后的比例。from[] 表示原始的数据中每个类别的数据量
  2. s2. 遍历i =[0 , size) size 表示总共的类别数 ,如果 i 的数据量 / smallest_index 的数据量 < percent[i] /percent[smallest_index] 说明i 是比smallest_index 比例更小的类别。用smallest_index = i ;
  3. s3. 利用smallest_index 遍历 i = [0,size). 计算remove[] 的数量:
  4. remove[i] = from[i] - (from[smallest_index] * percent[i
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值