def __call__(self, emp_covs, n_samples, alpha, max_iter, tol,
              iter_n, omega, prev_omega):
     if iter_n == -1:
         self.start_time = time.time()
         self.wall_clock.append(0)
     else:
         self.wall_clock.append(time.time() - self.start_time)
     self.score.append(group_sparse_scores(omega, n_samples, emp_covs,
                                           alpha)[0])
     self.test_score.append(group_sparse_scores(omega, n_samples,
                                                self.test_emp_covs,
                                                alpha)[0])
     if iter_n > -1 and self.test_score[-2] > self.test_score[-1]:
         if self.first_max_ind is None:
             print("score decreasing")
             self.first_max_ind = iter_n
def plot_benchmark1():
    """Plot various quantities obtained for varying values of alpha."""
    parameters = dict(n_var=200,
                      n_tasks=5,
                      density=0.15,

                      tol=1e-2,
#                      max_iter=50,
                      min_samples=100,
                      max_samples=150)

    cache_dir = get_cache_dir(parameters, output_dir=output_dir)
    gt = get_ground_truth(cache_dir)
    gt['precisions'] = np.dstack(gt['precisions'])

    emp_covs, n_samples = empirical_covariances(gt['signals'])
    n_samples /= n_samples.sum()

    alpha = []
    objective = []
    log_likelihood = []
    ll_penalized = []
    sparsity = []
    kl = []

    true_covs = np.empty(gt['precisions'].shape)
    for k in range(gt['precisions'].shape[-1]):
        true_covs[..., k] = np.linalg.inv(gt['precisions'][..., k])

    for out in iter_outputs(cache_dir):
        alpha.append(out['alpha'])
        objective.append(- out['objective'][-1])
        ll, llpen = group_sparse_scores(out['precisions'],
                                       n_samples, true_covs, out['alpha'])
        log_likelihood.append(ll)
        ll_penalized.append(llpen)
        sparsity.append(1. * (out['precisions'][..., 0] != 0).sum()
                        / out['precisions'].shape[0] ** 2)
        kl.append(distance(out['precisions'], gt['precisions']))

    gt["true_sparsity"] = (1. * (gt['precisions'][..., 0] != 0).sum()
                           / gt['precisions'].shape[0] ** 2)
    title = (("n_var: {n_var}, n_tasks: {n_tasks}, "
             + "true sparsity: {true_sparsity:.2f} "
             + "\ntol: {tol:.2e} samples: {min_samples}-{max_samples}").format(
                 true_sparsity=gt["true_sparsity"],
                 **parameters))

    plot(alpha, objective, label="objective", title=title)
    plot(alpha, log_likelihood, label="log-likelihood", new_figure=False)
    plot(alpha, ll_penalized, label="penalized L-L", new_figure=False)

    plot(alpha, sparsity, label="sparsity", title=title)
    pl.hlines(gt["true_sparsity"], min(alpha), max(alpha))

    plot(alpha, kl, label="distance", title=title)
    pl.show()
    def __call__(self, emp_covs, n_samples, alpha, max_iter, tol, n, omega,
                 omega_diff):
        """Probe for group_sparse_covariance that returns times and scores"""
        if n == -1:
            print("\n-- probe: starting '{0}' --".format(str(self.comment)))
            self.start_time = time.time()
            self.timings.append(0)
        else:
            self.timings.append(time.time() - self.start_time)
            self.max_norm.append(abs(omega_diff).max())
            self.l1_norm.append(abs(omega_diff).sum() / omega.size)

        score, objective = group_sparse_scores(omega, n_samples, emp_covs,
                                               alpha)
        self.score.append(score)
        self.objective.append(objective)
