예제 #1
0
파일: gp_clvm.py 프로젝트: xuxaxy/scLVM
	def optimize(self,params0):
		""" initialize """
		self.gp.setParams(params0)
		self.cache['params0'] = params0 
		self.cache['lml0'] = self.gp.LML()
		self.cache['lmlGrad0'] = self.gp.LMLgrad()
		""" optimize """
		gpopt = limix.CGPopt(self.gp)
		conv = gpopt.opt()
		""" store stuff """
		self.cache['lml'] = self.gp.LML()
		self.cache['lmlGrad'] = self.gp.LMLgrad()
		self.cache['params'] = self.gp.getParams()
		self.cache['X'] = self.Ca.getParams().reshape((self.N,self.k),order='F')
		self.cache['K'] = self.Ca.K()
		if self.interaction:
			self.cache['Ki'] = self.Ca.K()*self.Cb2.K()
		else:
			self.cache['Ki'] = None
		self.cache['var'] = {}
		self.cache['var']['K0'] = self.C0.getParams()[0]**2
		self.cache['var']['K']  = self.cache['K'].diagonal().mean()
		if self.interaction:
			self.cache['var']['Ki'] = self.cache['Ki'].diagonal().mean()
		self.cache['var']['noise'] = self.ll.getParams()[0]**2
		self.cache['K']  /= self.cache['var']['K']
		if self.interaction:
			self.cache['Ki'] /= self.cache['var']['Ki']
		return conv
예제 #2
0
파일: FastVDMM.py 프로젝트: mattions/limix
    def fit(self, Params0=None, grad_threshold=1e-2):
        """
        fit a variance component model with the predefined design and the initialization and returns all the results
        """

        # GPVD initialization
        lik = limix.CLikNormalNULL()
        # Initial Params
        if Params0 == None:
            n_params = self.C1.getNumberParams()
            n_params += self.C2.getNumberParams()
            Params0 = SP.rand(n_params)
        # MultiGP Framework
        covar = []
        gp = []
        mean = []
        for i in range(self.N):
            covar.append(limix.CLinCombCF())
            covar[i].addCovariance(self.C1)
            covar[i].addCovariance(self.C2)
            coeff = SP.array([self.eigen[i], 1])
            covar[i].setCoeff(coeff)
            mean.append(limix.CLinearMean(self.Yt[:, i], SP.eye(self.P)))
        gpVD = limix.CGPvarDecomp(covar[0], lik, mean[0], SP.ones(self.N),
                                  self.P, self.Yt, Params0)
        for i in range(self.N):
            gp.append(limix.CGPbase(covar[i], lik, mean[i]))
            gp[i].setY(self.Yt[:, i])
            gpVD.addGP(gp[i])

        # Optimization
        gpVD.initGPs()
        gpopt = limix.CGPopt(gpVD)
        LML0 = -1.0 * gpVD.LML()
        start_time = time.time()
        conv = gpopt.opt()
        time_train = time.time() - start_time
        LML = -1.0 * gpVD.LML()
        LMLgrad = SP.linalg.norm(gpVD.LMLgrad()['covar'])
        Params = gpVD.getParams()['covar']

        # Check whether limix::CVarianceDecomposition.train() has converged
        if conv != True or LMLgrad > grad_threshold or Params.max() > 10:
            print 'limix::CVarianceDecomposition::train has not converged'
            res = None
        else:
            res = {
                'Params0': Params0,
                'Params': Params,
                'LML': SP.array([LML]),
                'LML0': SP.array([LML0]),
                'LMLgrad': SP.array([LMLgrad]),
                'time_train': SP.array([time_train]),
            }
        return res
        pass
예제 #3
0
    def test_fit(self):
        #create optimization object
        self.gpopt = limix.CGPopt(self.gp)
        #run
        RV = self.gpopt.opt()
        RV = self.gpopt.opt()

        RV = RV & (SP.absolute(self.gp.LMLgrad()['X']).max() < 1E-1)
        RV = RV & (SP.absolute(self.gp.LMLgrad()['covar']).max() < 1E-1)
        RV = RV & (SP.absolute(self.gp.LMLgrad()['lik']).max() < 1E-1)
        self.assertTrue(RV)
