Exemple #1
0
def mapper(key, output_collector):
    """
    # debug mapper
    config = json.load(open(os.path.join(WD, "config_cv_largerange.json"), "r"))
    load_globals(config)
    resample(config, 'refit/refit')
    key = ('enettv', 0.01, 0.1, 0.3)
    """
    import mapreduce as GLOBAL
    Xtr = GLOBAL.DATA_RESAMPLED["X"][0]
    Xte = GLOBAL.DATA_RESAMPLED["X"][1]
    ytr = GLOBAL.DATA_RESAMPLED["y"][0]
    yte = GLOBAL.DATA_RESAMPLED["y"][1]

    # key = 'enettv_0.01_0.1_0.2'.split("_")
    algo, alpha, l1l2ratio, tvratio = key[0], float(key[1]), float(key[2]), float(key[3])

    tv = alpha * tvratio
    l1 = alpha * float(1 - tv) * l1l2ratio
    l2 = alpha * float(1 - tv) * (1- l1l2ratio)

    print(key, algo, alpha, l1, l2, tv)
    # alpha = float(key[0])
    # l1, l2, tv = alpha * float(key[1]), alpha * float(key[2]), alpha * float(key[3])
    # print("l1:%f, l2:%f, tv:%f" % (l1, l2, tv))

    class_weight = "auto"  # unbiased

    # mask = np.ones(Xtr.shape[0], dtype=bool)

    scaler = preprocessing.StandardScaler().fit(Xtr)
    Xtr = scaler.transform(Xtr)
    Xte = scaler.transform(Xte)

    if algo == 'enettv':
        conesta = algorithms.proximal.CONESTA(max_iter=10000)
        mod = estimators.LogisticRegressionL1L2TV(l1, l2, tv,  GLOBAL.Atv,
            algorithm=conesta, class_weight=class_weight, penalty_start=penalty_start)
        mod.fit(Xtr, ytr.ravel())
    elif algo == 'enetgn':
        fista = algorithms.proximal.FISTA(max_iter=5000)
        mod = estimators.LogisticRegressionL1L2GraphNet(l1, l2, tv, GLOBAL.Agn,
            algorithm=fista, class_weight=class_weight, penalty_start=penalty_start)
        mod.fit(Xtr, ytr.ravel())
    elif algo == 'enet':
        fista = algorithms.proximal.FISTA(max_iter=5000)
        mod = estimators.ElasticNetLogisticRegression(l1l2ratio, alpha,
            algorithm=fista, class_weight=class_weight, penalty_start=penalty_start)
        mod.fit(Xtr, ytr.ravel())
    else:
        raise Exception('Algo%s not handled' %algo)

    #mod.fit(Xtr, ytr.ravel())
    y_pred = mod.predict(Xte)
    proba_pred = mod.predict_probability(Xte)
    ret = dict(y_pred=y_pred, y_true=yte, proba_pred=proba_pred,beta=mod.beta)
    if output_collector:
        output_collector.collect(key, ret)
    else:
        return ret
Exemple #2
0
def mapper(key, output_collector):
    import mapreduce as GLOBAL 
    Xtr = GLOBAL.DATA_RESAMPLED["X"][0]
    Xte = GLOBAL.DATA_RESAMPLED["X"][1]
    ytr = GLOBAL.DATA_RESAMPLED["y"][0]
    yte = GLOBAL.DATA_RESAMPLED["y"][1]

    penalty_start = 3
        
    alpha = float(key[0])
    l1, l2, tv = alpha * float(key[1]), alpha * float(key[2]), alpha * float(key[3])
    print("l1:%f, l2:%f, tv:%f" % (l1, l2, tv))

    class_weight="auto" # unbiased
    
    mask = np.ones(Xtr.shape[0], dtype=bool)
   
    scaler = preprocessing.StandardScaler().fit(Xtr)
    Xtr = scaler.transform(Xtr)
    Xte=scaler.transform(Xte)    
    A = GLOBAL.A
    
    conesta = algorithms.proximal.CONESTA(max_iter=500)
    mod= estimators.LogisticRegressionL1L2TV(l1,l2,tv, A, algorithm=conesta,class_weight=class_weight,penalty_start=penalty_start)
    mod.fit(Xtr, ytr.ravel())
    y_pred = mod.predict(Xte)
    proba_pred = mod.predict_probability(Xte)
    ret = dict(y_pred=y_pred, y_true=yte, proba_pred=proba_pred, beta=mod.beta,  mask=mask)
    if output_collector:
        output_collector.collect(key, ret)
    else:
        return ret
Exemple #3
0
def mapper(key, output_collector):
    import mapreduce as GLOBAL
    Xtr = GLOBAL.DATA_RESAMPLED["X"][0]
    Xte = GLOBAL.DATA_RESAMPLED["X"][1]
    ytr = GLOBAL.DATA_RESAMPLED["y"][0]
    yte = GLOBAL.DATA_RESAMPLED["y"][1]

    alpha = float(key[0])
    l1, l2, tv = alpha * float(key[1]), alpha * float(key[2]), alpha * float(
        key[3])
    print("l1:%f, l2:%f, tv:%f" % (l1, l2, tv))
    print(key)
    class_weight = "auto"  # unbiased
    print(output_collector.output_dir)
    beta_start = GLOBAL.BETA_START.all()[os.path.basename(
        output_collector.output_dir)]
    mask = np.ones(Xtr.shape[0], dtype=bool)

    scaler = preprocessing.StandardScaler().fit(Xtr)
    Xtr = scaler.transform(Xtr)
    Xte = scaler.transform(Xte)
    A = GLOBAL.A

    info = [
        Info.converged, Info.num_iter, Info.time, Info.func_val, Info.mu,
        Info.gap
    ]
    conesta = algorithms.proximal.CONESTA()
    algorithm_params = dict(max_iter=50000, info=info)
    out_fista = os.path.join(WD, output_collector.output_dir,
                             "fista_ite_snapshots/")
    out_conesta = os.path.join(WD, output_collector.output_dir,
                               "conesta_ite_snapshots/")

    os.makedirs(out_fista, exist_ok=True)
    os.makedirs(out_conesta, exist_ok=True)

    snapshot_fista = AlgorithmSnapshot(out_fista, saving_period=1).save_fista
    snapshot_conesta = AlgorithmSnapshot(out_conesta,
                                         saving_period=1).save_conesta
    algorithm_params["callback_fista"] = snapshot_fista
    algorithm_params["callback_conesta"] = snapshot_conesta


    mod= estimators.LogisticRegressionL1L2TV(l1,l2,tv, A, algorithm=conesta,\
                                             algorithm_params=algorithm_params,\
                                             class_weight=class_weight)
    mod.fit(Xtr, ytr.ravel(), beta=beta_start)
    y_pred = mod.predict(Xte)
    proba_pred = mod.predict_probability(Xte)
    ret = dict(y_pred=y_pred,
               y_true=yte,
               proba_pred=proba_pred,
               beta=mod.beta,
               mask=mask,
               beta_start=beta_start)
    if output_collector:
        output_collector.collect(key, ret)
    else:
        return ret
def test_conesta_do_not_enter_loop_if_criterium_satisfied():
    # beta_start = 0; with over penalized problem: should not enter loop
    mod = estimators.LogisticRegressionL1L2TV(
        l1*100, l2*100, tv*100, A,
        algorithm=algorithms.proximal.CONESTA(),
        algorithm_params=algorithm_params)
    mod.fit(Xtr, ytr, beta=np.zeros((Xtr.shape[1], 1), dtype=float))
    assert np.all(mod.beta == 0)
    assert mod.get_info()['num_iter'] == 0
def fitting(p):
    global_pen, l1_ratio, tv_ratio, = p[0], p[1], p[2]

    ltv = global_pen * tv_ratio
    ll1 = l1_ratio * global_pen * (1 - tv_ratio)
    ll2 = (1 - l1_ratio) * global_pen * (1 - tv_ratio)

    #l1, l2, tv= alpha * float(p[0]), alpha * float(p[1]), alpha * float(p[2])
    clf = estimators.LogisticRegressionL1L2TV(ll1,
                                              ll2,
                                              ltv,
                                              A,
                                              algorithm=conesta)
    n = 0
    list_predict = list()
    list_true = list()
    list_proba_pred = list()
    coef = np.zeros((23, 63966))
    for i in range(1, 24):
        test_bool = (subject == i)
        train_bool = (subject != i)
        Xtest = T[test_bool, :]
        ytest = y[test_bool]
        Xtrain = np.vstack((T_IMA_diff, T[train_bool, :]))
        ytrain = np.hstack((y_IMA, y[train_bool]))
        list_true.append(ytest.ravel())
        scaler = preprocessing.StandardScaler().fit(Xtrain)
        Xtrain = scaler.transform(Xtrain)
        Xtest = scaler.transform(Xtest)
        clf.fit(Xtrain, ytrain.ravel())
        coef[n, :] = clf.beta[:, 0]
        pred = (clf.predict(Xtest))
        list_predict.append(pred)
        proba_pred = clf.predict_probability(Xtest)
        list_proba_pred.append(proba_pred)
        n = n + 1
        print n

    true = np.concatenate(list_true)
    pred = np.concatenate(list_predict)
    proba_pred = np.concatenate(list_proba_pred)
    precision, recall, f, s = precision_recall_fscore_support(true,
                                                              pred,
                                                              average=None)
    acc = metrics.accuracy_score(true, pred)
    auc = roc_auc_score(true, pred)
    current = [
        global_pen, l1_ratio, tv_ratio, acc, recall[0], recall[1],
        precision[0], precision[1], auc
    ]
    np.save(
        os.path.join(BASE_PATH, 'toward_on', 'Logistic_L1_L2_TV_with_HC',
                     'betas_subj.npy'), coef)
    return current
def mapper(key, output_collector):
    import mapreduce as GLOBAL
    Xtr = GLOBAL.DATA_RESAMPLED["X"][0]
    Xte = GLOBAL.DATA_RESAMPLED["X"][1]
    ytr = GLOBAL.DATA_RESAMPLED["y"][0]
    yte = GLOBAL.DATA_RESAMPLED["y"][1]
    print key, "Data shape:", Xtr.shape, Xte.shape, ytr.shape, yte.shape
    STRUCTURE = GLOBAL.STRUCTURE

    global_pen, l1_ratio, tv_ratio = key
    ltv = global_pen * tv_ratio
    ll1 = l1_ratio * global_pen * (1 - tv_ratio)
    ll2 = (1 - l1_ratio) * global_pen * (1 - tv_ratio)

    class_weight = "auto"  # unbiased

    mask = np.ones(Xtr.shape[0], dtype=bool)

    T_IMA = np.load(
        '/neurospin/brainomics/2016_classif_hallu_fmri/unsupervised_fmri/clustering_3rdcomp/cluster1/mapreduce/T_IMA.npy'
    )
    y_IMA = np.load(
        '/neurospin/brainomics/2016_classif_hallu_fmri/unsupervised_fmri/clustering_3rdcomp/cluster1/mapreduce/y_IMA.npy'
    )

    T = GLOBAL.DATA["X"]
    y = GLOBAL.DATA["y"]

    Tdiff = np.mean(T_IMA, axis=0) - np.mean(T[y == 0], axis=0)
    T_IMA_diff = T_IMA - Tdiff
    Xtr = np.vstack((T_IMA_diff, Xtr))
    ytr = np.hstack((y_IMA, ytr))

    scaler = preprocessing.StandardScaler().fit(Xtr)
    Xtr = scaler.transform(Xtr)
    Xte = scaler.transform(Xte)
    A = GLOBAL.A

    conesta = algorithms.proximal.CONESTA(max_iter=500)
    mod = estimators.LogisticRegressionL1L2TV(ll1,
                                              ll2,
                                              ltv,
                                              A,
                                              algorithm=conesta,
                                              class_weight=class_weight)
    mod.fit(Xtr, ytr.ravel())
    y_pred = mod.predict(Xte)
    ret = dict(y_pred=y_pred, y_true=yte, beta=mod.beta, mask=mask)
    if output_collector:
        output_collector.collect(key, ret)
    else:
        return ret
