簡體   English   中英

使用sklearn創建訓練驗證拆分

[英]create training validation split using sklearn

我有一個包含X和Y的訓練集,X的形狀為(4000,32,1),Y的形狀為(4000,1)。

我想基於拆分創建一個訓練/驗證集。 這是我一直在嘗試做的

from sklearn.model_selection import StratifiedShuffleSplit
sss = StratifiedShuffleSplit(test_size=0.1, random_state=23)
for train_index, valid_index in sss.split(X, Y):
    X_train, X_valid = X[train_index], X[valid_index]
    y_train, y_valid = Y[train_index], Y[valid_index]

運行該程序會給出與上述代碼段相關的以下錯誤消息

for train_index, valid_index in sss.split(X, Y):
ValueError: The least populated class in y has only 1 member, which is too few. The minimum number of groups for any class cannot be less than 2.

我對上述錯誤消息不太清楚,為上述訓練集創建訓練/驗證拆分的正確方法是什么?

有點奇怪,因為我將您的代碼復制/粘貼到了sklearn的乳腺癌數據集中,如下所示

from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
X, Y = cancer.data, cancer.target

from sklearn.model_selection import StratifiedShuffleSplit
sss = StratifiedShuffleSplit(test_size=0.1, random_state=23)
for train_index, valid_index in sss.split(X, Y):
        X_train, X_valid = X[train_index], X[valid_index]
        y_train, y_valid = Y[train_index], Y[valid_index]

這里X.shape = (569, 30)Y.shape = (569,)並且我沒有錯誤,例如y_valid.shape = 57或569的十分之一。

我建議您將X重塑為(4000,32)(然后將Y重塑為(4000)),因為Python可能會將其視為一個大元素的列表(順便說一句,我正在使用python 2-7)。

要回答您的問題,您也可以使用train_test_split

from sklearn.model_selection import train_test_split

根據幫助

將數組或矩陣拆分為隨機訓練和測試子集快速實用程序,用於包裝輸入驗證和``next(ShuffleSplit()。split(X,y))''

基本上是您要做什么的包裝。 然后,您可以指定訓練和測試大小,random_state(如果要分層數據或對其進行混洗等)。

例如,它很容易使用:

X_train, X_valid, y_train, y_valid = train_test_split(X,Y, test_size = 0.1, random_state=0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM