sklearn中train_test_split函数中的random_state有什么用?

我们先生成下面的训练数据。

import numpy as np
from  sklearn.model_selection import train_test_split
#生成训练数据
x=np.linspace(1,8,8).reshape(4,2)
#生成标签
label=list([1,0,1,1])

#打印看看
print(x)
print(label)

结果如下:
原始训练数据x,原始训练数据x对应的的标签label。
在这里插入图片描述
我们开始划分训练数据,首先指定shuffle=True(这表示需要随机的意思),然后配合random_state来指定随机的状态,其规定为一个整数,比如2,我们下面以random_state=2为例。

#对半0.5划分训练数据。
trainx,testx,lable1,label2=train_test_split(x,y,test_size=0.5,shuffle=True,random_state=2)

#打印看看
print(trainx)
print(testx)

结果如下:
1.划分数据之后的trainx,testx。
在这里插入图片描述

我们再次运行上述代码,看一下打印的结果是否会发生变化。
结果如下:
2.重新运行之后的trainx,testx。
在这里插入图片描述
我们发现结果和上面是一样的,也就是说,对于同一批数据,只要random_state设置地一样,那么其结果也是一样的,即结果可以被复现。

什么是结果可以被复现?具体点。


结果可以被复现,意思是说:

A有一批数据D,他先做了一个随机划分(比如8:2的比例划分),得到了训练数据(8)和测试数据(2)。做了一个实验,结果发现准确率非常高。
B听了之后也要试试看,拿到A的原始数据D后,他也在他的电脑上按照(8:2)的比例划分了原始数据,但实验后发现准确率非常低。

怎么回事?
因为A没有把随机状态交给B,所以A和B虽然原始数据D是一样的,但是随机划分后的数据就已经不一样了。自然很有可能得到的结果千差万别。

现在B想要复现A的实验结果,有两个办法,一个就是叫A说一下他用的随机状态random_state;第二个就是让A将其随机划分之后训练数据和测试数据传给B。显然,第一种方法好。

补充

如果要纯随机怎么办,即每次运行都不一样?方法是不设置参数random_state,其相当于random_state=None(默认None)。

x1,x2,y1,y2=train_test_split(x,y,test_size=0.5,shuffle=True)
print(x1)
print(x2)

运行两次,结果如下:
第一次:
在这里插入图片描述
第二次:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43391414/article/details/112909834