一、背景
接上所敘,在對比訓練集、驗證集、測試集之后,實戰中需要對數據進行划分。
通常將原始數據按比例划分為:訓練集、測試集。
可以利用 sklearn.model_selection.train_test_split 方法實現。
二、介紹
使用語法為:
x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(
data,
target,
test_size=None,
train_size=None,
random_state=None,
shuffle=True,
stratify=None
)
參數解釋:
data -- 所要划分的樣本特征集
target -- 樣本結果
test_size -- 測試集樣本占比(如果是整數,就是樣本數量)
train_size -- 同上 默認 0.75
random_state -- 隨機種子(保證可復現)
shuffle -- 是否洗牌 打散數據
stratify -- 保持類分布一致
三、實操
1.舉個例子
# 生成測試數據
import numpy as np
from sklearn.model_selection import train_test_split
X, y = np.arange(10).reshape(5, 2), range(5)
y = list(y)
# 切分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
2.test_size & train_size
float or int, default=None 默認空缺,浮點數或者整型。
代表測試集的大小,如果是小數的話,處於(0, 1)之間,表示測試集所占比例。
如果是整數,表示測試集樣本個數。
如果 train_size 也為空,則默認 test_size=0.25。
import numpy as np
from sklearn.model_selection import train_test_split
x = np.random.randint(1, 100, 20).reshape((10, 2))
x_train, x_test = train_test_split(x) # 7 3
x_train, x_test = train_test_split(x, train_size=4) # 4 6
x_train, x_test = train_test_split(x, train_size=0.8) # 8 2
3.random_state
表示隨機狀態,因為每次划分都是隨機的,為保證模型可反復實驗,需要控制該參數不變。
具體不實驗了,多操作幾遍即可得知。
4.shuffle
在划分數據之前,是否重洗數據,即將數據打散重新排序。
默認重洗。
# 按原始順序抽取
x_train, x_test = train_test_split(x, train_size=0.8, shuffle=False)
5.stratify
結合結果集使用,保證分類分布一致。
假設原始結果集中有2個分類,A:B=1:2,隨機切分時,無法保證訓練集和測試集中A與B的比例,此時,通過設置 stratify=y 參數,即可控制分布一致。
注:此處的y為原始結果集。
通常在種類分布不平衡的情況下使用該參數。
將 stratify=X 就是按照X中的比例分配
將 stratify=y 就是按照y中的比例分配
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42, stratify=y)
參考鏈接:sklearn之train_test_split()函數各參數含義(非常全)
