洗牌算法
目的:将排列好的数据重新以随机的方式排列
原理:从数组中随机选出一个元素,放入目标数组中后从原数组中删除这个元素。反复进行这个过程,直到原数组中所有的元素都进入了新的数组。此时目标数组中的元素为随机排列,达到了“洗牌”的效果。
使用Python描述:
1 | import random |
random.randrange(0,len(list))为从0到list长度中随机生成一个整数。
targetlist.append(list[i])为将list[i]元素放入targetlist数组中。
list.pop(i)为从list中删除这个元素。
可以通过这个算法实现对训练集与测试集的分配。例如: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23import random
def shuffle_split_data(X, y):
""" Shuffles and splits data into 70% training and 30% testing subsets,
then returns the training and testing subsets. """
# Shuffle and split the data
split_num = int(0.7 * len(X))
X_t = []
y_t = []
X = list(X)
while X:
p = random.randrange(0, len(X))
X_t.append(X[p])
y_t.append(y[p])
X.pop(p)
X_train = X_t[:split_num]
y_train = y_t[:split_num]
X_test = X_t[split_num:]
y_test = y_t[split_num:]
# Return the training and testing data subsets
return X_train, y_train, X_test, y_test
X为输入值,y为输出值,将70%的数据放入训练集,将30%的数据放入测试集