Exemple #4
0
    def __call__(self, emp_covs, n_samples, alpha, max_iter, tol,
                 iter_n, omega, prev_omega):
        if iter_n == -1:
            self.start_time = time.time()
            self.wall_clock.append(0)
        else:
            self.wall_clock.append(time.time() - self.start_time)
        scores = group_sparse_scores(
            omega, n_samples, emp_covs, alpha,
            duality_gap=not self.duality_gap is None)

        self.precisions.append(omega)

        if self.duality_gap is None:
            log_lik, objective = scores
        else:
            log_lik, objective, duality_gap = scores
            self.duality_gap.append(duality_gap)
        self.log_lik.append(log_lik)
        self.objective.append(objective)
 def __call__(self, emp_covs, n_samples, alpha, max_iter, tol, n, omega,
              omega_diff):
     if n >= 0:
         _, objective = group_sparse_scores(omega, n_samples, emp_covs,
                                            alpha)
         self.objective.append(objective)
def benchmark1():
    """Plot different quantities for varying alpha."""
    # Signals
    min_samples, max_samples = 100, 150  # train signals length
    n_var = 50
    n_tasks = 40
    density = 0.1
    random_state = np.random.RandomState(0)

    test_samples = 4000  # number of samples for test signals

    # Estimation
    n_alphas = 10
    max_iter = 200
    tol = 1e-3

    # Generate signals
    signals, precisions, topology = \
             testing.generate_group_sparse_gaussian_graphs(
        n_subjects=n_tasks, n_features=n_var, density=density,
        random_state=random_state, min_n_samples=min_samples,
        max_n_samples=max_samples)

    emp_covs, n_samples = empirical_covariances(signals)

    # Estimate precision matrices
    alpha_1, _ = compute_alpha_max(emp_covs, n_samples)
    alpha_0 = 1e-2 * alpha_1
    ## alpha_1 = 0.067
    ## alpha_0 = 0.044

    alphas = np.logspace(np.log10(alpha_0), np.log10(alpha_1), n_alphas)[::-1]

    parameters = joblib.Parallel(n_jobs=7, verbose=1)(
        joblib.delayed(group_sparse_covariance)(emp_covs, n_samples, alpha,
                                                max_iter=max_iter, tol=tol)
        for alpha in alphas)

    # Compute scores
    test_signals = testing.generate_signals_from_precisions(
        precisions, min_n_samples=test_samples, max_n_samples=test_samples + 1,
        random_state=random_state)

    test_emp_covs, _ = empirical_covariances(test_signals)
    del test_signals

    for params in parameters:
        params["ll_score"], params["pen_score"] = group_sparse_scores(
            params["precisions"], n_samples, test_emp_covs, params["alpha"])

    # Plot graphs
    alpha, ll_score, pen_score = get_series(
        parameters, ("alpha", "ll_score", "pen_score"))
    non_zero = [(p["precisions"][..., 0] != 0).sum() for p in parameters]

    pl.figure()
    pl.semilogx(alpha, ll_score, "-+", label="log-likelihood")
    pl.semilogx(alpha, pen_score, "-+", label="penalized LL")
    pl.xlabel("alpha")
    pl.ylabel("score")
    pl.grid()

    pl.figure()
    pl.semilogx(alpha, non_zero, "-+")
    pl.xlabel("alpha")
    pl.ylabel("non_zero")
    pl.grid()

    pl.figure()
    pl.loglog(alpha, non_zero, "-+")
    pl.xlabel("alpha")
    pl.ylabel("non_zero")
    pl.grid()

    pl.figure()
    pl.imshow(topology, interpolation="nearest")
    pl.title("true topology")

    ## precisions = get_series(parameters, ("precisions", ))
    ## for prec, alpha in zip(precisions, alpha):
    ##     pl.figure()
    ##     pl.imshow(prec[..., 0] != 0, interpolation="nearest")
    ##     pl.title(alpha)

    pl.show()
 def __call__(self, emp_covs, n_samples, alpha, max_iter, tol, n, omega,
              omega_diff):
     if n >= 0:
         _, objective = group_sparse_scores(omega, n_samples, emp_covs,
                                            alpha)
         self.objective.append(objective)