Безусловно, самый простой способ сделать это - использовать scikit-learn's train_test_split
дважды:
from sklearn.model_selection import train_test_split
X_train, X2, y_train, y2 = train_test_split(X, y, test_size=0.5)
X_val, X_test, y_val, y_test = train_test_split(X2, y2, test_size=0.6)
Таким образом:
X_train
составляет 50% от ваш оригинал X
X_test
равен 0,6 * 0,5 = 0,3, т. е. 30% от вашего оригинала X
X_val
- это оставшиеся 20% X
Использование train_test_split
имеет и другие преимущества, поскольку оно автоматически перетасовывает данные для вас ( рекомендуется ), и вы даже можете указать stratify=y
для стратифицированной выборки без особых хлопот .