深度學習 | sklearn的train_test_split()各函式引數含義解釋(超級全)

Cindy's發表於2020-08-16

在機器學習中,我們通常將原始資料按照比例分割為“測試集”和“訓練集”,從 sklearn.model_selection 中呼叫train_test_split 函式

簡單用法如下:

X_train,X_test, y_train, y_test =sklearn.model_selection.train_test_split(train_data,train_target,test_size=0.4, random_state=0,stratify=y_train)

train_data:所要劃分的樣本特徵集

train_target:所要劃分的樣本結果

test_size:樣本佔比,如果是整數的話就是樣本的數量

random_state:是隨機數的種子。

  • 隨機數種子:其實就是該組隨機數的編號,在需要重複試驗的時候,保證得到一組一樣的隨機數。比如你每次都填1,其他引數一樣的情況下你得到的隨機陣列是一樣的。但填0或不填,每次都會不一樣。

stratify是為了保持split前類的分佈。比如有100個資料,80個屬於A類,20個屬於B類。如果train_test_split(... test_size=0.25, stratify = y_all), 那麼split之後資料如下:
training: 75個資料,其中60個屬於A類,15個屬於B類。
testing: 25個資料,其中20個屬於A類,5個屬於B類。

用了stratify引數,training集和testing集的類的比例是 A:B= 4:1,等同於split前的比例(80:20)。通常在這種類分佈不平衡的情況下會用到stratify。

將stratify=X就是按照X中的比例分配

將stratify=y就是按照y中的比例分配

整體總結起來各個引數的設定及其型別如下:

主要引數說明:

*arrays:可以是列表、numpy陣列、scipy稀疏矩陣或pandas的資料框

test_size:可以為浮點、整數或None,預設為None

①若為浮點時,表示測試集佔總樣本的百分比

②若為整數時,表示測試樣本樣本數

③若為None時,test size自動設定成0.25

train_size:可以為浮點、整數或None,預設為None

①若為浮點時,表示訓練集佔總樣本的百分比

②若為整數時,表示訓練樣本的樣本數

③若為None時,train_size自動被設定成0.75

random_state:可以為整數、RandomState例項或None,預設為None

①若為None時,每次生成的資料都是隨機,可能不一樣

②若為整數時,每次生成的資料都相同

stratify:可以為類似陣列或None

①若為None時,劃分出來的測試集或訓練集中,其類標籤的比例也是隨機的

②若不為None時,劃分出來的測試集或訓練集中,其類標籤的比例同輸入的陣列中類標籤的比例相同,可以用於處理不均衡的資料集

通過簡單栗子看看各個引數的作用:

舉例如下:

通過簡單例子看看各個引數的作用:

①test_size決定劃分測試、訓練集比例

②random_state不同值獲取到不同的資料集

設定random_state=0再執行一次,結果同上述相同

設定random_state=None執行兩次,發現兩次的結果不同

③設定stratify引數,可以處理資料不平衡問題

thanks

相關文章