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")
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()
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()
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()
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()
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()
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()
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)