def test_negative_binomial_gradient_sparse_dispersed(): n = 10 random_state = np.random.RandomState(42) X = random_state.rand(n, 3) dis = euclidean_distances(X) alpha, beta = -3, 1 fdis = beta * dis**alpha fdis[np.isinf(fdis)] = 0 dispersion_estimated = fdis + fdis ** 2 p = fdis / (fdis + dispersion_estimated) # counts = random_state.negative_binomial(dispersion, 1 - p) # counts = np.triu(counts) counts = np.triu(fdis) counts[np.arange(len(counts)), np.arange(len(counts))] = 0 counts = sparse.coo_matrix(counts, dtype=float) _, mean, variance, _ = dispersion.compute_mean_variance( counts, np.array([counts.shape[0]])) mean, variance = mean[:-1], variance[:-1] d = dispersion.ExponentialDispersion() d.fit(mean, variance) gradient_sparse = negative_binomial_structure.negative_binomial_gradient( X, counts, dispersion=d) gradient_dense = negative_binomial_structure.negative_binomial_gradient( X, counts.toarray(), dispersion=d) assert_array_almost_equal(gradient_dense, gradient_sparse) assert_array_almost_equal( np.zeros(gradient_sparse.shape), gradient_sparse, -5)
def test_negative_binomial_gradient_sparse_dispersed(): n = 10 random_state = np.random.RandomState(42) X = random_state.rand(n, 3) dis = euclidean_distances(X) alpha, beta = -3, 1 fdis = beta * dis**alpha fdis[np.isinf(fdis)] = 1 dispersion = fdis + fdis ** 2 p = fdis / (fdis + dispersion) counts = random_state.negative_binomial(dispersion, 1 - p) counts = np.triu(counts) counts[np.arange(len(counts)), np.arange(len(counts))] = 0 counts = sparse.coo_matrix(counts, dtype=float) return True # from minorswing import dispersion mean, variance = dispersion.compute_mean_variance( counts, np.array([counts.shape[0]])) mean, variance = mean[:-1], variance[:-1] d = dispersion.DispersionPolynomial() d.fit(mean, variance) gradient_sparse = negative_binomial_structure.negative_binomial_gradient( X, counts, dispersion=d)
def test_negative_binomial_gradient_sparse(): n = 10 random_state = np.random.RandomState(42) X = random_state.rand(n, 3) dis = euclidean_distances(X) alpha, beta = -3, 1 counts = beta * dis ** alpha counts = np.triu(counts) counts[np.arange(len(counts)), np.arange(len(counts))] = 0 counts = sparse.coo_matrix(counts) gradient_sparse = negative_binomial_structure.negative_binomial_gradient( X, counts) rand_X = random_state.randn(*X.shape) assert_array_almost_equal(np.zeros(gradient_sparse.shape), gradient_sparse) rand_grad_sparse = negative_binomial_structure.negative_binomial_gradient( rand_X, counts) rand_grad_dense = negative_binomial_structure.negative_binomial_gradient( rand_X, counts.toarray()) assert_array_almost_equal(rand_grad_sparse, rand_grad_dense)
def test_negative_binomial_gradient_sparse(): n = 10 random_state = np.random.RandomState(42) X = random_state.rand(n, 3) dis = euclidean_distances(X) alpha, beta = -3, 1 counts = beta * dis ** alpha counts = np.triu(counts) counts[np.arange(len(counts)), np.arange(len(counts))] = 0 counts = sparse.coo_matrix(counts) gradient_sparse = negative_binomial_structure.negative_binomial_gradient( X, counts) assert_array_almost_equal(np.zeros(gradient_sparse.shape), gradient_sparse)