def __init__(self, labels): """ Leave Half a Label Out cross-validation iterator: Provides train/test indexes to split data in train test sets Parameters ---------- labels : list List of labels Examples ---------- >>> from parietal.learn.covariance.cov_estimator_l1 import LeaveHalfALabelOut >>> N_SUBJECTS = 2 >>> N_SAMPLES = 2 >>> labels = np.repeat(np.arange(N_SUBJECTS), N_SAMPLES) >>> labels array([0, 0, 1, 1]) >>> cv = cross_val.LeaveHalfALabelOut(labels) >>> len(cv) 4 >>> for train_mask, test_mask in cv: ... print "TRAIN:", train_mask, "TEST:", test_mask TRAIN: [ True False True True] TEST: [False True False False] TRAIN: [False True True True] TEST: [ True False False False] TRAIN: [ True True True False] TEST: [False False False True] TRAIN: [ True True False True] TEST: [False False True False] """ LeaveOneLabelOut.__init__(self, labels)
def __iter__(self): for train_mask, test_mask in LeaveOneLabelOut.__iter__(self): n_test = test_mask.sum() sub_mask = np.ones(n_test, dtype=np.bool) sub_mask[: n_test / 2] = False new_test_mask = test_mask.copy() new_test_mask[test_mask] = sub_mask train_mask[test_mask] = np.logical_not(sub_mask) yield train_mask, new_test_mask new_test_mask[test_mask] = np.logical_not(sub_mask) train_mask[test_mask] = sub_mask yield train_mask, new_test_mask