Esempio n. 1
0
    def test_divergence(self):
        rv1d = rv_discrete([(0, ), (1, ), (2, )], pk=[0.3, 0.3, 0.4])
        rv2d = rv_discrete([(0, ), (1, ), (4, )], pk=[0.2, 0.4, 0.4])

        c1 = [(-2, 2), (1, 5)]
        c2 = [(-1, 4), (-3, 3)]
        # c_target = [(-1,2),(1,3)]
        rv1c = rv_continuous(KernelDensity().fit([[-1, 2]]), (2, ), c1)
        rv2c = rv_continuous(KernelDensity().fit([[1, 3]]), (2, ), c2)

        # the data makes no sense, this is just a pro forma test
        rv1 = rv_mixed(
            rv1c, rv1d, {
                (0, ): KernelDensity().fit([[-1, 2]]),
                (1, ): KernelDensity().fit([[-2, 3], [-1, 4]])
            })
        rv2 = rv_mixed(
            rv2c, rv2d, {
                (0, ): KernelDensity().fit([[-1, 2]]),
                (1, ): KernelDensity().fit([[-3, 4], [0, 0]])
            })

        divergence = rv1.divergence(rv2)
        self.assertEqual(type(divergence), np.float64)
        self.assertGreater(divergence, 0.0)
Esempio n. 2
0
    def test_divergence(self):
        rv1 = rv_discrete([(0, ), (1, ), (2, )], pk=[0.3, 0.3, 0.4])
        rv2 = rv_discrete([(0, ), (1, ), (4, )], pk=[0.2, 0.4, 0.4])

        pd_1 = rv1.score_samples([(0, ), (1, )])
        pd_2 = rv2.score_samples([(0, ), (1, )])
        divergence_target = rv1.divergence_from_distribution(pd_1, pd_2)
        divergence_is = rv1.divergence(rv2)

        self.assertEqual(divergence_is, divergence_target)
Esempio n. 3
0
    def test_common_coverage(self):
        rv1 = rv_discrete([(0, ), (1, ), (2, )], pk=[0.3, 0.3, 0.4])
        rv2 = rv_discrete([(0, ), (1, ), (4, )], pk=[0.2, 0.4, 0.4])

        coverage_is = rv1._common_coverage(rv2)
        coverage_reverse = rv2._common_coverage(rv1)
        coverage_target = np.array([(0, ), (1, )]).reshape(-1)

        self.assertTrue(
            np.array_equal(coverage_is, coverage_target),
            f"covarage_is {coverage_is} not equal to coverage_target {coverage_target}."
        )
        self.assertTrue(
            np.array_equal(coverage_is, coverage_reverse),
            f"covarage_is {coverage_is} not equal to coverage_target {coverage_reverse}."
        )
Esempio n. 4
0
    def test_common_coverage(self):
        rv1d = rv_discrete([(0, ), (1, ), (2, )], pk=[0.3, 0.3, 0.4])
        rv2d = rv_discrete([(0, ), (1, ), (4, )], pk=[0.2, 0.4, 0.4])

        c1 = [(-2, 2), (1, 5)]
        c2 = [(-1, 4), (-3, 3)]
        rv1c = rv_continuous(KernelDensity().fit([[0, 1]]), (2, ), c1)
        rv2c = rv_continuous(KernelDensity().fit([[0, 1]]), (2, ), c2)

        rv1 = rv_mixed(rv1c, rv1d, {(0, ): KernelDensity().fit([[1, 1]])})
        rv2 = rv_mixed(rv2c, rv2d, {(0, ): KernelDensity().fit([[1, 0]])})

        y_target = np.repeat([0, 1], 1000)

        x, y = rv1._common_coverage(rv2, 1000)
        self.assertEqual(x.shape[0], 2000)
        self.assertEqual(x.shape[1], 2)
        self.assertEqual(y.shape[0], x.shape[0])
        self.assertTrue(np.array_equal(y, y_target),
                        f"y {y} is not equal y_target {y_target}.")
