乱序的思想
在机器学习中经常需要打乱数据的顺序。完美的乱序保证了每个实验个体有相同的概率出现在任何一个位置,这个看起来很简单,但是还是有一些问题需要思考的。
快速解决方案是循环遍历所有N个位置,每次生成范围[0,N]中的随机值,并用随机值交换当前位置。这样就可以了吗?这样可以得到 N^N 中乱序结果,但是却只有 N!种排列方式。显然如果使用这个快速解决方案总会有一些元素的乱序效果不理想。
另一种解决方法,在一个位置 i ,我们生成一个 [i,N] 的随机数 j,并将 i 和 j 的数据调换,这样的方法符合我们的想法吗?
每个数据都有1 / N 的机会在位置 0。每个数据也有(N-1)/N 的机会不在那里。以此类推可以发现每个数据在所有位置出现的概率都是 1 / N ,这个方法适用于所有的数组。
乱序的实现