def calc_consistency(fitness_vecs): ''' Calculate the consistency of trial by the fitness_vectors of its sessions: consistency = ratio of non-outlier vectors Properties: - outliers are calculated using MAD modified z-score - if all the fitness vectors are zero, consistency = 0 - works for all sorts of session fitness vectors, with the standard scale ''' if ~np.any(fitness_vecs): # no consistency if vectors all 0 consistency = 0 else: is_outlier_arr = util.is_outlier(fitness_vecs) consistency = (~is_outlier_arr).sum() / len(is_outlier_arr) return consistency
def calc_consistency(aeb_fitness_df): ''' Calculate the consistency of trial by the fitness_vectors of its sessions: consistency = ratio of non-outlier vectors **Properties:** - outliers are calculated using MAD modified z-score - if all the fitness vectors are zero or all strength are zero, consistency = 0 - works for all sorts of session fitness vectors, with the standard scale When an agent fails to achieve standard strength, it is meaningless to measure consistency or give false interpolation, so consistency is 0. ''' fitness_vecs = aeb_fitness_df.values if ~np.any(fitness_vecs) or ~np.any(aeb_fitness_df['strength']): # no consistency if vectors all 0 consistency = 0. elif len(fitness_vecs) == 2: # if only has 2 vectors, check norm_diff diff_norm = np.linalg.norm(np.diff(fitness_vecs, axis=0)) / np.linalg.norm(np.ones(len(fitness_vecs[0]))) consistency = diff_norm <= NOISE_WINDOW else: is_outlier_arr = util.is_outlier(fitness_vecs) consistency = (~is_outlier_arr).sum() / len(is_outlier_arr) return consistency
def test_is_outlier(vec, res): assert np.array_equal(util.is_outlier(vec), res)