Exemple #7
0
def mapper(key, output_collector):
    import mapreduce as GLOBAL
    X = GLOBAL.DATA["X"]
    y = GLOBAL.DATA["y"]
    start_vector = GLOBAL.DATA["start_vector"]

    alpha = float(key[0])
    l1, l2, tv = alpha * float(key[1]), alpha * float(key[2]), alpha * float(
        key[3])
    print("l1:%f, l2:%f, tv:%f" % (l1, l2, tv))

    class_weight = "auto"  # unbiased
    mask = np.ones(X.shape[0], dtype=bool)

    scaler = preprocessing.StandardScaler().fit(X)
    X = scaler.transform(X)
    A = GLOBAL.A

    info = [
        Info.converged, Info.num_iter, Info.time, Info.func_val, Info.mu,
        Info.gap
    ]
    conesta = algorithms.proximal.CONESTA()
    algorithm_params = dict(max_iter=1000000, info=info)
    out = os.path.join(WD_CLUSTER,GLOBAL.DIR,"0",str(key[0])+"_"+ str(key[1]) + "_" +\
                                                      str(key[2]) +"_"+str(key[3]),"conesta_ite_snapshots/")
    os.makedirs(out, exist_ok=True)

    snapshot = AlgorithmSnapshot(out, saving_period=1).save_conesta
    algorithm_params["callback"] = snapshot



    mod= estimators.LogisticRegressionL1L2TV(l1,l2,tv, A, algorithm=conesta,\
                                             algorithm_params=algorithm_params,\
                                             class_weight=class_weight,\
                                             penalty_start=penalty_start,start_vector=start_vector)
    mod.fit(X, y.ravel())
    y_pred = mod.predict(X)
    proba_pred = mod.predict_probability(X)
    ret = dict(y_pred=y_pred,
               y_true=y,
               proba_pred=proba_pred,
               beta=mod.beta,
               mask=mask)
    if output_collector:
        output_collector.collect(key, ret)
    else:
        return ret
def resample(config, resample_nb):
    import mapreduce as GLOBAL  # access to global variables
    #GLOBAL.DATA = GLOBAL.load_data(config["data"])
    resample = config["resample"][resample_nb]
    print "reslicing %d" % resample_nb
    GLOBAL.DATA_RESAMPLED = {
        k: [GLOBAL.DATA[k][idx, ...] for idx in resample]
        for k in GLOBAL.DATA
    }
    print "done reslicing %d" % resample_nb

    ###############################
    #weight computation for this fold
    ################################
    Xtr = GLOBAL.DATA_RESAMPLED["X"][0]
    ytr = GLOBAL.DATA_RESAMPLED["y"][0]
    p = Xtr.shape[1]
    groups = GLOBAL.groups
    # Compute A matrix (as penalty_start is 1 we need to only p-1 columns)
    Atv, n_compacts = parsimony.functions.nesterov.tv.A_from_shape(
        (p - PENALTY_START, ))
    eps = 1e-8
    max_iter = 2600
    info_conf = [Info.fvalue, Info.num_iter]
    logr_tv = estimators.LogisticRegressionL1L2TV(
        l1=0,
        l2=0,
        tv=0.001,
        penalty_start=PENALTY_START,
        A=Atv,
        algorithm=explicit.StaticCONESTA(eps=eps,
                                         max_iter=max_iter,
                                         info=info_conf),
        mean=False)
    logr_tv.fit(Xtr, ytr)
    beta_w = logr_tv.beta
    #    weights = [1./(np.linalg.norm(beta_w[group])) for group in groups]
    weights = [np.sqrt(len(group)) for group in groups]
    GLOBAL.ridge_coef = 1. / ((np.linalg.norm(beta_w)))
    GLOBAL.weights = weights
    # Store weights
    output_dir = os.path.join(config['map_output'], str(resample_nb))
    np.save(os.path.join(output_dir, "weights.npy"), GLOBAL.weights)
    np.save(os.path.join(output_dir, "ridge_coef.npy"), GLOBAL.ridge_coef)
