info = np.load(op.join(cfg.path_data, 'info_allch.npy')).item() picks = mne.pick_types(info, meg=meg) fname = op.join(cfg.path_outputs, 'covs_allch_oas.h5') covs = mne.externals.h5io.read_hdf5(fname) subjects = [d['subject'] for d in covs if 'subject' in d] covs = [d['covs'][:, picks][:, :, picks] for d in covs if 'subject' in d] X = np.array(covs) n_sub, n_fb, n_ch, _ = X.shape part = pd.read_csv(op.join(cfg.path_data, 'participants.csv')) y = part.set_index('Observations').age.loc[subjects] logdiag = LogDiag() riemanngeo = Riemann(n_fb=n_fb, metric=metric) riemannwass = RiemannSnp(n_fb=n_fb, rank=n_compo) sc = StandardScaler() ridge = RidgeCV(alphas=np.logspace(-3, 5, 100)) dummy = DummyRegressor() cv = KFold(n_splits=n_splits, shuffle=True, random_state=seed) print('---LogDiag-------------------------------------------') reg = 0 shrinks = np.linspace(0, 1, 10) identity = ProjIdentitySpace() random = ProjRandomSpace(n_compo=n_compo) commonwass = ProjCommonWassSpace(n_compo=n_compo) commoneucl = ProjCommonSpace(scale=scale, n_compo=n_compo, reg=reg) spoc = ProjSPoCSpace(shrink=0.5, scale=scale, n_compo=n_compo, reg=reg)
for shrink in shrinks: spoc = ProjSPoCSpace(shrink=shrink, scale=scale, n_compo=n_compo, reg=reg) pipe = make_pipeline(spoc, riemann, sc, ridge) scores = - cross_val_score(pipe, X=X, y=y, cv=cv, n_jobs=n_jobs, scoring='neg_mean_absolute_error', error_score=np.nan) print("Compo: %d - Shrink: %.2f - CV score: %.2f +/- %.2f" % ( n_compo, shrink, np.mean(scores), np.std(scores))) scoresreg.append(scores) scores_spoc_riemann.append(scoresreg) print('Pipeline: RiemannSnp') scores_riemannsnp = [] for rank in n_compos: riemannsnp = RiemannSnp(n_fb=n_fb, rank=rank) pipe = make_pipeline(riemannsnp, sc, ridge) scores = - cross_val_score(pipe, X=X, y=y, cv=cv, n_jobs=n_jobs, scoring='neg_mean_absolute_error', error_score=np.nan) print("Compo: %d - CV score: %.2f +/- %.2f" % ( rank, np.mean(scores), np.std(scores))) scores_riemannsnp.append(scores) scores = {'compos': np.array(n_compos), 'shrinks': np.array(shrinks), 'dummy': np.array(scores_dummy), 'id_logdiag': np.array(scores_id_logdiag), 'common_logdiag': np.array(scores_common_logdiag), 'common_riemann': np.array(scores_common_riemann), 'spoc_logdiag': np.array(scores_spoc_logdiag), 'spoc_riemann': np.array(scores_spoc_riemann),
distance_A_id = 1.0 # Parameter 'mu': distance from A to Id f_powers = 'log' # link function between the y and the source powers direction_A = None # random direction_A rng = 4 sigma = 0. # Noise level in y noises_A = np.logspace(-2.5, -.2, 10) # noise in Ai scoring = 'neg_mean_absolute_error' # define spatial filters identity = ProjIdentitySpace() spoc = ProjSPoCSpace(n_compo=n_channels, scale='auto', reg=0, shrink=0) # define featuring logdiag = LogDiag() geom = Riemann(n_fb=1, metric='riemann') wass = RiemannSnp(n_fb=1, rank=n_channels) sc = StandardScaler() # define algo dummy = DummyRegressor() ridge = RidgeCV(alphas=np.logspace(-7, 3, 100), scoring=scoring) # define models pipelines = { 'dummy': make_pipeline(identity, logdiag, sc, dummy), 'logdiag': make_pipeline(identity, logdiag, sc, ridge), 'spoc': make_pipeline(spoc, logdiag, sc, ridge), 'wass': make_pipeline(identity, wass, sc, ridge), 'geom': make_pipeline(identity, geom, sc, ridge), 'supgeom': make_pipeline(spoc, geom, sc, ridge)
def run_models(cv): logdiag = LogDiag() naivevec = NaiveVec(method='upper') riemanngeo = Riemann(n_fb=n_fb, metric=metric) riemannwass = RiemannSnp(n_fb=n_fb, rank=n_compo) sc = StandardScaler() ridge = RidgeCV(alphas=np.logspace(-3, 5, 100)) dummy = DummyRegressor() print('---LogDiag-------------------------------------------') reg = 0 shrinks = np.linspace(0, 1, 10) identity = ProjIdentitySpace() euclidean_vec = NaiveVec(method='upper') random = ProjRandomSpace(n_compo=n_compo) commonwass = ProjCommonWassSpace(n_compo=n_compo) commoneucl = ProjCommonSpace(scale=scale, n_compo=n_compo, reg=reg) spoc = ProjSPoCSpace(shrink=0.5, scale=scale, n_compo=n_compo, reg=reg) print('Pipeline: Dummy') pipe = make_pipeline(identity, logdiag, sc, dummy) scores = -cross_val_score(pipe, X=X, y=y, cv=cv, n_jobs=n_jobs, scoring='neg_mean_absolute_error', error_score=np.nan) print("CV score: %.2f +/- %.2f" % (np.mean(scores), np.std(scores))) scores_dummy = scores print('Pipeline: Identity + NaiveVec') pipe = make_pipeline(identity, naivevec, sc, ridge) scores = cross_val_score(pipe, X=X, y=y, cv=cv, n_jobs=n_jobs, scoring='neg_mean_absolute_error', error_score=np.nan) print("CV score: %.2f +/- %.2f" % (np.mean(scores), np.std(scores))) scores_sensor_naivevec = scores print('Pipeline: Identity + LogDiag') pipe = make_pipeline(identity, logdiag, sc, ridge) scores = -cross_val_score(pipe, X=X, y=y, cv=cv, n_jobs=n_jobs, scoring='neg_mean_absolute_error', error_score=np.nan) print("CV score: %.2f +/- %.2f" % (np.mean(scores), np.std(scores))) scores_sensor_logdiag = scores print('Pipeline: Random + LogDiag') pipe = make_pipeline(random, logdiag, sc, ridge) scores = -cross_val_score(pipe, X=X, y=y, cv=cv, n_jobs=n_jobs, scoring='neg_mean_absolute_error', error_score=np.nan) print("CV score: %.2f +/- %.2f" % (np.mean(scores), np.std(scores))) scores_rand_logdiag = scores print('Pipeline: CommonEucl + LogDiag') pipe = make_pipeline(commoneucl, logdiag, sc, ridge) scores = -cross_val_score(pipe, X=X, y=y, cv=cv, n_jobs=n_jobs, scoring='neg_mean_absolute_error', error_score=np.nan) print("CV score: %.2f +/- %.2f" % (np.mean(scores), np.std(scores))) scores_unsup_logdiag = scores print('Pipeline: SPoC + LogDiag') scores_sup_logdiag = [] for shrink in shrinks: spoc = ProjSPoCSpace(shrink=shrink, scale=scale, n_compo=n_compo, reg=reg) pipe = make_pipeline(spoc, logdiag, sc, ridge) scores = -cross_val_score(pipe, X=X, y=y, cv=cv, n_jobs=n_jobs, scoring='neg_mean_absolute_error', error_score=np.nan) print("CV score: %.2f +/- %.2f" % (np.mean(scores), np.std(scores))) scores_sup_logdiag.append(scores) scores_sup_logdiag = scores_sup_logdiag[np.argmin( np.mean(scores_sup_logdiag, axis=1))] print('---RiemannWass-------------------------------------------') reg = 0 shrinks = np.linspace(0, 1, 10) identity = ProjIdentitySpace() random = ProjRandomSpace(n_compo=n_compo) commoneucl = ProjCommonSpace(scale=scale, n_compo=n_compo, reg=reg) spoc = ProjSPoCSpace(shrink=0.5, scale=scale, n_compo=n_compo, reg=reg) print('Pipeline: Identity + RiemannWass') pipe = make_pipeline(identity, riemannwass, sc, ridge) scores = -cross_val_score(pipe, X=X, y=y, cv=cv, n_jobs=n_jobs, scoring='neg_mean_absolute_error', error_score=np.nan) print("CV score: %.2f +/- %.2f" % (np.mean(scores), np.std(scores))) scores_sensor_riemannwass = scores print('Pipeline: Random + RiemannWass') pipe = make_pipeline(random, riemannwass, sc, ridge) scores = -cross_val_score(pipe, X=X, y=y, cv=cv, n_jobs=n_jobs, scoring='neg_mean_absolute_error', error_score=np.nan) print("CV score: %.2f +/- %.2f" % (np.mean(scores), np.std(scores))) scores_rand_riemannwass = scores print('Pipeline: CommonEucl + RiemannWass') pipe = make_pipeline(commoneucl, riemannwass, sc, ridge) scores = -cross_val_score(pipe, X=X, y=y, cv=cv, n_jobs=n_jobs, scoring='neg_mean_absolute_error', error_score=np.nan) print("CV score: %.2f +/- %.2f" % (np.mean(scores), np.std(scores))) scores_unsup_riemannwass = scores print('Pipeline: SPoC + RiemannWass') scores_sup_riemannwass = [] for shrink in shrinks: spoc = ProjSPoCSpace(shrink=shrink, scale=scale, n_compo=n_compo, reg=reg) pipe = make_pipeline(spoc, riemannwass, sc, ridge) scores = -cross_val_score(pipe, X=X, y=y, cv=cv, n_jobs=n_jobs, scoring='neg_mean_absolute_error', error_score=np.nan) print("CV score: %.2f +/- %.2f" % (np.mean(scores), np.std(scores))) scores_sup_riemannwass.append(scores) scores_sup_riemannwass = scores_sup_riemannwass[np.argmin( np.mean(scores_sup_riemannwass, axis=1))] print('---RiemannGeo-------------------------------------------') shrink = 0.5 regs = np.logspace(-7, -3, 5) identity = ProjIdentitySpace() random = ProjRandomSpace(n_compo=n_compo) lw = ProjLWSpace(shrink=shrink) commoneucl = ProjCommonSpace(scale=scale, n_compo=n_compo, reg=0) spoc = ProjSPoCSpace(shrink=shrink, scale=scale, n_compo=n_compo, reg=0) print('Pipeline: Random + RiemannGeo') pipe = make_pipeline(random, riemanngeo, sc, ridge) scores = -cross_val_score(pipe, X=X, y=y, cv=cv, n_jobs=n_jobs, scoring='neg_mean_absolute_error', error_score=np.nan) print("CV score: %.2f +/- %.2f" % (np.mean(scores), np.std(scores))) scores_rand_riemanngeo = scores print('Pipeline: LW + RiemannGeo') pipe = make_pipeline(lw, riemanngeo, sc, ridge) scores = -cross_val_score(pipe, X=X, y=y, cv=cv, n_jobs=n_jobs, scoring='neg_mean_absolute_error', error_score=np.nan) print("CV score: %.2f +/- %.2f" % (np.mean(scores), np.std(scores))) scores_sensor_riemanngeo = scores print('Pipeline: CommonEucl + RiemannGeo') scores_unsup_riemanngeo = [] for reg in regs: commoneucl = ProjCommonSpace(scale=scale, n_compo=n_compo, reg=reg) pipe = make_pipeline(commoneucl, riemanngeo, sc, ridge) scores = -cross_val_score(pipe, X=X, y=y, cv=cv, n_jobs=n_jobs, scoring='neg_mean_absolute_error', error_score=np.nan) print("CV score: %.2f +/- %.2f" % (np.mean(scores), np.std(scores))) scores_unsup_riemanngeo.append(scores) scores_unsup_riemanngeo = scores_unsup_riemanngeo[np.argmin( np.mean(scores_unsup_riemanngeo, axis=1))] print('Pipeline: SPoC + RiemannGeo') scores_sup_riemanngeo = [] for reg in regs: spoc = ProjSPoCSpace(shrink=shrink, scale=scale, n_compo=n_compo, reg=reg) pipe = make_pipeline(spoc, riemanngeo, sc, ridge) scores = -cross_val_score(pipe, X=X, y=y, cv=cv, n_jobs=n_jobs, scoring='neg_mean_absolute_error', error_score=np.nan) print("CV score: %.2f +/- %.2f" % (np.mean(scores), np.std(scores))) scores_sup_riemanngeo.append(scores) scores_sup_riemanngeo = scores_sup_riemanngeo[np.argmin( np.mean(scores_sup_riemanngeo, axis=1))] scores = { 'dummy': np.array(scores_dummy), 'sensor_euclidean': np.array(scores_sensor_naivevec), 'sensor_logdiag': np.array(scores_sensor_logdiag), 'rand_logdiag': np.array(scores_rand_logdiag), 'unsup_logdiag': np.array(scores_unsup_logdiag), 'sup_logdiag': np.array(scores_sup_logdiag), 'sensor_riemannwass': np.array(scores_sensor_riemannwass), 'rand_riemannwass': np.array(scores_rand_riemannwass), 'unsup_riemannwass': np.array(scores_unsup_riemannwass), 'sup_riemannwass': np.array(scores_sup_riemannwass), 'sensor_riemanngeo': np.array(scores_sensor_riemanngeo), 'rand_riemanngeo': np.array(scores_rand_riemanngeo), 'unsup_riemanngeo': np.array(scores_unsup_riemanngeo), 'sup_riemanngeo': np.array(scores_sup_riemanngeo) } return scores