Ejemplo n.º 1
0
def lcmnl_simulate(cmdata,numclasses,csdata,numalts,betas):
  cmfnames = ['cm%d'%i for i in range(cmdata.shape[1])]
  cmdata,newcmfnames = prep_cm_data(cmdata,numclasses,cmfnames)
  cmchoices = mnl.mnl_simulate(cmdata,betas['cm'],numclasses,GPU=GPU,returnprobs=0)
  cspdf = {}
  for cls in range(numclasses):
    cspdf['cs%d'%cls] = mnl.mnl_simulate(csdata,betas['cs%d'%cls],numalts,GPU=GPU,returnprobs=1).flatten()
  cschoices = None
  return cmchoices, cschoices, cspdf
Ejemplo n.º 2
0
def lcmnl_estimate(cmdata,numclasses,csdata,numalts,chosen,maxiter=MAXITER,emtol=EMTOL,\
                     skipprep=False,csbeta=None,cmbeta=None):

  loglik = -999999
  if csbeta is None: csbeta = [np.random.rand(csdata.shape[1]) for i in range(numclasses)]
  if not skipprep: cmdata = prep_cm_data(cmdata,numclasses)
  if cmbeta is None: cmbeta = np.zeros(cmdata.shape[1])
  
  for i in range(maxiter):
    print "Running iteration %d" % (i+1)
    print time.ctime()

    # EXPECTATION
    print "Running class membership model"
    cmprobs = mnl.mnl_simulate(cmdata,cmbeta,numclasses,GPU=GPU,returnprobs=1)

    csprobs = []
    for cno in range(numclasses):
      tmp = mnl.mnl_simulate(csdata,csbeta[cno],numalts,GPU=GPU,returnprobs=1)
      tmp = np.sum(tmp*chosen,axis=1) # keep only chosen probs
      csprobs.append(np.reshape(tmp,(-1,1)))
    csprobs = np.concatenate(csprobs,axis=1)

    h = csprobs * cmprobs
    oldloglik = loglik
    loglik = np.sum(np.log(np.sum(h,axis=1)))
    print "current csbeta", csbeta
    print "current cmbeta", cmbeta
    print "current loglik", loglik, i+1, "\n\n"
    if abs(loglik-oldloglik) < emtol: break
    wts = h / np.reshape(np.sum(h,axis=1),(-1,1))
   
    # MAXIMIZATION

    for cno in range(numclasses):
      print "Estimating class specific model for class %d" % (cno+1)
      t1 =  time.time()
      weights=np.reshape(wts[:,cno],(-1,1))
      print weights.shape
      fit, results  = mnl.mnl_estimate(csdata,chosen,numalts,GPU=GPU,weights=weights,beta=csbeta[cno])
      print "Finished in %fs" % (time.time()-t1)
      csbeta[cno] = zip(*results)[0]
    
    print "Estimating class membership model"
    t1 =  time.time()
    fit, results = mnl.mnl_estimate(cmdata,None,numclasses,GPU=GPU,weights=wts,lcgrad=True, \
                                             beta=cmbeta,coeffrange=(-1000,1000))
    print "Finished in %fs" % (time.time()-t1)
    cmbeta = zip(*results)[0]
Ejemplo n.º 3
0
    def expectation(cmbeta,csbeta):
      print "Running class membership model"
      cmprobs = mnl.mnl_simulate(cmdata,cmbeta,numclasses,GPU=GPU,returnprobs=1)

      csprobs = []
      for cno in range(numclasses):
        tmp = mnl.mnl_simulate(csdata,csbeta[cno],numalts,GPU=GPU,returnprobs=1)
        tmp = np.sum(tmp*chosen,axis=1) # keep only chosen probs
        csprobs.append(np.reshape(tmp,(-1,1)))
      csprobs = np.concatenate(csprobs,axis=1)

      h = csprobs * cmprobs
      loglik = np.sum(np.log(np.sum(h,axis=1)))
      wts = h / np.reshape(np.sum(h,axis=1),(-1,1))
      return loglik, wts
Ejemplo n.º 4
0
def lcmnl_simulate(cmdata, numclasses, csdata, numalts, betas):
    cmfnames = ['cm%d' % i for i in range(cmdata.shape[1])]
    cmdata, newcmfnames = prep_cm_data(cmdata, numclasses, cmfnames)
    cmchoices = mnl.mnl_simulate(cmdata,
                                 betas['cm'],
                                 numclasses,
                                 GPU=GPU,
                                 returnprobs=0)
    cspdf = {}
    for cls in range(numclasses):
        cspdf['cs%d' % cls] = mnl.mnl_simulate(csdata,
                                               betas['cs%d' % cls],
                                               numalts,
                                               GPU=GPU,
                                               returnprobs=1).flatten()
    cschoices = None
    return cmchoices, cschoices, cspdf
