def test_update_mean_cov_L_lmbda_converges_to_weighted_mean_and_cov(): N_init = 10 N = 10000 D = 2 X = np.random.randn(N, D) weights = np.random.rand(N) old_mean = np.average(X[:N_init], axis=0, weights=weights[:N_init]) old_cov_L = np.linalg.cholesky(np.cov(X[:N_init].T, ddof=0)) sum_old_weights = np.sum(weights[:N_init]) lmbdas = weights_to_lmbdas(sum_old_weights, weights[N_init:]) mean, cov_L = update_mean_cov_L_lmbda(X[N_init:], old_mean, old_cov_L, lmbdas) full_mean = np.average(X, axis=0, weights=weights) # the above method uses N rather than N-1 to normalise covariance (biased) try: full_cov = np.cov(X.T, ddof=0, aweights=weights) except TypeError: raise SkipTest("Numpy's cov method does not support aweights keyword.") cov = np.dot(cov_L, cov_L.T) assert_allclose(full_mean, mean) assert_allclose(full_cov, cov, atol=1e-2)
def test_update_mean_cov_L_lmbda_converges_to_weighted_mean_and_cov(): N_init = 10 N = 10000 D = 2 X = np.random.randn(N, D) weights = np.random.rand(N) old_mean = np.average(X[:N_init], axis=0, weights=weights[:N_init]) old_cov_L = np.linalg.cholesky(np.cov(X[:N_init].T, ddof=0)) sum_old_weights = np.sum(weights[:N_init]) lmbdas = weights_to_lmbdas(sum_old_weights, weights[N_init:]) mean, cov_L = update_mean_cov_L_lmbda(X[N_init:], old_mean, old_cov_L, lmbdas) full_mean = np.average(X, axis=0, weights=weights) # the above method uses N rather than N-1 to normalise covariance (biased) try: full_cov = np.cov(X.T, ddof=0, aweights=weights) except TypeError: raise SkipTest("Numpy's cov method does not support aweights keyword.") cov = np.dot(cov_L, cov_L.T) assert_allclose(full_mean, mean, atol=1e-2) assert_allclose(full_cov, cov, atol=1e-2)
def test_update_mean_cov_L_lmbda_converges_to_mean_and_cov(): N_init = 10 N = 10000 D = 2 X = np.random.randn(N, D) weights = np.ones(N) old_mean = np.mean(X[:N_init], axis=0) old_cov_L = np.linalg.cholesky(np.cov(X[:N_init].T, ddof=0)) sum_old_weights = np.sum(weights[:N_init]) lmbdas = weights_to_lmbdas(sum_old_weights, weights[N_init:]) mean, cov_L = update_mean_cov_L_lmbda(X[N_init:], old_mean, old_cov_L, lmbdas) full_mean = np.mean(X, axis=0) # the above method uses N rather than N-1 to normalise covariance (biased) full_cov = np.cov(X.T, ddof=0) cov = np.dot(cov_L, cov_L.T) assert_allclose(full_mean, mean) assert_allclose(full_cov, cov, atol=1e-3)
def test_update_mean_cov_L_lmbda_converges_to_mean_and_cov(): N_init = 10 N = 10000 D = 2 X = np.random.randn(N, D) weights = np.ones(N) old_mean = np.mean(X[:N_init], axis=0) old_cov_L = np.linalg.cholesky(np.cov(X[:N_init].T, ddof=0)) sum_old_weights = np.sum(weights[:N_init]) lmbdas = weights_to_lmbdas(sum_old_weights, weights[N_init:]) mean, cov_L = update_mean_cov_L_lmbda(X[N_init:], old_mean, old_cov_L, lmbdas) full_mean = np.mean(X, axis=0) # the above method uses N rather than N-1 to normalise covariance (biased) full_cov = np.cov(X.T, ddof=0) cov = np.dot(cov_L, cov_L.T) assert_allclose(full_mean, mean) assert_allclose(full_cov, cov, atol=1e-3)