1. 程式人生 > 其它 >sklearn中train_test_split函式中的random_state有什麼用?

sklearn中train_test_split函式中的random_state有什麼用?

技術標籤:機器學習機器學習python

我們先生成下面的訓練資料。

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)

執行兩次,結果如下:
第一次:
在這裡插入圖片描述
第二次:
在這裡插入圖片描述