def fit_predict(enet, fortran, mTrain, n, mvalid, validX, validY, validX2, validY2, a, b, c, d, e, sourceDev):
    ## Solve
    print("Solving")
    double_precision = 0  # float
    order = 'c' if fortran else 'r'
    enet.fit_ptr(mTrain, n, mvalid, double_precision, order, a, b, c, d, e, source_dev=sourceDev)
    print("Done Solving")

    # show something about Xvsalphalambda and Xvsalpha
    print("Xvsalpha")
    print(enet.X)

    rmse = enet.error
    print("rmse")
    print(rmse)

    print("lambdas")
    lambdas = enet.lambdas
    print(lambdas)

    print("alphas")
    alphas = enet.alphas
    print(alphas)

    print("tols")
    tols = enet.tols
    print(tols)

    print("Predicting")
    if validX is not None:
        if 1 == 1:
            validPredsvsalphapure = enet.predict_ptr(c, d)
        else:
            validPredsvsalphapure = enet.predict(validX, validY)

        print("validPredsvsalphapure")
        print(validPredsvsalphapure)

    # upload new validation for new predict
    _, _, e, f, _ = upload_data(enet, None, None, validX2, validY2, None, source_dev=sourceDev)

    print("Predicting2")
    if 1 == 1:
        validPredsvsalphapure2 = enet.predict_ptr(e, f)
    else:
        validPredsvsalphapure2 = enet.predict(validX2, validY2)

    print("validPredsvsalphapure2")
    print(validPredsvsalphapure2)

    print("Done Predicting")
Exemple #2
0
def ElasticNet(X,
               y,
               nGPUs=0,
               nlambda=100,
               nfolds=5,
               nalpha=5,
               validFraction=0.2):
    Solver = h2o4gpu.ElasticNetH2O

    sourceDev = 0
    intercept = True
    lambda_min_ratio = 1e-9
    nFolds = nfolds
    nLambdas = nlambda
    nAlphas = nalpha

    # Setup Train/validation Set Split
    morig = X.shape[0]
    norig = X.shape[1]
    print("Original m=%d n=%d" % (morig, norig))
    fortran = X.flags.f_contiguous
    print("fortran=%d" % (fortran))

    # Do train/valid split
    HO = int(validFraction * morig)
    H = morig - HO
    print("Size of Train rows=%d valid rows=%d" % (H, HO))
    trainX = np.copy(X[0:H, :])
    trainY = np.copy(y[0:H])
    if validFraction > 0:
        validX = np.copy(X[H:norig, :])
        validY = np.copy(y[H:norig])
    else:
        validX = None
        validY = None

    trainW = np.copy(trainY) * 0.0 + 1.0  # constant unity weight

    half = int(H / 2)
    validX2 = np.copy(X[H - half:norig - half, :])
    validY2 = np.copy(y[H - half:norig - half])

    mTrain = trainX.shape[0]
    if validX is not None:
        mvalid = validX.shape[0]
    else:
        mvalid = 0
    mvalid2 = validX2.shape[0]
    print("mTrain=%d mvalid=%d mvalid2=%d" % (mTrain, mvalid, mvalid2))

    if intercept == 1:
        trainX = np.hstack(
            [trainX, np.ones((trainX.shape[0], 1), dtype=trainX.dtype)])
        if validX is not None:
            validX = np.hstack(
                [validX,
                 np.ones((validX.shape[0], 1), dtype=validX.dtype)])
        validX2 = np.hstack(
            [validX2,
             np.ones((validX2.shape[0], 1), dtype=validX2.dtype)])
    n = trainX.shape[1]
    print("New n=%d" % (n))

    ## Constructor
    print("Setting up solver")
    enet = Solver(n_gpus=nGPUs,
                  fit_intercept=intercept,
                  lambda_min_ratio=lambda_min_ratio,
                  n_lambdas=nLambdas,
                  n_folds=nFolds,
                  n_alphas=nAlphas)

    ## First, get backend pointers
    print("Uploading")
    print(trainX.dtype)
    print(trainY.dtype)
    if validX is not None:
        print(validX.dtype)
        print(validY.dtype)
    print(trainW.dtype)
    a, b, c, d, e = prepare_and_upload_data(enet,
                                            trainX,
                                            trainY,
                                            validX,
                                            validY,
                                            trainW,
                                            source_dev=sourceDev)

    ## Solve
    print("Solving")
    double_precision = 0  # float
    order = 'c' if fortran else 'r'
    enet.fit_ptr(mTrain,
                 n,
                 mvalid,
                 double_precision,
                 order,
                 a,
                 b,
                 c,
                 d,
                 e,
                 source_dev=sourceDev)
    print("Done Solving")

    # show something about Xvsalphalambda and Xvsalpha
    print("Xvsalpha")
    print(enet.X)

    rmse = enet.error
    print("rmse")
    print(rmse)

    print("lambdas")
    lambdas = enet.lambdas
    print(lambdas)

    print("alphas")
    alphas = enet.alphas
    print(alphas)

    print("tols")
    tols = enet.tols
    print(tols)

    print("Predicting")
    if validX is not None:
        if 1 == 1:
            validPredsvsalphapure = enet.predict_ptr(c, d)
        else:
            validPredsvsalphapure = enet.predict(validX, validY)

        print("validPredsvsalphapure")
        print(validPredsvsalphapure)

    # upload new validation for new predict
    _, _, e, f, _ = upload_data(enet,
                                None,
                                None,
                                validX2,
                                validY2,
                                None,
                                source_dev=sourceDev)

    print("Predicting2")
    if 1 == 1:
        validPredsvsalphapure2 = enet.predict_ptr(e, f)
    else:
        validPredsvsalphapure2 = enet.predict(validX2, validY2)

    print("validPredsvsalphapure2")
    print(validPredsvsalphapure2)

    print("Done Predicting")

    # show something about validPredsvsalphalambdapure, validPredsvsalphapure

    return enet
def ElasticNet(X, y, nGPUs=0, nlambda=100, nfolds=5, nalpha=5, validFraction=0.2):
  Solver = h2o4gpu.ElasticNetH2O

  sourceDev = 0
  intercept = True
  lambda_min_ratio = 1e-9
  nFolds = nfolds
  nLambdas = nlambda
  nAlphas = nalpha

  # Setup Train/validation Set Split
  morig = X.shape[0]
  norig = X.shape[1]
  print("Original m=%d n=%d" % (morig,norig))
  fortran = X.flags.f_contiguous
  print("fortran=%d" % (fortran))

  
  # Do train/valid split
  HO=int(validFraction*morig)
  H=morig-HO
  print("Size of Train rows=%d valid rows=%d" % (H,HO))
  trainX = np.copy(X[0:H,:])
  trainY = np.copy(y[0:H])
  if validFraction>0:
      validX = np.copy(X[H:norig,:])
      validY = np.copy(y[H:norig])
  else:
      validX = None
      validY = None

  trainW = np.copy(trainY)*0.0 + 1.0 # constant unity weight

  half = int(H/2)
  validX2 = np.copy(X[H-half:norig-half,:])
  validY2 = np.copy(y[H-half:norig-half])

  mTrain = trainX.shape[0]
  if validX is not None:
      mvalid = validX.shape[0]
  else:
      mvalid = 0
  mvalid2 = validX2.shape[0]
  print("mTrain=%d mvalid=%d mvalid2=%d" % (mTrain,mvalid,mvalid2))
  
  if intercept==1:
    trainX = np.hstack([trainX, np.ones((trainX.shape[0],1),dtype=trainX.dtype)])
    if validX is not None:
        validX = np.hstack([validX, np.ones((validX.shape[0],1),dtype=validX.dtype)])
    validX2 = np.hstack([validX2, np.ones((validX2.shape[0], 1), dtype=validX2.dtype)])
  n = trainX.shape[1]
  print("New n=%d" % (n))

  ## Constructor
  print("Setting up solver")
  enet = Solver(n_gpus = nGPUs,  fit_intercept = intercept, lambda_min_ratio = lambda_min_ratio, n_lambdas = nLambdas, n_folds = nFolds, n_alphas = nAlphas)

  ## First, get backend pointers
  print("Uploading")
  print(trainX.dtype)
  print(trainY.dtype)
  if validX is not None:
      print(validX.dtype)
      print(validY.dtype)
  print(trainW.dtype)
  a,b,c,d,e = prepare_and_upload_data(enet, trainX, trainY, validX, validY, trainW, source_dev = sourceDev)

  ## Solve
  print("Solving")
  double_precision=0 # float
  order = 'c' if fortran else 'r'
  enet.fit_ptr(mTrain, n, mvalid, double_precision, order, a, b, c, d, e, source_dev = sourceDev)
  print("Done Solving")

  # show something about Xvsalphalambda and Xvsalpha
  print("Xvsalpha")
  print(enet.X)

  rmse=enet.error
  print("rmse")
  print(rmse)

  print("lambdas")
  lambdas=enet.lambdas
  print(lambdas)

  print("alphas")
  alphas=enet.alphas
  print(alphas)

  print("tols")
  tols=enet.tols
  print(tols)
                    

  print("Predicting")
  if validX is not None:
      if 1==1:
           validPredsvsalphapure = enet.predict_ptr(c, d)
      else:
           validPredsvsalphapure = enet.predict(validX, validY)

      print("validPredsvsalphapure")
      print(validPredsvsalphapure)

  # upload new validation for new predict
  _,_,e,f,_ = upload_data(enet, None, None, validX2, validY2, None, source_dev = sourceDev)

  print("Predicting2")
  if 1==1:
       validPredsvsalphapure2 = enet.predict_ptr(e, f)
  else:
       validPredsvsalphapure2 = enet.predict(validX2, validY2)

  print("validPredsvsalphapure2")
  print(validPredsvsalphapure2)

  print("Done Predicting")

  # show something about validPredsvsalphalambdapure, validPredsvsalphapure

  return enet