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