Esempio n. 5
0
    def test_score_samples(self):
        xk = [(0, ), (1, )]
        pk = [0.6, 0.4]
        rv = rv_discrete(xk, pk, badvalue=0)

        x = [0, 0, 1, 1, 2]
        score_is = rv.score_samples(x)
        score_target = np.log(np.array([0.6, 0.6, 0.4, 0.4, 0]))

        self.assertTrue(np.array_equal(score_is, score_target),
                        f"P_is: {score_is} is not P_target: {score_target}.")
Esempio n. 6
0
    def test_pmf_scalar(self):
        xk = [(0, ), (1, )]
        pk = [0.6, 0.4]
        rv = rv_discrete(xk, pk, badvalue=0)

        x = [0, 0, 1, 1, 2]
        P_is = rv.pmf(x)
        P_target = np.array([0.6, 0.6, 0.4, 0.4, 0])

        self.assertTrue(np.array_equal(P_is, P_target),
                        f"P_is: {P_is} is not P_target: {P_target}.")
Esempio n. 7
0
    def test_get_cond_kdes_wrong_key(self):
        rv_x = rv_continuous(self.kde, (2, ))
        rv_y = rv_discrete(xk=[(0, ), (1, )], pk=[.5, .5])

        cond_kdes = {
            (0, ): KernelDensity(bandwidth=1.0),
            (1, ): KernelDensity(bandwidth=99.0)
        }
        rv = rv_mixed(rv_x, rv_y, cond_kdes)

        with self.assertRaises(KeyError):
            kde_is = rv._get_cond_kde(3)
Esempio n. 8
0
    def test_get_cond_kdes_from_tuple(self):
        rv_x = rv_continuous(self.kde, (2, ))
        rv_y = rv_discrete(xk=[(0, 0), (1, 0)], pk=[.5, .5])

        cond_kdes = {
            (0, 0): KernelDensity(bandwidth=1.0),
            (1, 0): KernelDensity(bandwidth=99.0)
        }
        rv = rv_mixed(rv_x, rv_y, cond_kdes)

        kde_is = rv._get_cond_kde((0, 0))
        kde_target = cond_kdes[(0, 0)]

        self.assertEqual(kde_is, kde_target)
Esempio n. 9
0
    def test_pdf_for_1d_discrete(self):
        rv_x = rv_continuous(self.kde, (2, ))
        rv_y = rv_discrete(xk=[(0, ), (1, )], pk=[.5, .5])

        cond_kdes = {(0, ): self.kde0, (1, ): self.kde1}
        rv = rv_mixed(rv_x, rv_y, cond_kdes)

        P_is = rv.pdf(x=[[0, 0], [0, 0]], y=[1, 0])
        P_target = [self.p_00 * 0.5, self.p_00 * 0.5]

        is_close = np.isclose(P_is, P_target, rtol=0.2)

        self.assertTrue(
            is_close.all(),
            f"P_is: {P_is} is not close enough to P_target: {P_target}. ")
Esempio n. 10
0
 def test_prob_of_invalid(self):
     xk = [(0, ), (1, )]
     pk = [0.6, 0.4]
     rv = rv_discrete(xk, pk)
     p = rv._prob_of(3)
     self.assertIs(p, rv.badvalue)
Esempio n. 11
0
 def test_prob_of_list(self):
     xk = [(0, ), (1, )]
     pk = [0.6, 0.4]
     rv = rv_discrete(xk, pk)
     p = rv._prob_of([0])
     self.assertIs(p, 0.6)
Esempio n. 12
0
 def test_prob_of_scalar(self):
     xk = [(0, ), (1, )]
     pk = [0.6, 0.4]
     rv = rv_discrete(xk, pk)
     p = rv._prob_of(0)
     self.assertEqual(p, 0.6)
Esempio n. 13
0
 def test_prob_of_tuple(self):
     xk = [(0, 1), (1, 0)]
     pk = [0.6, 0.4]
     rv = rv_discrete(xk, pk)
     p = rv._prob_of((0, 1))
     self.assertEqual(p, 0.6)
Esempio n. 14
0
 def test_xk_and_pk_dimensions(self):
     xk = [(0, 1), (1, 0), (1, 1)]
     pk = [0.6, 0.4]
     with self.assertRaises(ValueError):
         rv = rv_discrete(xk, pk)