def test_symmetrical_mi_zero(): zero_mi_funcs = [zero_mi_np, zero_mi_ra, zero_mi_list] for a, n_states in (f() for f in zero_mi_funcs): mi = mutual_info.mi_matrix(a, a, n_states, n_states) assert_allclose(np.diag(mi), 0.86114, atol=0.1) mi[np.diag_indices_from(mi)] = 0 assert_allclose(mi, 0, atol=1e-3)
def test_asymmetrical_mi_zero(): zero_mi_funcs = [zero_mi_np, zero_mi_ra, zero_mi_list] for gen_f in zero_mi_funcs: a, n_a = gen_f() b, n_b = gen_f() mi = mutual_info.mi_matrix(a, b, n_a, n_b) assert_allclose(np.diag(mi), 0, atol=0.1) mi[np.diag_indices_from(mi)] = 0 assert_allclose(mi, 0, atol=1e-3)
def test_symmetrical_mi_nonzero(): # test that the MI matrix for sets of uncorrelated things results # in zero MI nonzero_mi_funcs = [nonzero_mi_np, nonzero_mi_ra, nonzero_mi_list] for a, n_states in (f() for f in nonzero_mi_funcs): mi = mutual_info.mi_matrix(a, a, n_states, n_states) assert_almost_equal(mi[-1, -2], 0.86114, decimal=3) mi[-1, -2] = mi[-2, -1] = 0 assert_almost_equal(np.diag(mi), 0.86114, decimal=2) mi[np.diag_indices_from(mi)] = 0 assert_allclose(mi, 0, atol=1e-3)
def test_symmetrical_mi_nonzero_int_shape_spec(): # test that when we use an integer (rather than a list of integers) # that we correctly assume that the integer is just repeated for all # of the various features. nonzero_mi_funcs = [nonzero_mi_np, nonzero_mi_ra, nonzero_mi_list] for a, n_states in (f() for f in nonzero_mi_funcs): mi = mutual_info.mi_matrix(a, a, 5, 5) assert_almost_equal(mi[-1, -2], 0.86114, decimal=3) mi[-1, -2] = mi[-2, -1] = 0 assert_almost_equal(np.diag(mi), 0.86114, decimal=2) mi[np.diag_indices_from(mi)] = 0 assert_allclose(mi, 0, atol=1e-3)
def test_asymmetrical_mi_nonzero(): # test that the MI matrix for sets of uncorrelated things results # in zero MI, but on asymmetrical data, i.e. a[i] != b[i] zero_mi_funcs = [zero_mi_np, zero_mi_ra, zero_mi_list] for gen_f in zero_mi_funcs: print('checking', gen_f.__name__) a, n_a = gen_f() b, n_b = gen_f() for r_a, r_b in zip(a, b): r_a[:, 0] = r_b[:, 3] mi = mutual_info.mi_matrix(a, b, n_a, n_b) assert_almost_equal(mi[0, 3], 0.86114, decimal=3) mi[3, 0] = mi[0, 3] = 0 assert_allclose(mi, 0, atol=1e-2)