机器学习—数据预处理—洗牌、切分

洗牌目的

在逻辑回归算法数据预处理的过程中,有时会遇到标签值分布不均衡的情况,我们在做切分数据集操作时,则需要打乱样本顺序,也叫洗牌。再用洗完牌的数据切分训练集、测试集。

随机种子

在numpy库中,我们可以np.random.seed()函数设定随机种子,来生成特定顺序的序列 ,而在seed()函数中传入的参数(整数),帮助我们设定生成随机数的规则,如下:

for i in range(3):
	np.random.seed(3)    # 设定随机种子  所传参数必须为整数
	print(np.random.rand(3,2))  #随机生成3行2列的矩阵
----
[[0.5507979  0.70814782]
 [0.29090474 0.51082761]
 [0.89294695 0.89629309]]
[[0.5507979  0.70814782]
 [0.29090474 0.51082761]
 [0.89294695 0.89629309]]
[[0.5507979  0.70814782]
 [0.29090474 0.51082761]
 [0.89294695 0.89629309]]

但所设‘规则’只能适用一次,第二次进行随机操作,随机数发生改变。

np.random.seed(3)  # 随机种子
print(np.random.rand(3,2))  #随机生成3行2列的矩阵
print(np.random.rand(3,2))
----
[[0.5507979  0.70814782]
 [0.29090474 0.51082761]
 [0.89294695 0.89629309]]
[[0.12558531 0.20724288]
 [0.0514672  0.44080984]
 [0.02987621 0.45683322]]

洗牌实现

在numpy库中我们引用np.random.permutation(),方法返回的是所定‘规则’下的特定序列,用该序列来完成对X,y值的打乱操作。

import numpy as np
X =[[0,0],
    [0,1],
    [1,0],
    [1,1]]
y = [[1],
     [1],
     [0],
     [0]]
#数据转化为矩阵
X = np.c_[np.ones(len(X)),X]
y = np.c_[y]

#洗牌
m = len(X)
np.random.seed(3)   	#随机种子
order = np.random.permutation(m)   #返回打乱的序列
X = X[order]    #运用打乱的序列对数据进行打乱操作
y = y[order]

print(X)
print(y)
----
[[1. 1. 1.]
 [1. 0. 1.]
 [1. 0. 0.]
 [1. 1. 0.]]
[[0]
 [1]
 [1]
 [0]]

数据切分

数据打乱后,np.split()对数据进行切分操作,把数据集的前70%当作训练集,后30%当作测试集,由于练习数据量较小,输出结果不重要,重在理解思路。

#  a为分界点,避免小数,使用int对数据类型进行强转
a = int(0.7*m)
train_X,test_X = np.split(X,[a])
train_y,test_y = np.split(y,[a])

print('训练集特征\n',train_X)
print('训练集标签\n',train_y)
print('测试集特征\n',test_X)
print('测试集标签\n',test_y)
---
训练集特征
 [[1. 1. 1.]
 [1. 0. 1.]]
训练集标签
 [[0]
 [1]]
测试集特征
 [[1. 0. 0.]
 [1. 1. 0.]]
测试集标签
 [[1]
 [0]]

你可能感兴趣的:(机器学习,数据预处理,洗牌,切分数据集)