天天看點

python sklearn模型中random_state參數的意義

作者:真格量化

#5月财經新勢力#

一、前言

在學習機器學習的過程中,常常遇到random_state這個參數,并且好多時候都是 random_state=42,感覺挺有意思的,這裡做一個總結。

作用:控制随機狀态。

問題:為什麼需要用到這樣一個參數random_state(随機狀态)?看完文章你就會知道了。

一句話概括:random_state是一個随機種子,是在任意帶有随機性的類或函數裡作為參數來控制随機模式。當random_state取某一個值時,也就确定了一種規則。

random_state可以用于很多函數,它可以用于以下三個地方:

1、訓練集測試集的劃分

2、建構決策樹

3、建構随機森林

二:random_state的三種應用場所

2.1 劃分訓練集和測試集的類train_test_split

xtrain,xtest,ytrain,ytest = train_test_split(X,y,test_size=0.2,random_state=42)

随機數種子控制每次劃分訓練集和測試集的模式,其取值不變時劃分得到的結果一模一樣,其值改變時,劃分得到的結果不同。若不設定此參數,則函數會自動選擇一種随機模式,得到的訓練結果可能也就不同。

python sklearn模型中random_state參數的意義
python sklearn模型中random_state參數的意義

2.2 建構決策樹的函數

clf = tree.DecisionTreeClassifier(criterion="entropy",random_state=42,splitter="random")

其取值不變時,用相同的訓練集建樹得到的結果一模一樣,對測試集的預測結果也是一樣的;

其值改變時,得到的結果不同;

python sklearn模型中random_state參數的意義

若不設定此參數,則函數會自動選擇一種随機模式,每次得到的結果也就不同。

2.3 建構随機森林

clf = RandomForestClassifier(random_state=0)

其取值不變時,用相同的訓練集建森林得到的結果一模一樣,對測試集的預測結果也是一樣的;

python sklearn模型中random_state參數的意義

其值改變時,建森林得到的結果不同;

若不設定此參數,則函數會自動選擇一種随機模式,每次得到的結果也就不同。

2.4 小結

如果你希望結果可以重制,固定random_state是非常重要的。

對于随機森林這個模型,它本質上是随機的,設定不同的随機狀态(或者不設定random_state參數)可以徹底改變建構的模型。

對于資料集的生成,它本質上也是随機的,設定不同的随機狀态(或者不設定random_state參數)可以徹底改變生成的資料集。

對于資料集的拆分,它本質上也是随機的,設定不同的随機狀态(或者不設定random_state參數)可以徹底改變拆分的結果。

固定random_state後,每次建構的模型是相同的、生成的資料集是相同的、每次的拆分結果也是相同的。

三、總結

對于那些本質上是随機的過程,我們有必要控制随機的狀态,這樣才能重複的展現相同的結果。如果,對随機狀态不加控制,那麼實驗的結果就無法固定,而是随機的顯現。

因為同一算法模型在不同的訓練集和測試集的會得到不同的準确率,無法調參。是以在sklearn 中可以通過添加random_state,通過固定random_state的值,每次可以分割得到同樣訓練集和測試集。是以random_state參數主要是為了保證每次都分割一樣的訓練集和測試集,大小可以是任意一個整數,在調參環節,隻要保證其值一緻即可。

是以,至于random_state=?随你喽