TL; DR: Use StratifiedShuffleSplit comtest_size=0.25
O Scikit-learn oferece dois módulos para divisão estratificada:
- StratifiedKFold : Este módulo é útil como um operador de validação cruzada k-fold direto: conforme nele, irá configurar conjuntos de
n_folds
treinamento / teste de forma que as classes sejam igualmente balanceadas em ambos.
Aqui está algum código (diretamente da documentação acima)
>>> 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 : Este módulo cria um único conjunto de treinamento / teste com classes igualmente balanceadas (estratificadas). Essencialmente, é isso que você deseja com o
n_iter=1
. Você pode mencionar o tamanho do teste aqui mesmo que emtrain_test_split
Código:
>>> 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]
>>>