コード例 #1
0
def print_evaluation(X, distance, Y, subsample_size=500):
    idx = np.random.permutation(len(X))[:subsample_size]
    D_sub = distance(X[idx], X[idx])
    DY_sub = distance_matrix(Y[idx], Y[idx])
    print("  Stress = %s" % stress(D_sub.flatten(), DY_sub.flatten()))
    print("  Correlation = %s" % correlation(D_sub.flatten(), DY_sub.flatten()))
    print("  Distortion = %s" % distortion(D_sub.flatten(), DY_sub.flatten()))
コード例 #2
0
ファイル: experiment.py プロジェクト: katerynak/embeddings
def lipschitz_eval(s, original_dist_matrixes, idxs, exec_number, track):
    """
    function evaluates stress, correlation distance, distortion and embedding computation time
     given array of lipschitz embedding of streamlines s
    :param s: input data
    :param original_dist_matrixes: array of matrixes of stress_samples dimensions
    :param idx: array of indexes of data used for calculation of original_dist_matrixes
    :param eval_seeds: list of seeds used for data sampling
    :return:
    """

    from lipschitz import compute_lipschitz

    results_dir = "../eval_results/lipschitz/"
    if not os.path.exists(results_dir):
        os.makedirs(results_dir)

    distance = partial(parallel_distance_computation,
                       distance=bundles_distances_mam)

    k = [2, 4, 8, 10, 12, 20, 30, 40]

    for n in k:

        resFileName = "n_reference_objects_{0}__exec_num_{1}__n_streamlines_{2}__track_{3}".format(
            n, exec_number, len(idxs[0]), track)

        if os.path.isfile(results_dir + resFileName):
            continue

        start_time = time.time()
        embeddings, _ = compute_lipschitz(s, distance, linial1994=False, k=n)
        comp_time = time.time() - start_time

        for (idx, original_dist) in zip(idxs, original_dist_matrixes):

            embedded_dist = pdist(embeddings[idx], 'euclidean')
            emb_stress_norm = stress_normalized(dist_embedd=embedded_dist,
                                                dist_original=original_dist)
            emb_stress = stress(dist_embedd=embedded_dist,
                                dist_original=original_dist)
            emb_correlation = correlation(embedded_dist.flatten(),
                                          original_dist.flatten())
            emb_distortion = distortion(dist_embedd=embedded_dist,
                                        dist_original=original_dist)
            emb_rel_dist = relative_distance_error(dist_embedd=embedded_dist,
                                                   dist_original=original_dist)

            with open(results_dir + resFileName, 'w') as f:
                f.write('rel_dist\t' + str(emb_rel_dist) + '\n')
                f.write('stress\t' + str(emb_stress) + '\n')
                f.write('stress_norm\t' + str(emb_stress_norm) + '\n')
                f.write('correlation\t' + str(emb_correlation) + '\n')
                f.write('distortion\t' + str(emb_distortion) + '\n')
                f.write('n_streamlines\t' + str(len(s)) + '\n')
                f.write('eval_streamlines\t' + str(len(idx)) + '\n')
                f.write('exec_time\t' + str(comp_time) + '\n')
                f.write('n_reference_objects\t' + str(n) + '\n')
コード例 #3
0
ファイル: experiment.py プロジェクト: katerynak/embeddings
def resampling_eval(s, original_dist_matrixes, idxs, exec_number, track):
    """
    function evaluates stress, correlation distance, distortion and embedding computation time
     given array of resampling embedding of streamlines s
    :param s: input data
    :param original_dist_matrixes: array of matrixes of stress_samples dimensions
    :param idx: array of indexes of data used for calculation of original_dist_matrixes
    :return:
    """

    results_dir = "../eval_results/resampling/"
    if not os.path.exists(results_dir):
        os.makedirs(results_dir)

    sampling_n = [2, 4, 8, 10, 12, 20, 30, 40]
    for n in sampling_n:

        resFileName = "resampling_pts_{0}__exec_num_{1}__eval_streamlines_{2}__emb_streamlines{3}__track_{4}".format(
            n, exec_number, len(idxs[0]), len(s), track)
        if os.path.isfile(results_dir + resFileName):
            continue

        start_time = time.time()
        embeddings = set_number_of_points(s, nb_points=n)
        comp_time = time.time() - start_time

        for (idx, original_dist) in zip(idxs, original_dist_matrixes):

            embedded_dist = pdist(
                (np.asarray(embeddings[idx], dtype=object).reshape(
                    len(idx), -1)), 'euclidean')
            emb_stress = stress(dist_embedd=embedded_dist,
                                dist_original=original_dist)
            emb_stress_norm = stress_normalized(dist_embedd=embedded_dist,
                                                dist_original=original_dist)
            emb_correlation = correlation(embedded_dist.flatten(),
                                          original_dist.flatten())
            emb_distortion = distortion(dist_embedd=embedded_dist,
                                        dist_original=original_dist)
            emb_rel_dist = relative_distance_error(dist_embedd=embedded_dist,
                                                   dist_original=original_dist)

            #write results to file

            with open(results_dir + resFileName, 'w') as f:
                f.write('stress\t' + str(emb_stress) + '\n')
                f.write('stress_norm\t' + str(emb_stress_norm) + '\n')
                f.write('correlation\t' + str(emb_correlation) + '\n')
                f.write('distortion\t' + str(emb_distortion) + '\n')
                f.write('n_streamlines\t' + str(len(s)) + '\n')
                f.write('eval_streamlines\t' + str(len(idx)) + '\n')
                f.write('exec_time\t' + str(comp_time) + '\n')
                f.write('resampling_points\t' + str(n) + '\n')