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()))
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')
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')