def mapper(key, output_collector):
    import mapreduce as GLOBAL
    Xtr = GLOBAL.DATA_RESAMPLED["X"][0]
    Xte = GLOBAL.DATA_RESAMPLED["X"][1]
    ytr = GLOBAL.DATA_RESAMPLED["y"][0]
    yte = GLOBAL.DATA_RESAMPLED["y"][1]

    T_IMA = GLOBAL.DATA_IMA["X_IMA"]
    y_IMA = GLOBAL.DATA_IMA["y_IMA"]
    T = GLOBAL.DATA["X"]
    y = GLOBAL.DATA["y"]
    Tdiff = np.mean(T_IMA, axis=0) - np.mean(T[y == 0], axis=0)
    T_IMA_diff = T_IMA - Tdiff
    Xtr = np.vstack((T_IMA_diff, Xtr))
    ytr = np.hstack((y_IMA, ytr))

    alpha = float(key[0])
    l1, l2, tv = alpha * float(key[1]), alpha * float(key[2]), alpha * float(
        key[3])
    print "l1:%f, l2:%f, tv:%f" % (l1, l2, tv)

    class_weight = "auto"  # unbiased

    mask = np.ones(Xtr.shape[0], dtype=bool)

    scaler = preprocessing.StandardScaler().fit(Xtr)
    Xtr = scaler.transform(Xtr)
    Xte = scaler.transform(Xte)
    A = GLOBAL.A

    conesta = algorithms.proximal.CONESTA(max_iter=500)
    mod = estimators.LogisticRegressionL1L2TV(l1,
                                              l2,
                                              tv,
                                              A,
                                              algorithm=conesta,
                                              class_weight=class_weight)
    mod.fit(Xtr, ytr.ravel())
    y_pred = mod.predict(Xte)
    ret = dict(y_pred=y_pred, y_true=yte, beta=mod.beta, mask=mask)
    if output_collector:
        output_collector.collect(key, ret)
    else:
        return ret
def fitting(p):

    l1, l2, tv = alpha * float(p[0]), alpha * float(p[1]), alpha * float(p[2])
    clf = estimators.LogisticRegressionL1L2TV(l1, l2, tv, A, algorithm=conesta)
    n = 0
    list_predict = list()
    list_true = list()
    list_proba_pred = list()
    coef = np.zeros((23, sum(mask_bool)))
    for i in range(1, 24):
        test_bool = (subject == i)
        train_bool = (subject != i)
        Xtest = T[test_bool, :]
        ytest = y[test_bool]
        #        Xtrain=T[train_bool,:]
        #        ytrain=y[train_bool]
        Xtrain = np.vstack((T_IMA_diff, T[train_bool, :]))
        ytrain = np.hstack((y_IMA, y[train_bool]))
        list_true.append(ytest.ravel())
        scaler = preprocessing.StandardScaler().fit(Xtrain)
        Xtrain = scaler.transform(Xtrain)
        Xtest = scaler.transform(Xtest)
        clf.fit(Xtrain, ytrain.ravel())
        coef[n, :] = clf.beta[:, 0]
        pred = (clf.predict(Xtest))
        list_predict.append(pred)
        proba_pred = clf.predict_probability(Xtest)
        list_proba_pred.append(proba_pred)
        n = n + 1
        print n

    true = np.concatenate(list_true)
    pred = np.concatenate(list_predict)
    proba_pred = np.concatenate(list_proba_pred)
    precision, recall, f, s = precision_recall_fscore_support(true,
                                                              pred,
                                                              average=None)
    acc = metrics.accuracy_score(true, pred)
    auc = roc_auc_score(true, pred)
    current = [
        alpha, p[0], p[1], p[2], acc, recall[0], recall[1], precision[0],
        precision[1], auc
    ]
    return current
    estimators.ElasticNetLogisticRegression(alpha=alpha / 10, l=.5,
                                            penalty_start=1,
                                            algorithm_params=algorithm_params)

## LogisticRegressionL1L2TV, Parsimony only
# Minimize:
#    f(beta, X, y) = - loglik/n_train
#                    + k/2 * ||beta||^2_2
#                    + l * ||beta||_1
#                    + g * TV(beta)
A = nesterov_tv.linear_operator_from_shape(beta3d.shape)
l1, l2, tv = alpha * np.array((.05, .75, .2))  # l2, l1, tv penalties

MODELS["2d_l1l2tv_fista"] = \
    estimators.LogisticRegressionL1L2TV(
        l1, l2, tv, A,
        algorithm=algorithms.proximal.FISTA(),
        algorithm_params=algorithm_params)

MODELS["2d_l1l2tv_inter_fista"] = \
    estimators.LogisticRegressionL1L2TV(
        l1, l2, tv, A, penalty_start=1,
        algorithm=algorithms.proximal.FISTA(),
        algorithm_params=algorithm_params)


MODELS["2d_l1l2tv_static_conesta"] = \
    estimators.LogisticRegressionL1L2TV(
        l1, l2, tv, A,
        algorithm=algorithms.proximal.StaticCONESTA(),
        algorithm_params=algorithm_params)
