機器學習筆記:sklearn.model_selection.train_test_split切分訓練、測試集


一、背景

接上所敘,在對比訓練集、驗證集、測試集之后,實戰中需要對數據進行划分。

通常將原始數據按比例划分為:訓練集、測試集。

可以利用 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()函數各參數含義(非常全)

參考鏈接:sklearn.model_selection.train_test_split

參考鏈接:sklearn函數:train_test_split(分割訓練集和測試集)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM