TL; DR: Використовуйте StratifiedShuffleSplit зtest_size=0.25
Scikit-learn пропонує два модулі для розшарованого розщеплення:
- StratifiedKFold : Цей модуль корисний як оператор прямої перехресної перевірки в k-кратному форматі: оскільки в ньому буде встановлено набори
n_folds
навчання / тестування, щоб класи були однаково збалансовані в обох.
Ось якийсь код (безпосередньо з наведеної вище документації)
>>> skf = cross_validation.StratifiedKFold(y, n_folds=2)
>>> len(skf)
2
>>> for train_index, test_index in skf:
... print("TRAIN:", train_index, "TEST:", test_index)
... X_train, X_test = X[train_index], X[test_index]
... y_train, y_test = y[train_index], y[test_index]
...
- StratifiedShuffleSplit : Цей модуль створює єдиний навчально-тестувальний набір, що має однаково збалансовані (стратифіковані) класи. По суті, це те, що ви хочете від
n_iter=1
. Ви можете вказати розмір тесту тут, як і вtrain_test_split
Код:
>>> sss = StratifiedShuffleSplit(y, n_iter=1, test_size=0.5, random_state=0)
>>> len(sss)
1
>>> for train_index, test_index in sss:
... print("TRAIN:", train_index, "TEST:", test_index)
... X_train, X_test = X[train_index], X[test_index]
... y_train, y_test = y[train_index], y[test_index]
>>>