예제 #1
0
    def test_from_dict(self):
        """from_dict generates a new instance from its parameters."""
        # Setup
        copula = GaussianMultivariate()
        copula.fit(self.data)
        copula_dict = copula.to_dict()

        # Run
        new_copula = GaussianMultivariate.from_dict(copula_dict)

        # Asserts
        assert isinstance(new_copula, GaussianMultivariate)
        assert new_copula.columns == ['column1', 'column2', 'column3']
        assert len(new_copula.univariates) == 3

        for new_univariate, old_univariate in zip(copula.univariates, new_copula.univariates):
            assert new_univariate.to_dict() == old_univariate.to_dict()
예제 #2
0
    def test_from_dict(self):
        """ """
        # Setup
        covariance = [[
            1.006711409395973, -0.11010327176239865, 0.8776048563471857,
            0.823443255069628
        ],
                      [
                          -0.11010327176239865, 1.006711409395972,
                          -0.4233383520816991, -0.3589370029669186
                      ],
                      [
                          0.8776048563471857, -0.4233383520816991,
                          1.006711409395973, 0.9692185540781536
                      ],
                      [
                          0.823443255069628, -0.3589370029669186,
                          0.9692185540781536, 1.0067114093959735
                      ]]
        parameters = {
            'covariance': covariance,
            'distribs': {
                'feature_01': {
                    'mean': 5.843333333333334,
                    'std': 0.8253012917851409
                },
                'feature_02': {
                    'mean': 3.0540000000000003,
                    'std': 0.4321465800705435
                },
                'feature_03': {
                    'mean': 3.758666666666666,
                    'std': 1.7585291834055212
                },
                'feature_04': {
                    'mean': 1.1986666666666668,
                    'std': 0.7606126185881716
                }
            }
        }

        # Run
        copula = GaussianMultivariate.from_dict(parameters)

        # Check
        assert (copula.covariance == [[
            1.006711409395973, -0.11010327176239865, 0.8776048563471857,
            0.823443255069628
        ],
                                      [
                                          -0.11010327176239865,
                                          1.006711409395972,
                                          -0.4233383520816991,
                                          -0.3589370029669186
                                      ],
                                      [
                                          0.8776048563471857,
                                          -0.4233383520816991,
                                          1.006711409395973, 0.9692185540781536
                                      ],
                                      [
                                          0.823443255069628,
                                          -0.3589370029669186,
                                          0.9692185540781536,
                                          1.0067114093959735
                                      ]]).all()
        for name, distrib in copula.distribs.items():
            assert copula.distribs[name].to_dict(
            ) == parameters['distribs'][name]

        # This isn't to check the sampling, but that the copula is able to run.
        assert copula.sample(10).all().all()
예제 #3
0
    def test_from_dict(self):
        """from_dict generates a new instance from its parameters."""
        # Setup
        covariance = [[
            1.006711409395973, -0.11010327176239865, 0.8776048563471857,
            0.823443255069628
        ],
                      [
                          -0.11010327176239865, 1.006711409395972,
                          -0.4233383520816991, -0.3589370029669186
                      ],
                      [
                          0.8776048563471857, -0.4233383520816991,
                          1.006711409395973, 0.9692185540781536
                      ],
                      [
                          0.823443255069628, -0.3589370029669186,
                          0.9692185540781536, 1.0067114093959735
                      ]]
        parameters = {
            'covariance':
            covariance,
            'fitted':
            True,
            'type':
            'copulas.multivariate.gaussian.GaussianMultivariate',
            'distribution':
            'copulas.univariate.gaussian.GaussianUnivariate',
            'columns':
            ['feature_01', 'feature_02', 'feature_03', 'feature_04'],
            'univariates': [{
                'type': 'copulas.univariate.gaussian.GaussianUnivariate',
                'mean': 5.843333333333334,
                'std': 0.8253012917851409,
                'fitted': True,
            }, {
                'type': 'copulas.univariate.gaussian.GaussianUnivariate',
                'mean': 3.0540000000000003,
                'std': 0.4321465800705435,
                'fitted': True,
            }, {
                'type': 'copulas.univariate.gaussian.GaussianUnivariate',
                'mean': 3.758666666666666,
                'std': 1.7585291834055212,
                'fitted': True,
            }, {
                'type': 'copulas.univariate.gaussian.GaussianUnivariate',
                'mean': 1.1986666666666668,
                'std': 0.7606126185881716,
                'fitted': True,
            }]
        }

        # Run
        copula = GaussianMultivariate.from_dict(parameters)

        # Check
        assert (copula.covariance == covariance).all()

        for a, b in zip(parameters['columns'], copula.columns):
            assert a == b

        for a, b in zip(parameters['univariates'], copula.univariates):
            assert a == b.to_dict()

        # This isn't to check the sampling, but that the copula is able to run.
        assert copula.sample(10).all().all()