def simplified_algo(R, iterations, warp=0): S = best_embedding_on_sphere(R, ndim=3) R_order = scale_score(R).astype('int16') for i in range(iterations): # @UnusedVariable C = np.dot(S.T, S) C_sorted = np.sort(C.flat) R = C_sorted[R_order] S = best_embedding_on_sphere(R, ndim=3) if warp > 0: base_D = distances_from_directions(S) diameter = base_D.max() min_ratio = 0.1 max_ratio = np.pi / diameter ratios = np.exp(np.linspace(np.log(min_ratio), np.log(max_ratio), warp)) scores = [] guesses = [] for ratio in ratios: Cwarp = cosines_from_distances(base_D * ratio) Sw = best_embedding_on_sphere(Cwarp, ndim=3) Cw_order = scale_score(cosines_from_directions(Sw)) scores.append(correlation_coefficient(Cw_order, R_order)) guesses.append(Sw) best = np.argmax(scores) print('Best warp: %d (%f)' % (best, ratios[best])) S = guesses[best] return S
def artificial(Y, true_S): if true_S is None: return None print('Computing correlation') true_D = distances_from_directions(true_S) def exponential_kernel(D, alpha): return np.exp(-D / alpha) R = exponential_kernel(true_D, alpha=0.52) return R.astype('float32')