# GraphNet
# l1, l2, gn = alpha * np.array((.05, .75, .2))  # l1, l2, gn penalties
l1, l2, gn = alpha * np.array((.33, .33, 33))  # l1, l2, gn penalties
A = sparse.vstack(nesterov_tv.linear_operator_from_shape(shape))
enetgn = estimators.LogisticRegressionL1L2GraphNet(l1, l2, gn, A)
yte_pred_enetgn = enetgn.fit(Xtr, ytr).predict(Xte)
_, recall_enetgn, _, _ = \
    precision_recall_fscore_support(yte, yte_pred_enetgn, average=None)

# LogisticRegressionL1L2TV
l1, l2, tv = alpha * np.array((.05, .75, .2))  # l1, l2, tv penalties
# l1, l2, tv = alpha * np.array((.33, .33, 33))  # l1, l2, gn penalties
A = nesterov_tv.linear_operator_from_shape(beta3d.shape)
enettv = estimators.LogisticRegressionL1L2TV(l1,
                                             l2,
                                             tv,
                                             A,
                                             algorithm_params=dict(eps=1e-5))
yte_pred_enettv = enettv.fit(Xtr, ytr).predict(Xte)
_, recall_enettv, _, _ = \
    precision_recall_fscore_support(yte, yte_pred_enettv, average=None)

###############################################################################
# Plot
plot = plt.subplot(231)
utils.plots.map2d(beta3d.reshape(shape), plot, title="beta star")

