def work(self): self.worked = True kwargs = dict( weights=self.weights, mus=self.mus, sigmas=self.sigmas, low=self.low, high=self.high, q=self.q, ) samples = GMM1(rng=self.rng, size=(self.n_samples, ), **kwargs) samples = np.sort(samples) edges = samples[::self.samples_per_bin] #print samples pdf = np.exp(GMM1_lpdf(edges[:-1], **kwargs)) dx = edges[1:] - edges[:-1] y = 1 / dx / len(dx) if self.show: plt.scatter(edges[:-1], y) plt.plot(edges[:-1], pdf) plt.show() err = (pdf - y)**2 print np.max(err) print np.mean(err) print np.median(err) if not self.show: assert np.max(err) < .1 assert np.mean(err) < .01 assert np.median(err) < .01
def test_mat_output(self): samples = GMM1([.9999, .0001], [0.0, 1.0], [0.000001, 0.000001], rng=self.rng, size=[40, 20]) assert samples.shape == (40, 20) assert -.001 < np.mean(samples) < .001, np.mean(samples) assert np.var(samples) < .0001, np.var(samples)
def test_weights(self): samples = GMM1([.9999, .0001], [0.0, 1.0], [0.000001, 0.000001], rng=self.rng, size=[1000]) assert samples.shape == (1000, ) #import matplotlib.pyplot as plt #plt.hist(samples) #plt.show() assert -.001 < np.mean(samples) < .001, np.mean(samples) assert np.var(samples) < .0001, np.var(samples)
def test_mus_make_variance(self): samples = GMM1([.5, .5], [0.0, 1.0], [0.000001, 0.000001], rng=self.rng, size=[1000]) print samples.shape #import matplotlib.pyplot as plt #plt.hist(samples) #plt.show() assert .45 < np.mean(samples) < .55, np.mean(samples) assert .2 < np.var(samples) < .3, np.var(samples)
def work(self, **kwargs): self.__dict__.update(kwargs) del kwargs self.worked = True gkwargs = dict( weights=self.weights, mus=self.mus, sigmas=self.sigmas, low=self.low, high=self.high, q=self.q, ) samples = GMM1(rng=self.rng, size=(self.n_samples, ), ** gkwargs) / self.q print 'drew', len(samples), 'samples' assert np.all(samples == samples.astype('int')) min_max = int(samples.min()), int(samples.max()) counts = np.bincount(samples.astype('int') - min_max[0]) print counts xcoords = np.arange(min_max[0], min_max[1] + 1) * self.q prob = np.exp(GMM1_lpdf(xcoords, **gkwargs)) assert counts.sum() == self.n_samples y = counts / float(self.n_samples) if self.show: import matplotlib.pyplot as plt plt.scatter(xcoords, y, c='r', label='empirical') plt.scatter(xcoords, prob, c='b', label='predicted') plt.legend() plt.title(str(self.show)) plt.show() err = (prob - y)**2 print np.max(err) print np.mean(err) print np.median(err) if self.show: raise nose.SkipTest() else: assert np.max(err) < .1 assert np.mean(err) < .01 assert np.median(err) < .01
def work(self, **kwargs): self.__dict__.update(kwargs) del kwargs self.worked = True gkwargs = dict( weights=self.weights, mus=self.mus, sigmas=self.sigmas, low=self.low, high=self.high, q=self.q, ) samples = old_div( GMM1(rng=self.rng, size=(self.n_samples, ), **gkwargs), self.q) print("drew", len(samples), "samples") assert np.all(samples == samples.astype("int")) min_max = int(samples.min()), int(samples.max()) counts = np.bincount(samples.astype("int") - min_max[0]) print(counts) xcoords = np.arange(min_max[0], min_max[1] + 1) * self.q prob = np.exp(GMM1_lpdf(xcoords, **gkwargs)) assert counts.sum() == self.n_samples y = old_div(counts, float(self.n_samples)) if self.show: plt.scatter(xcoords, y, c="r", label="empirical") plt.scatter(xcoords, prob, c="b", label="predicted") plt.legend() plt.title(str(self.show)) plt.show() err = (prob - y)**2 print(np.max(err)) print(np.mean(err)) print(np.median(err)) if self.show: raise nose.SkipTest() else: assert np.max(err) < 0.1 assert np.mean(err) < 0.01 assert np.median(err) < 0.01
def test_sigma_is_used_correctly(self): samples = GMM1([1], [0.0], [10.0], size=[1000], rng=self.rng) assert 9 < np.std(samples) < 11
def test_mu_is_used_correctly(self): assert np.allclose(10, GMM1([1], [10.0], [0.0000001], rng=self.rng))