Python机器学习——如何shuffle⼀个数据集(ndarray类型)取 shuffle 的过程其实可看做从全排列中随机选择⼀个的过程。
稍微⽐较⿇烦的是实现特征向量与类别标签的同步shuffle。
如果这⾥数据集既包含特征向量⼜包括标签值,可直接调⽤np.random.shuffle()⽅法:
>>> np.random.shuffle(training_data)
>>> X = training_data[:, :-1]
>>> y = trianing_data[:, -1]
如果已对数据集的特征向量与类别标签列进⾏分离,这⾥提供两种⽅式进⾏同步shuffle:
1. 使⽤ np.random.shuffle()
X, y 同时进⾏ shuffle
>>> training_data = np.hstack(X, y)
>>> np.random.shuffle(training_data)
>>> X = training_data[:, :-1]
>>> y = training_data[:, -1]
根据 indices 进⾏shuffle
indices = np.arange(X.shape[0])
np.random.shuffle(indices)
X = X[indices]
y = y[indices]
2. np.random.permutation() 对⾏索引进⾏⼀次全排列
>>> r = np.random.permutation(len(y))
# 随机地从全排列中选取⼀个,实现 shuffle
>>> X = X[r, :]
>>> y = [r]
3. shuffle
上⽂所述皆是对矩阵的⾏(样本矩阵的每⼀个样本)进⾏ shuffle,那么该如何 shuffle 矩阵的列呢(也即样本矩阵的每⼀个属性)。仍然存在两种⽅案,
np.random.shuffle()
因为 np.random.shuffle() 直接对原始矩阵进⾏修改(返回值为NoneType),且不接受另外的参数,我们可对原始矩阵的转置shuffle 之后,再转置
random python>>> training_data = np.hstack(X, y)
>>> training_data = training_data.T
>>> np.random.shuffle(training_data)
>>> training_data = training_data.T
>>> X = training_data[:, :-1]
>>> y = training_data[:, -1]
np.random.permutation() 对列索引进⾏⼀次全排列
# 此时 y 参与 shuffle
>>> r = np.random.permutation(X.shape[1])
>>> X[:, r]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论