Esempio n. 1
0
    def test2DCovarianceMatrix(self):
        # prepare data
        C = np.array([[0.1, 0.08, 0.02], [0.08, 0.1, 0.02], [0.02, 0.02, 0.1]]) / 10.

        U = dists.MultivariateNormal([0.5, 0.5, 0.5], C, 0, 1)
        samples = U.rvs(20000)
        dist = KDEDist(samples,
                       kernelType=KernelType_EPANECHNIKOV,
                       bounds=U.getBounds())

        # print the results
        self.assertTrue(np.linalg.norm(C - dist.cov()) < 1e-2, "KDE cov wrong")
        self.assertTrue(np.linalg.norm(np.corrcoef(samples.T) - dist.corrcoeff()) < 1e-1, "KDE corrcoef wrong")
Esempio n. 2
0
    def test2DPPF(self):
        # prepare data
        C = np.array([[0.1, 0.08], [0.08, 0.1]]) / 10.
        U = dists.MultivariateNormal([0.5, 0.5], C, 0, 1)

        train_samples = U.rvs(1000)

        fig = plt.figure()
        plotDensity2d(U)
        plt.title('true density')
        fig.show()

        dist = SGDEdist.byLearnerSGDEConfig(train_samples,
                                            config={
                                                "grid_level": 5,
                                                "grid_type": "linear",
                                                "refinement_numSteps": 0,
                                                "refinement_numPoints": 10,
                                                "regularization_type":
                                                "Laplace",
                                                "crossValidation_lambda":
                                                0.000562341,
                                                "crossValidation_enable":
                                                False,
                                                "crossValidation_kfold": 5,
                                                "crossValidation_silent": True
                                            },
                                            bounds=U.getBounds())
        fig = plt.figure()
        plotDensity2d(dist)
        plt.title('estimated SGDE density')
        fig.show()

        samples = dists.J([dists.Uniform(0, 1), dists.Uniform(0, 1)]).rvs(1000)

        fig = plt.figure()
        plt.plot(samples[:, 0], samples[:, 1], "o ")
        plt.title('uniformly drawn samples')
        plt.xlim(0, 1)
        plt.ylim(0, 1)
        fig.show()

        transformed_samples = dist.ppf(samples)

        fig = plt.figure()
        plt.plot(transformed_samples[:, 0], transformed_samples[:, 1], "o ")
        plt.title('transformed samples')
        plt.xlim(0, 1)
        plt.ylim(0, 1)
        fig.show()
        plt.show()
Esempio n. 3
0
    def test2DCDFandPPF(self):
        # prepare data
        C = np.array([[0.1, 0.08], [0.08, 0.1]]) / 10.
        U = dists.MultivariateNormal([0.5, 0.5], C, 0, 1)
        train_samples = U.rvs(1000)

        fig = plt.figure()
        plotDensity2d(U)
        plt.title('true density')
        fig.show()

        dist = KDEDist(train_samples, bounds=U.getBounds())

        fig = plt.figure()
        plotDensity2d(dist)
        plt.title('estimated KDE density')
        fig.show()

        samples = dists.J([dists.Uniform(0, 1),
                           dists.Uniform(0, 1)]).rvs(1000)

        fig = plt.figure()
        plt.plot(samples[:, 0], samples[:, 1], "o ")
        plt.title('u space')
        plt.xlim(0, 1)
        plt.ylim(0, 1)
        fig.show()

        transformed_samples = dist.ppf(samples)

        fig = plt.figure()
        plt.plot(transformed_samples[:, 0], transformed_samples[:, 1], "o ")
        plt.title('x space (transformed)')
        plt.xlim(0, 1)
        plt.ylim(0, 1)
        fig.show()

        samples = dist.cdf(transformed_samples)

        fig = plt.figure()
        plt.plot(samples[:, 0], samples[:, 1], "o ")
        plt.title('u space (transformed)')
        plt.xlim(0, 1)
        plt.ylim(0, 1)
        fig.show()

        plt.show()
