参考、摘抄自:https://blog.csdn.net/qq_39355550/article/details/82688014
sklearn中的train_test_split()函数解析_好好学习就改名的博客-CSDN博客
train_test_split作用是交叉验证中常用的函数,功能是从样本中随机的按比例选取train data和testdata,形式为:
X_train,X_test, y_train, y_test =
cross_validation.train_test_split(train_data,train_target,test_size=0.4, random_state=0)
其中:train_data:所要划分的样本特征集
train_target:所要划分的样本结果
test_size:样本占比,如果是整数的话就是样本的数量
以上三个参数大部分人都是清楚的,问题就出现在后面:
random_state 默认值none, 随机数种子
shuffle 默认值True, 表示是否在拆分前打乱数据, 若为False则stratify必须置为none
stratify 默认值none,如果不是none,则以分层方式拆分数据,并将其用作类标签
random_state:
函数将数据集随机拆分成训练集和测试集,如果random_state不设置,则每次运行拆分时得到的训练集和测试集都与上次不相同,导致构建的模型也就不同
random_state=0时
a, b = np.arange(8).reshape(4,2), range(4)
X_train,X_test,y_train,y_test = train_test_split(a,b)
print('a:\n{}'.format(a))
print('b:\n{}'.format(b))
print('x_train:\n{}'.format(X_train))
print('x_test:\n{}'.format(X_test))
print('y_train:\n{}'.format(y_train))
print('y_test:\n{}'.format(y_test))
多次运行输出不同
第一次结果
a:
[[0 1]
[2 3]
[4 5]
[6 7]]
b:
range(0, 4)
x_train:
[[4 5]
[0 1]
[2 3]]
x_test:
[[6 7]]
y_train:
[2, 0, 1]
y_test:
[3]
第二次
a:
[[0 1]
[2 3]
[4 5]
[6 7]]
b:
range(0, 4)
x_train:
[[2 3]
[0 1]
[6 7]]
x_test:
[[4 5]]
y_train:
[1, 0, 3]
y_test:
[2]
设置了random_state=1后,每次运行结果都是一样的:
但是random_state取值大小对训练集和测试集划分的影响还是一个问题?【查找资料看到的说法是不影响,help给的应用案例取值为42】
shuffle:
在划分数据前打乱数据,当数据分布不均衡时,可能会使训练集和测试集也分布不均匀(特殊情况如某一类样本没有被选到)所以需要先对样本集进行打乱。
stratify:
能够保持划分前类的分布,比如选取的测试集和训练集1类样本百分比都为20%和总样本中的占比一致。