def test_joint_estimator_full(self):
        X = array([[0, 1], [1, 0], [1, 1]])
        y = array([[0, 1], [1, 0], [1, 0]])

        assert_array_approx_equal(
            joint_estimator_full(X, y),
            [[[.1667, .0], [.0833, .0833]], [[.0, .1667], [.0833, .0833]],
             [[.0, .0833], [.0833, .0]], [[.0833, .0], [.0, .0833]]],
            decimal=3)
        assert_array_approx_equal(
            joint_estimator_full(csr_matrix(X), csr_matrix(y)),
            [[[.1667, .0], [.0833, .0833]], [[.0, .1667], [.0833, .0833]],
             [[.0, .0833], [.0833, .0]], [[.0833, .0], [.0, .0833]]],
            decimal=3)
    def test_joint_estimator_full(self):
        X = array([[0, 1], [1, 0], [1, 1]])
        y = array([[0, 1], [1, 0], [1, 0]])

        assert_array_approx_equal(
            joint_estimator_full(X, y),
            [[[.1667, .0], [.0833, .0833]], [[.0, .1667], [.0833, .0833]],
             [[.0, .0833], [.0833, .0]], [[.0833, .0], [.0, .0833]]],
            decimal=3)
        assert_array_approx_equal(
            joint_estimator_full(csr_matrix(X), csr_matrix(y)),
            [[[.1667, .0], [.0833, .0833]], [[.0, .1667], [.0833, .0833]],
             [[.0, .0833], [.0833, .0]], [[.0833, .0], [.0, .0833]]],
            decimal=3)
def mutual_information(X, y):
    num_terms = X.shape[1]
    num_classes = y.shape[1]

    p_c = marginal_estimator(y, smoothing=True)
    p_t = marginal_estimator(X, smoothing=True)

    p_t_c = joint_estimator_full(X, y, smoothing=True)

    ig = zeros((num_terms))

    for i in xrange(num_terms):
        for j in xrange(num_classes):
            ig[i] += p_t_c[0][i, j] * log(p_t_c[0][i, j] / (p_t[i] * p_c[j]))
            ig[i] += p_t_c[1][i, j] * log(p_t_c[1][i, j] / (p_t[i] * (1 - p_c[j])))
            ig[i] += p_t_c[2][i, j] * log(p_t_c[2][i, j] / ((1 - p_t[i]) * p_c[j]))
            ig[i] += p_t_c[3][i, j] * log(p_t_c[3][i, j] / ((1 - p_t[i]) * (1 - p_c[j])))

    return ig
예제 #4
0
def mutual_information(X, y):
    num_terms = X.shape[1]
    num_classes = y.shape[1]

    p_c = marginal_estimator(y, smoothing=True)
    p_t = marginal_estimator(X, smoothing=True)

    p_t_c = joint_estimator_full(X, y, smoothing=True)

    ig = zeros((num_terms))

    for i in xrange(num_terms):
        for j in xrange(num_classes):
            ig[i] += p_t_c[0][i, j] * log(p_t_c[0][i, j] / (p_t[i] * p_c[j]))
            ig[i] += p_t_c[1][i, j] * log(p_t_c[1][i, j] / (p_t[i] *
                                                            (1 - p_c[j])))
            ig[i] += p_t_c[2][i, j] * log(p_t_c[2][i, j] /
                                          ((1 - p_t[i]) * p_c[j]))
            ig[i] += p_t_c[3][i, j] * log(p_t_c[3][i, j] / ((1 - p_t[i]) *
                                                            (1 - p_c[j])))

    return ig