plot = plt.subplot(232)
utils.plots.map2d(ridge_sklrn.coef_.reshape(shape),
                  plot,
                  title="Ridge (sklrn) (%.2f, %.2f)" %
assert X_pra.shape[1] == 299864

scaler = preprocessing.StandardScaler().fit(X_scz)
X_scz = scaler.transform(X_scz)
X_pra = scaler.transform(X_pra)

##'enettv':
tvratio=1.0
l1l2ratio = 0.1
alpha = 1.0
tv = alpha * tvratio
l1 = alpha * float(1 - tv) * l1l2ratio
l2 = alpha * float(1 - tv) * (1- l1l2ratio)

conesta = algorithms.proximal.CONESTA(max_iter=10000)
mod = estimators.LogisticRegressionL1L2TV(l1, l2, tv,Atv,\
algorithm=conesta, class_weight=class_weight, penalty_start=penalty_start)

#
#'enetgn':
tvratio=0.8
l1l2ratio = 0.1
alpha = 0.1
tv = alpha * tvratio
l1 = alpha * float(1 - tv) * l1l2ratio
l2 = alpha * float(1 - tv) * (1- l1l2ratio)
fista = algorithms.proximal.FISTA(max_iter=5000)
mod = estimators.LogisticRegressionL1L2GraphNet(l1, l2, tv,Agn,
algorithm=fista, class_weight=class_weight, penalty_start=penalty_start)

#algo == 'enet':
fista = algorithms.proximal.FISTA(max_iter=5000)
Exemple #14
0
y_test_decfunc_pred = np.zeros(len(y))
y_train_pred = np.zeros(len(y))
coefs_cv = np.zeros((NFOLDS, X.shape[1]))

auc_test = list()
recalls_test = list()
acc_test = list()

for cv_i, (train, test) in enumerate(cv.split(X, y)):
    #for train, test in cv.split(X, y, None):
    print(cv_i)
    X_train, X_test, y_train, y_test = X[train, :], X[test, :], y[train], y[test]
    X_train = scaler.fit_transform(X_train)
    X_test = scaler.transform(X_test)
    conesta = algorithms.proximal.CONESTA(max_iter=10000)
    estimator = estimators.LogisticRegressionL1L2TV(l1, l2, tv, Atv, algorithm=conesta,
                                                    class_weight="auto", penalty_start=0)
    estimator.fit(X_train, y_train.ravel())
    # Store prediction for micro avg
    y_test_pred[test] = estimator.predict(X_test).ravel()
    y_test_prob_pred[test] = estimator.predict_probability(X_test).ravel()#[:, 1]
    #y_test_decfunc_pred[test] = estimator.decision_function(X_test)
    y_train_pred[train] = estimator.predict(X_train).ravel()
    # Compute score for macro avg
    auc_test.append(metrics.roc_auc_score(y_test, estimator.predict_probability(X_test).ravel()))
    recalls_test.append(metrics.recall_score(y_test, estimator.predict(X_test).ravel(), average=None))
    acc_test.append(metrics.accuracy_score(y_test, estimator.predict(X_test).ravel()))

    coefs_cv[cv_i, :] = estimator.beta.ravel()

# Micro Avg
recall_test_microavg = metrics.recall_score(y, y_test_pred, average=None)
def mapper(key, output_collector):
    import mapreduce as GLOBAL
    Xtr = GLOBAL.DATA_RESAMPLED["X"][0]
    Xte = GLOBAL.DATA_RESAMPLED["X"][1]
    ytr = GLOBAL.DATA_RESAMPLED["y"][0]
    yte = GLOBAL.DATA_RESAMPLED["y"][1]

    # key = 'enettv_0.01_0.1_0.2'.split("_")
    algo, alpha, l1l2ratio, tvratio = key[0], float(key[1]), float(
        key[2]), float(key[3])

    tv = alpha * tvratio
    l1 = alpha * float(1 - tv) * l1l2ratio
    l2 = alpha * float(1 - tv) * (1 - l1l2ratio)

    print(key, algo, alpha, l1, l2, tv)
    # alpha = float(key[0])
    # l1, l2, tv = alpha * float(key[1]), alpha * float(key[2]), alpha * float(key[3])
    # print("l1:%f, l2:%f, tv:%f" % (l1, l2, tv))

    class_weight = "auto"  # unbiased

    beta_start = GLOBAL.beta_start["lambda_%.4f" % alpha]
    print(beta_start.shape, Xtr.shape, beta_start.mean())
    # mask = np.ones(Xtr.shape[0], dtype=bool)

    scaler = preprocessing.StandardScaler().fit(Xtr)
    Xtr = scaler.transform(Xtr)
    Xte = scaler.transform(Xte)

    if algo == 'enettv':
        conesta = algorithms.proximal.CONESTA(max_iter=10000)
        mod = estimators.LogisticRegressionL1L2TV(l1,
                                                  l2,
                                                  tv,
                                                  GLOBAL.Atv,
                                                  algorithm=conesta,
                                                  class_weight=class_weight,
                                                  penalty_start=penalty_start)
        mod.fit(Xtr, ytr.ravel(), beta=beta_start)
    elif algo == 'enetgn':
        fista = algorithms.proximal.FISTA(max_iter=500)
        mod = estimators.LogisticRegressionL1L2GraphNet(
            l1,
            l2,
            tv,
            GLOBAL.Agn,
            algorithm=fista,
            class_weight=class_weight,
            penalty_start=penalty_start)
        mod.fit(Xtr, ytr.ravel())
    elif algo == 'enet':
        fista = algorithms.proximal.FISTA(max_iter=500)
        mod = estimators.ElasticNetLogisticRegression(
            l1l2ratio,
            alpha,
            algorithm=fista,
            class_weight=class_weight,
            penalty_start=penalty_start)
        mod.fit(Xtr, ytr.ravel())
    else:
        raise Exception('Algo%s not handled' % algo)

    #mod.fit(Xtr, ytr.ravel())
    y_pred = mod.predict(Xte)
    proba_pred = mod.predict_probability(Xte)
    ret = dict(y_pred=y_pred, y_true=yte, proba_pred=proba_pred,
               beta=mod.beta)  #, mask=mask)
    if output_collector:
        output_collector.collect(key, ret)
    else:
        return ret
    #

    # 4- build A matrix
    import parsimony.functions.nesterov.gl as gl
    import parsimony.algorithms.primaldual as explicit
    import parsimony.estimators as estimators
    Atv, n_compacts = parsimony.functions.nesterov.tv.A_from_shape((p_orig, ))
    eps = 1e-8
    max_iter = 2600
    conts = 2  # will be removed next version current max_iter x cont
    info_conf = [Info.fvalue, Info.num_iter]
    logr_tv = estimators.LogisticRegressionL1L2TV(
        l1=0,
        l2=0,
        tv=0.1,
        A=Atv,
        algorithm=explicit.StaticCONESTA(eps=eps,
                                         max_iter=max_iter,
                                         info=info_conf),
        mean=False)
    logr_tv.fit(X_orig, y)
    beta_w = logr_tv.beta
    #    plt.plot(beta_w[1:])
    #    plt.show()

    PENALTY_START = 1
    extended_groups = groups
    #    + [[i] for i in range(PENALTY_START, p-1)]
    #test avec tv
    weights = [
        1. / (np.linalg.norm(beta_w[group])) for group in extended_groups