[英]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.