#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)
随機數種子控制每次劃分訓練集和測試集的模式,其取值不變時劃分得到的結果一模一樣,其值改變時,劃分得到的結果不同。若不設定此參數,則函數會自動選擇一種随機模式,得到的訓練結果可能也就不同。
2.2 建構決策樹的函數
clf = tree.DecisionTreeClassifier(criterion="entropy",random_state=42,splitter="random")
其取值不變時,用相同的訓練集建樹得到的結果一模一樣,對測試集的預測結果也是一樣的;
其值改變時,得到的結果不同;
若不設定此參數,則函數會自動選擇一種随機模式,每次得到的結果也就不同。
2.3 建構随機森林
clf = RandomForestClassifier(random_state=0)
其取值不變時,用相同的訓練集建森林得到的結果一模一樣,對測試集的預測結果也是一樣的;
其值改變時,建森林得到的結果不同;
若不設定此參數,則函數會自動選擇一種随機模式,每次得到的結果也就不同。
2.4 小結
如果你希望結果可以重制,固定random_state是非常重要的。
對于随機森林這個模型,它本質上是随機的,設定不同的随機狀态(或者不設定random_state參數)可以徹底改變建構的模型。
對于資料集的生成,它本質上也是随機的,設定不同的随機狀态(或者不設定random_state參數)可以徹底改變生成的資料集。
對于資料集的拆分,它本質上也是随機的,設定不同的随機狀态(或者不設定random_state參數)可以徹底改變拆分的結果。
固定random_state後,每次建構的模型是相同的、生成的資料集是相同的、每次的拆分結果也是相同的。
三、總結
對于那些本質上是随機的過程,我們有必要控制随機的狀态,這樣才能重複的展現相同的結果。如果,對随機狀态不加控制,那麼實驗的結果就無法固定,而是随機的顯現。
因為同一算法模型在不同的訓練集和測試集的會得到不同的準确率,無法調參。是以在sklearn 中可以通過添加random_state,通過固定random_state的值,每次可以分割得到同樣訓練集和測試集。是以random_state參數主要是為了保證每次都分割一樣的訓練集和測試集,大小可以是任意一個整數,在調參環節,隻要保證其值一緻即可。
是以,至于random_state=?随你喽