def test_extract_trial_features_real():
    csvs = [
            "./data/fh_pca_space_merge_Insula_rt_fast.csv",
            "./data/fh_pca_space_merge_Insula_rt_slow.csv"
            ]

    # load_dimreduce_data_fromcl(csvs, feature_cols, label_col, cv_col, trial_tr_col)
    feature_col = range(0,3)
    label_col = 5
    cv_col = 6
    trial_tr_col = 7
    Xs, ys, indices, cvcodes = load_dimreduce_data_fromcl(
            csvs, feature_col, label_col, cv_col, trial_tr_col
            )
    
    X = np.concatenate(Xs)
    y = create_y(np.concatenate(ys)) 
    trials = np.concatenate(indices)
    windowstr = '0:10'
    window =  range(*[int(i) for i in windowstr.split(':')])

    Xfea, indexfea, otherfea = extract_trial_features(
            X, trials, window, [trials], None
            )
    yea = otherfea[0]
    
    # Xmax, Xmin, Xdiff, Xmean, Xslope
    print("Xmax\n{0}".format(Xfea[:,0:3]))
    print("Xmin\n{0}".format(Xfea[:,3:6]))
    print("Xdiff\n{0}".format(Xfea[:,6:9]))
    print("Xmean\n{0}".format(Xfea[:,9:12]))
    print("Xslope\n{0}".format(Xfea[:,12:15]))
def test_extract_trial_features_simulated():    
    prng = np.random.RandomState(43)
    
    # Create data
    iti = 2
    updown = range(1,4) + range(-2,0)
    l = len(updown)
    accum2 = np.asarray([0]*iti + updown + [0]*iti + updown)
    nullfea = prng.rand(accum2.shape[0])
    X = np.vstack([accum2, nullfea]).T
    
    y = np.asarray([0]*iti + [1]*l + [0]*iti + [2]*l)
    trials = np.asarray([0]*iti + [1]*l + [0]*iti + [2]*l)
    assert y.shape == trials.shape, "y and trials do not match"
    assert X.shape[0] == y.shape[0], "y and X do not match" 

    print("\n*** Test 1: Full window ***")
    window=range(l-1)
    Xfea, indexfea, otherfea = extract_trial_features(
            X, trials, window, [trials], 0
            )
    yea = otherfea[0]

    assert Xfea.shape[0] == 2, "Xfea nrow is wrong"
    assert Xfea.shape[1] == 2 * 5, "Xfea wrong feature number"
    assert len(yea) == 2, "yfea is off"
    assert len(indexfea) == 2, "trialfea is off"

    # Xmax, Xmin, Xdiff, Xmean, Xslope
    print("Xmax\n{0}".format(Xfea[:,0:2]))
    print("Xmin\n{0}".format(Xfea[:,2:4]))
    print("Xdiff\n{0}".format(Xfea[:,4:6]))
    print("Xmean\n{0}".format(Xfea[:,6:8]))
    print("Xslope\n{0}".format(Xfea[:,8:10]))
Example #3
0
def _data(csvs, feature_index, window, label_col, trial_tr_col):
    """Data loading and feature selection helper."""
    Xs, ys, indices, cvcodes = load_dimreduce_data_fromcl(
            csvs, feature_index, label_col, 
            label_col, trial_tr_col
            )

    X = np.concatenate(Xs)
    y = create_y(np.concatenate(ys)) 
    index = np.concatenate(indices)
    cvcode = np.concatenate(cvcodes)

    X, index, othermeta = extract_trial_features(X, index,  
            window, [y, cvcode], None
            )
    y, _ = othermeta  ## toss cvcode, not applicable
        
    return X, y
Example #4
0
feature_index = range(*[int(i) for i in args.data.split(':')])

csvs = args.t
# load_dimreduce_data_fromcl(csvs, feature_cols, label_col, cv_col, trial_tr_col)
Xs, ys, indices, cvcodes = load_dimreduce_data_fromcl(
        csvs, feature_index, args.labels, 
        args.cv, args.trial_tr
        )
X = np.concatenate(Xs)
y = create_y(np.concatenate(ys)) 
index = np.concatenate(indices)
cvcode = np.concatenate(cvcodes)

window =  range(*[int(i) for i in args.window.split(':')])
X, index, othermeta = extract_trial_features(
        X, index,  window, [y, cvcode], None
        )
y, cvcode = othermeta

assert X.shape[0] == y.shape[0], "X and y length mismatch"

# ----
# Setup CV: 
#
# Kfold splitting by label or by custom label
# (probably by participant)
n_fold = 3
if args.labels == args.cv:
    cv = KFold(y.shape[0], n_folds=n_fold, indices=True)
else:
    uncvcode = np.unique(cvcode)