예제 #4
0
파일: test_gp.py 프로젝트: omerwe/limix
    def test_fit(self):
        #create optimization object
        self.gpopt = limix.CGPopt(self.gp)
        self.gpopt.setOptBoundLower(self.constrainL)
        self.gpopt.setOptBoundUpper(self.constrainU)
        #run
        self.gpopt.opt()
        params = SP.concatenate(
            (self.gp.getParams()['covar'], self.gp.getParams()['lik']))[:, 0]
        params_true = SP.array(
            [0.28822188, 0.35271548, 0.13709146, 0.49447424])
        RV = ((params - params_true)**2).max() < 1e-6
        RV = RV & (SP.absolute(self.gp.LMLgrad()['lik']).max() < 1E-4)
        RV = RV & (SP.absolute(self.gp.LMLgrad()['covar']).max() < 1E-4)

        self.assertTrue(RV)
예제 #5
0
파일: multitrait.py 프로젝트: omerwe/limix
GP['covar'].addCovariance(GP['covar_E'])
#liklihood: gaussian
GP['ll'] = limix.CLikNormalIso()
GP['data'] = limix.CData()
GP['hyperparams'] = limix.CGPHyperParams()

#Create GP instance
GP['gp'] = limix.CGPbase(GP['data'], GP['covar'], GP['ll'])
#set data
GP['gp'].setY(Y)
#input: effectively we require the group for each sample (CCovFreeform requires this)
Xtrain = SP.zeros([Y.shape[0], 1])
Xtrain[N::1] = 1
GP['gp'].setX(Xtrain)

gpopt = limix.CGPopt(GP['gp'])
#constraints: make sure that noise level does not go completel crazy
constrainU = limix.CGPHyperParams()
constrainL = limix.CGPHyperParams()
constrainU['lik'] = +5 * SP.ones([1])
constrainL['lik'] = -5 * SP.ones([1])
gpopt.setOptBoundLower(constrainL)
gpopt.setOptBoundUpper(constrainU)
#filters: we do not need to optimize the overall scaling prameter in front of Kpop

P = []
L = []
#use a number of restarts...
#TODO: think about a more elegant scheme to handle multiple restarts properly
t0 = time.time()
for i in xrange(1):
예제 #6
0
파일: panama.py 프로젝트: omerwe/limix
    def train(self,rank=20,Kpop=True,LinearARD=False):
        """train panama module"""

        if 0:
            covar  = limix.CCovLinearISO(rank)
            ll  = limix.CLikNormalIso()
            X0 = sp.random.randn(self.N,rank)
            X0 = PCA(self.Y,rank)[0]
            X0 /= sp.sqrt(rank)
            covar_params = sp.array([1.0])
            lik_params = sp.array([1.0])

            hyperparams = limix.CGPHyperParams()
            hyperparams['covar'] = covar_params
            hyperparams['lik'] = lik_params
            hyperparams['X']   = X0
        
            constrainU = limix.CGPHyperParams()
            constrainL = limix.CGPHyperParams()
            constrainU['covar'] = +5*sp.ones_like(covar_params);
            constrainL['covar'] = 0*sp.ones_like(covar_params);
            constrainU['lik'] = +5*sp.ones_like(lik_params);
            constrainL['lik'] = 0*sp.ones_like(lik_params);

        if 1:
            covar  = limix.CSumCF()
            if LinearARD:
                covar_1 =  limix.CCovLinearARD(rank)
                covar_params = []
                for d in range(rank):
                    covar_params.append(1/sp.sqrt(d+2))
            else:
                covar_1 =  limix.CCovLinearISO(rank)
                covar_params = [1.0]
            covar.addCovariance(covar_1)

            if self.use_Kpop:
                covar_2 =  limix.CFixedCF(self.Kpop)
                covar.addCovariance(covar_2)
                covar_params.append(1.0)

            ll  = limix.CLikNormalIso()
            X0 = PCA(self.Y,rank)[0]
            X0 /= sp.sqrt(rank)
            covar_params = sp.array(covar_params)
            lik_params = sp.array([1.0])

            hyperparams = limix.CGPHyperParams()
            hyperparams['covar'] = covar_params
            hyperparams['lik'] = lik_params
            hyperparams['X']   = X0
        
            constrainU = limix.CGPHyperParams()
            constrainL = limix.CGPHyperParams()
            constrainU['covar'] = +5*sp.ones_like(covar_params);
            constrainL['covar'] = -5*sp.ones_like(covar_params);
            constrainU['lik'] = +5*sp.ones_like(lik_params);

            
        gp=limix.CGPbase(covar,ll)
        gp.setY(self.Y)
        gp.setX(X0)
        lml0 = gp.LML(hyperparams)
        dlml0 = gp.LMLgrad(hyperparams)        
        gpopt = limix.CGPopt(gp)
        gpopt.setOptBoundLower(constrainL);
        gpopt.setOptBoundUpper(constrainU);

        t1 = time.time()
        gpopt.opt()
        t2 = time.time()

        #Kpanama
        self.Xpanama = covar_1.getX()
        if LinearARD:
            self.Xpanama /= self.Xpanama.std(0)
        self.Kpanama = covar_1.K()
        self.Kpanama/= self.Kpanama.diagonal().mean()

        # Ktot
        self.Ktot = covar_1.K()
        if self.use_Kpop:
            self.Ktot += covar_2.K()
        self.Ktot/= self.Ktot.diagonal().mean()

        #store variances
        V = {}
        if LinearARD:
            V['LinearARD'] = covar_1.getParams()**2*covar_1.getX().var(0)
        else:
            V['Kpanama'] = sp.array([covar_1.K().diagonal().mean()])
        if self.use_Kpop:
            V['Kpop'] = sp.array([covar_2.K().diagonal().mean()])
        V['noise'] = gp.getParams()['lik']**2
        self.varianceComps = V