Ejemplo n.º 5
0
def lcmnl_estimate(cmdata,numclasses,csdata,numalts,chosen,maxiter=MAXITER,emtol=EMTOL):

  loglik = -999999
  beta = [np.ones(csdata.shape[1]) for i in range(numclasses)]
  #cmbeta = np.ones((cmdata.shape[1]+1)*(numclasses-1)) # +1 if for asc, -1 is base alt
  cmbeta = np.ones(cmdata.shape[1])
  
  for i in range(maxiter):
    print "Running iteration %d" % (i+1)

    # EXPECTATION
    print "Running class membership model"
    print "cmbeta", cmbeta
    cmprobs = mnl.mnl_simulate(cmdata,cmbeta,numclasses,GPU=GPU,returnprobs=1)
    print "cmprobs", cmprobs

    csprobs = []
    for cno in range(numclasses):
      print "Running class specific model for class %d" % (cno+1)
      print "csbeta", beta[cno]
      tmp = mnl.mnl_simulate(csdata,beta[cno],numalts,GPU=GPU,returnprobs=1)
      print "csprobs", tmp
      tmp = np.sum(tmp*chosen,axis=1) # keep only chosen probs
      csprobs.append(np.reshape(tmp,(-1,1)))
    csprobs = np.concatenate(csprobs,axis=1)

    h = csprobs * cmprobs
    oldloglik = loglik
    loglik = np.sum(np.log(np.sum(h,axis=1)))
    print "current loglik", loglik, i+1
    print "current beta", beta
    if abs(loglik-oldloglik) < emtol: break
    wts = h / np.reshape(np.sum(h,axis=1),(-1,1))
    for i in range(wts.shape[1]): print i, pd.Series(wts[:,i]).describe()
   
    # MAXIMIZATION

    print "Estimating class membership model"
    fit, results = mnl.mnl_estimate(cmdata,None,numclasses,GPU=GPU,weights=wts,lcgrad=True)
    cmbeta = zip(*results)[0]

    for cno in range(numclasses):
      print "Estimating class specific model for class %d" % (cno+1)
      fit, results  = mnl.mnl_estimate(csdata,chosen,numalts,GPU=GPU,weights=wts[:,cno])

      beta[cno] = zip(*results)[0]
Ejemplo n.º 6
0
        def expectation(cmbeta, csbeta):
            print "Running class membership model"
            cmprobs = mnl.mnl_simulate(cmdata,
                                       cmbeta,
                                       numclasses,
                                       GPU=GPU,
                                       returnprobs=1)

            csprobs = []
            for cno in range(numclasses):
                tmp = mnl.mnl_simulate(csdata,
                                       csbeta[cno],
                                       numalts,
                                       GPU=GPU,
                                       returnprobs=1)
                tmp = np.sum(tmp * chosen, axis=1)  # keep only chosen probs
                csprobs.append(np.reshape(tmp, (-1, 1)))
            csprobs = np.concatenate(csprobs, axis=1)

            h = csprobs * cmprobs
            loglik = np.sum(np.log(np.sum(h, axis=1)))
            wts = h / np.reshape(np.sum(h, axis=1), (-1, 1))
            return loglik, wts
Ejemplo n.º 7
0
def lcmnl_estimate(cmdata,numclasses,csdata,numalts,chosen,maxiter=MAXITER,emtol=EMTOL,\
                     skipprep=False,csbeta=None,cmbeta=None):

    loglik = -999999
    if csbeta is None:
        csbeta = [np.random.rand(csdata.shape[1]) for i in range(numclasses)]
    if not skipprep: cmdata = prep_cm_data(cmdata, numclasses)
    if cmbeta is None: cmbeta = np.zeros(cmdata.shape[1])

    for i in range(maxiter):
        print "Running iteration %d" % (i + 1)
        print time.ctime()

        # EXPECTATION
        print "Running class membership model"
        cmprobs = mnl.mnl_simulate(cmdata,
                                   cmbeta,
                                   numclasses,
                                   GPU=GPU,
                                   returnprobs=1)

        csprobs = []
        for cno in range(numclasses):
            tmp = mnl.mnl_simulate(csdata,
                                   csbeta[cno],
                                   numalts,
                                   GPU=GPU,
                                   returnprobs=1)
            tmp = np.sum(tmp * chosen, axis=1)  # keep only chosen probs
            csprobs.append(np.reshape(tmp, (-1, 1)))
        csprobs = np.concatenate(csprobs, axis=1)

        h = csprobs * cmprobs
        oldloglik = loglik
        loglik = np.sum(np.log(np.sum(h, axis=1)))
        print "current csbeta", csbeta
        print "current cmbeta", cmbeta
        print "current loglik", loglik, i + 1, "\n\n"
        if abs(loglik - oldloglik) < emtol: break
        wts = h / np.reshape(np.sum(h, axis=1), (-1, 1))

        # MAXIMIZATION

        for cno in range(numclasses):
            print "Estimating class specific model for class %d" % (cno + 1)
            t1 = time.time()
            weights = np.reshape(wts[:, cno], (-1, 1))
            print weights.shape
            fit, results = mnl.mnl_estimate(csdata,
                                            chosen,
                                            numalts,
                                            GPU=GPU,
                                            weights=weights,
                                            beta=csbeta[cno])
            print "Finished in %fs" % (time.time() - t1)
            csbeta[cno] = zip(*results)[0]

        print "Estimating class membership model"
        t1 = time.time()
        fit, results = mnl.mnl_estimate(cmdata,None,numclasses,GPU=GPU,weights=wts,lcgrad=True, \
                                                 beta=cmbeta,coeffrange=(-1000,1000))
        print "Finished in %fs" % (time.time() - t1)
        cmbeta = zip(*results)[0]