def makeDataset(K=5, Nk=100, Nvec=None, VarMajor=1.0, VarMinorRatio=1.0 / 25, **kwargs): K = int(K) if Nvec is None: Nk = int(Nk) Nvec = Nk * np.ones(K) elif isinstance(Nvec, str): Nvec = Nvec.split(',') Nvec = np.asarray(Nvec, dtype=np.int32) # Create basic 2D cov matrix with major axis much longer than minor one VarMajor = float(VarMajor) VarMinorRatio = float(VarMinorRatio) SigmaBase = np.asarray([[VarMajor, 0], [0, VarMinorRatio * VarMajor]]) # Create several Sigmas by rotating this basic covariance matrix Z = [None for k in range(K)] X = [None for k in range(K)] for k in range(K): PRNG = np.random.RandomState(k) Sigma_k = rotateCovMat(SigmaBase, k * np.pi / K) Z[k] = k * np.ones(Nvec[k]) X[k] = PRNG.multivariate_normal([0, 0], Sigma_k, size=Nvec[k]) Z = np.hstack(Z) X = np.vstack(X) return bnpy.data.XData(X=X, TrueZ=Z)
def makeDataset(K=5, Nk=100, Nvec=None, **kwargs): K = int(K) if Nvec is None: Nk = int(Nk) Nvec = Nk * np.ones(K) elif isinstance(Nvec, str): Nvec = Nvec.split(',') Nvec = np.asarray(Nvec, dtype=np.int32) Z = [None for k in range(K)] X = [None for k in range(K)] for k in range(K): PRNG = np.random.RandomState(k) mu_k = 10 * PRNG.randn(2) Sigma_k = np.diag(PRNG.gamma(5, size=2) / 5.0) Sigma_k = rotateCovMat(Sigma_k, np.pi * PRNG.rand()) Z[k] = k * np.ones(Nvec[k]) X[k] = PRNG.multivariate_normal(mu_k, Sigma_k, size=Nvec[k]) Z = np.hstack(Z) X = np.vstack(X) return bnpy.data.XData(X=X, TrueZ=Z)
# Place means evenly spaced around a circle Rad = 1.0 ts = np.linspace(0, 2 * np.pi, K + 1) ts = ts[:-1] Mu = np.zeros((K, D)) Mu[:, 0] = np.cos(ts) Mu[:, 1] = np.sin(ts) # Create basic 2D cov matrix with major axis much longer than minor one V = 1.0 / 16.0 SigmaBase = np.asarray([[V, 0], [0, V / 100.0]]) # Create several Sigmas by rotating this basic covariance matrix Sigma = np.zeros((K, D, D)) for k in xrange(K): Sigma[k] = rotateCovMat(SigmaBase, k * np.pi / 4.0) # Precompute cholesky decompositions cholSigma = np.zeros(Sigma.shape) for k in xrange(K): cholSigma[k] = scipy.linalg.cholesky(Sigma[k]) ########################################################### Module util functions def sample_data_from_comp(k, Nk, PRNG): return Mu[k, :] + np.dot(cholSigma[k].T, PRNG.randn(D, Nk)).T def get_short_name(): ''' Return short string used in filepaths to store solutions '''
# Place means evenly spaced around a circle Rad = 1.0 ts = np.linspace(0, 2*np.pi, K+1) ts = ts[:-1] Mu = np.zeros( (K,D)) Mu[:,0] = np.cos(ts) Mu[:,1] = np.sin(ts) # Create basic 2D cov matrix with major axis much longer than minor one V = 1.0/16.0 SigmaBase = np.asarray([[ V, 0], [0, V/100.0]]) # Create several Sigmas by rotating this basic covariance matrix Sigma = np.zeros( (K,D,D) ) for k in xrange(K): Sigma[k] = rotateCovMat(SigmaBase, k*np.pi/4.0) # Precompute cholesky decompositions cholSigma = np.zeros( Sigma.shape ) for k in xrange( K ): cholSigma[k] = scipy.linalg.cholesky( Sigma[k] ) ########################################################### Module util functions def sample_data_from_comp( k, Nk, PRNG ): return Mu[k,:] + np.dot(cholSigma[k].T, PRNG.randn(D, Nk) ).T def get_short_name( ): ''' Return short string used in filepaths to store solutions ''' return 'AsteriskK8'