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 spearman(a, b): ao = scale_score(a) bo = scale_score(b) return correlation_coefficient(ao, bo)