Esempio n. 4
0
    def tesst2DPPF(self):
        # prepare data
        numDims = 2
        mean = 0.5
        C = np.array([[0.1, 0.08], [0.08, 0.1]]) / 10.
        stddev = np.sqrt(C[0, 0])
        U = dists.MultivariateNormal(np.ones(numDims) * mean, C, 0, 1)

        dist = NatafDist.normal_marginals(mean,
                                          stddev,
                                          C,
                                          bounds=U.getBounds())

        fig = plt.figure()
        plotDensity2d(U)
        plt.title('true density')
        fig.show()

        fig = plt.figure()
        plotDensity2d(dist)
        plt.title('estimated Nataf density')
        fig.show()

        samples = dists.J([dists.Uniform(0, 1), dists.Uniform(0, 1)]).rvs(1000)

        fig = plt.figure()
        plt.plot(samples[:, 0], samples[:, 1], "o ")
        plt.title('uniformly drawn samples')
        plt.xlim(0, 1)
        plt.ylim(0, 1)
        fig.show()

        transformed_samples = dist.ppf(samples)

        fig = plt.figure()
        plt.plot(transformed_samples[:, 0], transformed_samples[:, 1], "o ")
        plt.title('transformed samples')
        plt.xlim(0, 1)
        plt.ylim(0, 1)
        fig.show()

        plt.show()
Esempio n. 5
0
    def test2DMarginalize(self):
        # prepare data
        C = np.array([[0.2, 0.08], [0.08, 0.2]]) / 10.
        U = dists.MultivariateNormal([0.5, 0.5], C, 0, 1)

        fig = plt.figure()
        plotDensity2d(U)
        plt.title('true density')
        fig.show()

        samples = U.rvs(1000)
        kde = KDEDist(samples)

        #         fig = plt.figure()
        #         plotDensity2d(kde)
        #         plt.title('estimated KDE density')
        #         fig.show()

        # marginalize

        opMarg = createOperationDensityMarginalizeKDE(kde.dist)
        kdeX = kde.marginalizeToDimX(0)
        kdeY = kde.marginalizeToDimX(1)

        fig = plt.figure()
        plotDensity1d(kdeX)
        plotDensity1d(kdeY)
        plt.title('margToDimX denstities')
        fig.show()

        kdeX = kde.marginalize(1)
        kdeY = kde.marginalize(0)

        fig = plt.figure()
        plotDensity1d(kdeX)
        plotDensity1d(kdeY)
        plt.title('doMarginalize denstities')
        fig.show()

        plt.show()
Esempio n. 6
0
    def test2DPPF(self):
        # prepare data
        C = np.array([[0.1, 0.08], [0.08, 0.1]]) / 10.
        U = dists.MultivariateNormal([0.5, 0.5], C, 0, 1)

        fig = plt.figure()
        plotDensity2d(U)
        plt.title('true density')
        fig.show()

        dist = KDEDist(U.rvs(1000),
                       kernelType=KernelType_EPANECHNIKOV,
                       bounds=U.getBounds())

        fig = plt.figure()
        plotDensity2d(dist)
        plt.title('estimated KDE density')
        fig.show()

        samples = dists.J([dists.Uniform(0, 1),
                           dists.Uniform(0, 1)]).rvs(1000)

        fig = plt.figure()
        plt.plot(samples[:, 0], samples[:, 1], "o ")
        plt.title('uniformly drawn samples')
        plt.xlim(0, 1)
        plt.ylim(0, 1)
        fig.show()

        transformed_samples = dist.ppf(samples)

        fig = plt.figure()
        plt.plot(transformed_samples[:, 0], transformed_samples[:, 1], "o ")
        plt.title('transformed samples')
        plt.xlim(0, 1)
        plt.ylim(0, 1)
        fig.show()

        plt.show()
