TL;DR : 使用 StratifiedShuffleSplit 和 test_size=0.25
Scikit-learn 为分层拆分提供了两个模块:
-
StratifiedKFold :该模块可用作直接 k 折交叉验证运算符:因为它将设置
n_folds 训练/测试集,从而使两个类中的类均等平衡。
这里有一些代码(直接来自上面的文档)
>>> skf = cross_validation.StratifiedKFold(y, n_folds=2) #2-fold cross validation
>>> 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]
... #fit and predict with X_train/test. Use accuracy metrics to check validation performance
-
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]
>>> # fit and predict with your classifier using the above X/y train/test