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