我想将数据分成训练集、测试集和验证集,并且这些数据集是分层抽样的,但sklearn只提供了cross_validation.train_test_split,只能将数据分成两部分。如果我想这样做,应该怎么办?
回答:
如果你想使用分层训练/测试分割,你可以使用Sklearn中的StratifiedKFold
假设X
是你的特征,y
是你的标签,根据这里的示例:
from sklearn.model_selection import StratifiedKFoldcv_stf = StratifiedKFold(n_splits=3)for train_index, test_index in skf.split(X, y): 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]
更新:如果要将数据按3个不同的百分比进行分割,可以使用numpy.split(),示例如下:
X_train, X_test, X_validate = np.split(X, [int(.7*len(X)), int(.8*len(X))])y_train, y_test, y_validate = np.split(y, [int(.7*len(y)), int(.8*len(y))])