近来打算通过自己实现几个常见模型来复习一下之前看过的,顺便练习一下Python语法的熟练度。首先准备搭好除模型外的整个程序的其他部分,比如数据的导入、划分。
在写划分数据集部分的函数时,查了一下random模块中有sample(data, k)和shuffle(data)两个函数,分别实现从一个序列中采样k个数和将数据集内数据打乱的,其中sample函数将采样后数据作为返回值,shuffle函数直接对data操作,无返回值。在这里对两个函数的实现算法探究一下。
######shuffle
shuffle的意思是让序列乱序。在random模块的shuffle函数中,用的是经典的Fisher-Yates shuffle算法。其伪代码如下
for i = 1:N
temp = random(0, N-i)
交换 a[temp] 和 a[N-i]
end
易证,对于每个元素,其shuffle后在每个位置的概率都为 1 N \frac{1}{N}