我在MySQL中有一个数值存储为decimal(8,3)
的表。我正在提取这些值以供显示,但我需要先稍微更改值(使用data perturbation)。例如:
a: 0.123
b: 0.011
c: 0.003
会被扰乱并显示为:
a: 0.125
b: 0.010
c: 0.001
如果我第二次提交相同的报告,我可能会得到类似的结果:
a: 0.119
b: 0.005
c: 0.005
这个想法是让扰动在价值与价值之间不可预测,同时保持价值接近原价。它可能会增加.001,然后在下一个值上减少.003。
任何时候一个值都不应该变为负数或0.如果我有.001,那么它应该被随机扰动,以便之后达到.001或更高。
我目前正在使用它来扰乱大于1的值,它工作正常。当传递一个低于1的值时,我的扰动值是没有意义的。
$perturbed = $v + ( mt_rand( $v*(-1), 40) / 100 );
例如,如果$ v为.04,则$扰动可能会达到0.99,这在给定$ v的统计范围之外。
数据集相对较大,因此无论何种解决方案都需要不花费大量处理能力。