예제 #7
0
        covar_r = limix.CFixedCF(SP.eye(N))
        Xr = SP.zeros([N, 0])
        Xc = SP.zeros([D, 0])

        gp = limix.CGPkronecker(covar_r, covar_c)
        gp.setX_r(Xr)
        gp.setX_c(Xc)
        gp.setY(Y)

        params = limix.CGPHyperParams()
        params["covar_r"] = SP.zeros([covar_r.getNumberParams()])
        params["covar_c"] = SP.zeros([covar_c.getNumberParams()])
        params["lik"] = SP.log([0.1, 0.1])

        gp.setParams(params)
        opt = limix.CGPopt(gp)

        opt.opt()
        #opt.gradCheck()

    if 0:
        opt_params = limix.CGPHyperParams()
        opt_params["lik"] = params["lik"]
        gp.setParams(opt_params)
        pdb.set_trace()

        #lmm object
        lmm = limix.CGPLMM(gp)
        lmm.setSNPs(S)
        lmm.setCovs(SP.ones([N, 1]))
        lmm.setPheno(Y)
예제 #8
0
# initalization
params = limix.CGPHyperParams()
params['covarc1'] = SP.randn(covarc1.getNumberParams())
params['covarc2'] = SP.randn(covarc2.getNumberParams())
params['covarr1'] = SP.ones(1)
params['covarr2'] = SP.ones(1)
params['dataTerm'] = SP.randn(P + 1, 1)
gpKS.setParams(params)
# Paramask
paramMask = limix.CGPHyperParams()
paramMask['covarc1'] = covarc1.getParamMask()
paramMask['covarc2'] = covarc2.getParamMask()
paramMask['covarr1'] = covarr1.getParamMask()
paramMask['covarr2'] = covarr2.getParamMask()
# optimisation
gpKSopt = limix.CGPopt(gpKS)
start_time = time.time()
gpKSopt.opt()
elapsed_timeFast = time.time() - start_time
print "time elapsed(s): " + str(elapsed_timeFast)

paramsOpt = gpKS.getParams()
print ""
print "optimised parameters"
print SP.concatenate((paramsOpt['covarc1'], paramsOpt['covarr1'],
                      paramsOpt['covarc2'], paramsOpt['covarr2']))
print paramsOpt['dataTerm']
print ""

print "GP BASE"
# NormalGP