问题描述
之前因为测试跌倒,需要数据训练,但是采集到的数据比例相差极大,非摔倒的容易采集,但是摔倒的数据比较麻烦。还要采集很多假摔的数据,这样导致最后摔倒,非摔倒,假摔的比例严重出现问题,最终影响训练效果。所以我需要将数据按照比例,从原始数据中提取数据来训练。并且我还得保证能够训练的数据量最大。尽量少删除数据。
解决方法
我想到的方法就是从利用n选m 的随机数的方式。时间是O(n)。但是有个前提条件是知道数据集的大小,每个类别的数量大小。另外首先利用比例计算出每个类别最后的数量。
先说一下计算移除数据的方式。
s1. 利用选择标志的方式,选出按照比例最小的类别,用smallest_index记录。初始化smallest_index=0.percent 表示最后的比例。from[] 表示原始的数据中每个类别的数据量
s2. 遍历i =[0 , size) size 表示总共的类别数 ,如果 i 的数据量 / smallest_index 的数据量 < percent[i] /percent[smallest_index] 说明i 是比smallest_index 比例更小的类别。用smallest_index = i ;
s3. 利用smallest_index 遍历 i = [0,size). 计算remove[] 的数量:
remove[i] = from[i] - (from[smallest_index] * percent[i