已经有如何在scikit中通过train_test_split实现分层训练/测试拆分的描述(Scikit-Learn中的分层训练/测试拆分),以及如何使用np.split随机进行训练/验证/测试拆分的描述(如何将数据分成三个集合(训练、验证和测试)?)。 但是,如何进行分层的训练/验证/测试拆分呢。
我能想到的最接近进行分层(按类别标签)的训练/验证/测试拆分的方法是如下所示,但我怀疑是否有更好的方法可以在一个函数调用中或以更准确的方式实现:
假设我们想要进行60/20/20的训练/验证/测试拆分,那么我的当前方法是首先进行60/40的分层拆分,然后对这第一个40进行50/50的分层拆分,以最终获得60/20/20的分层拆分。
from sklearn.cross_validation import train_test_split
SEED = 2000
x_train, x_validation_and_test, y_train, y_validation_and_test = train_test_split(x, y, test_size=.4, random_state=SEED)
x_validation, x_test, y_validation, y_test = train_test_split(x_validation_and_test, y_validation_and_test, test_size=.5, random_state=SEED)
如果我的方法正确,或者你有更好的方法,请回复我。
谢谢