在機器學習中,我們通常將原始數據按照比例分割爲“測試集”和“訓練集”,從 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參數,可以處理數據不平衡問題