Esempio n. 7
0
    def test2DCovarianceMatrix(self):
        # prepare data
        np.random.seed(1234567)
        C = np.array([[0.3, 0.09], [0.09, 0.3]]) / 10.

        U = dists.MultivariateNormal([0.5, 0.5], C, 0, 1)
        samples = U.rvs(2000)
        kde = KDEDist(samples)

        sgde = SGDEdist.byLearnerSGDEConfig(
            samples,
            bounds=U.getBounds(),
            config={
                "grid_level": 5,
                "grid_type": "linear",
                "grid_maxDegree": 1,
                "refinement_numSteps": 0,
                "refinement_numPoints": 10,
                "solver_threshold": 1e-10,
                "solver_verbose": False,
                "regularization_type": "Laplace",
                "crossValidation_lambda": 3.16228e-06,
                "crossValidation_enable": False,
                "crossValidation_kfold": 5,
                "crossValidation_silent": False,
                "sgde_makePositive": True,
                "sgde_makePositive_candidateSearchAlgorithm": "joined",
                "sgde_makePositive_interpolationAlgorithm": "setToZero",
                "sgde_generateConsistentGrid": True,
                "sgde_unitIntegrand": True
            })

        sgde_x1 = sgde.marginalizeToDimX(0)
        sgde_x2 = sgde.marginalizeToDimX(1)

        plt.figure()
        plotDensity1d(sgde_x1, label="x1")
        plotDensity1d(sgde_x2, label="x2")
        plt.title(
            "mean: x1=%g, x2=%g; var: x1=%g, x2=%g" %
            (sgde_x1.mean(), sgde_x2.mean(), sgde_x1.var(), sgde_x2.var()))
        plt.legend()

        jsonStr = sgde.toJson()
        jsonObject = json.loads(jsonStr)
        sgde = Dist.fromJson(jsonObject)

        fig = plt.figure()
        plotDensity2d(U, addContour=True)
        plt.title("analytic")

        fig = plt.figure()
        plotDensity2d(kde, addContour=True)
        plt.title("kde")

        fig = plt.figure()
        plotDensity2d(sgde, addContour=True)
        plt.title("sgde (I(f) = %g)" % (doQuadrature(sgde.grid, sgde.alpha), ))

        # print the results
        print("E(x) ~ %g ~ %g" % (kde.mean(), sgde.mean()))
        print("V(x) ~ %g ~ %g" % (kde.var(), sgde.var()))
        print("-" * 60)

        print(kde.cov())
        print(sgde.cov())

        self.assertTrue(np.linalg.norm(C - kde.cov()) < 1e-2, "KDE cov wrong")
        self.assertTrue(
            np.linalg.norm(np.corrcoef(samples.T) - kde.corrcoeff()) < 1e-1,
            "KDE corrcoef wrong")
        plt.show()
Esempio n. 8
0
    def test2DCDFandPPF(self, plot=True):
        # prepare data
        C = np.array([[0.1, 0.08], [0.08, 0.1]]) / 10.
        U = dists.MultivariateNormal([0.5, 0.5], C, 0, 1)
        train_samples = U.rvs(1000)

        if plot:
            fig = plt.figure()
            plotDensity2d(U)
            plt.title('true density')
            fig.show()

        dist = SGDEdist.byLearnerSGDEConfig(train_samples,
                                            config={
                                                "grid_level": 5,
                                                "grid_type":
                                                "polyClenshawCurtis",
                                                "refinement_numSteps": 0,
                                                "refinement_numPoints": 10,
                                                "regularization_type":
                                                "Laplace",
                                                "crossValidation_lambda":
                                                0.000562341,
                                                "crossValidation_enable":
                                                False,
                                                "crossValidation_kfold": 5,
                                                "crossValidation_silent": True,
                                                "sgde_makePositive": False
                                            },
                                            bounds=U.getBounds())

        if plot:
            fig = plt.figure()
            plotDensity2d(dist)
            plt.title('estimated SGDE density')
            fig.show()

        samples = dists.J([dists.Uniform(0, 1), dists.Uniform(0, 1)]).rvs(500)

        if plot:
            fig = plt.figure()
            plt.plot(samples[:, 0], samples[:, 1], "o ")
            plt.title('u space')
            plt.xlim(0, 1)
            plt.ylim(0, 1)
            fig.show()
        else:
            print("-" * 80)
            print(samples)

        transformed_samples = dist.ppf(samples, shuffle=False)

        if plot:
            fig = plt.figure()
            plt.plot(transformed_samples[:, 0], transformed_samples[:, 1],
                     "o ")
            plt.title('x space (transformed)')
            plt.xlim(0, 1)
            plt.ylim(0, 1)
            fig.show()
        else:
            print("-" * 80)
            print(transformed_samples)

        samples = dist.cdf(transformed_samples, shuffle=False)

        if plot:
            fig = plt.figure()
            plt.plot(samples[:, 0], samples[:, 1], "o ")
            plt.title('u space (transformed)')
            plt.xlim(0, 1)
            plt.ylim(0, 1)
            fig.show()

            plt.show()
        else:
            print("-" * 80)
            print(samples)