Пример #1
0
def main():
    parser = argparse.ArgumentParser(description='sgd-ma')
    parser.add_argument('dname', help='dataset name')

    args = parser.parse_args()

    # load the dataset
    fpath = os.path.join(args.data_dir, f"{args.dname}.dat")
    X, y = load_dat(fpath)

    batch_size = int(np.sqrt(X.shape[0]) + 10)
    eps = compute_epsilon(X, y, batch_size)
    print(eps)
Пример #2
0
def main(args):
    # load the dataset
    dname = f"{args.dname}.dat"
    fpath = os.path.join(args.data_dir, dname)
    X, y = load_dat(fpath, normalize=args.norm, shuffle=args.shuffle)
    N, dim = X.shape

    # order of Renyi divergence
    alpha = np.linspace(1.5, 1024, 1000)
    delta = args.delta
    sigma = np.array([0.005, 0.01, 0.025, 0.05, 0.1, 0.2, 0.3, 0.4, 0.6, 0.8])
    sigma = np.flip(sigma, 0)
    batch_size = args.batch_size

    n_sigma = len(sigma)
    cv_rep = 10
    K = 5
    n_rep = K * cv_rep

    eps = np.zeros((n_sigma, n_rep))
    acc = np.zeros_like(eps)
    obj = np.zeros_like(eps)
    j = 0

    # task
    if args.svm:
        loss_func = hsvm_loss
        grad_func = hsvm_grad
        test_func = svm_test
        y[y < 0.5] = -1.0
        task = 'svm'
    else:
        loss_func = logit_loss
        grad_func = logistic_grad
        test_func = logistic_test
        task = 'logres'

    rkf = RepeatedKFold(n_splits=K, n_repeats=cv_rep)

    for train_idx, test_idx in rkf.split(X):
        train_X, train_y = X[train_idx, :], y[train_idx]
        test_X, test_y = X[test_idx, :], y[test_idx]

        noise = np.random.randn(dim)

        # new recurrence relation
        w, sens = sgd_recur(train_X,
                            train_y,
                            grad_func,
                            batch_size,
                            args.T,
                            args.L,
                            reg_coeff=args.mu,
                            R=args.norm,
                            init_step=args.init_step,
                            verbose=False)

        sigma_sq = 2.0 * np.square(sigma)
        eps[:, j] = epsilon_worst_case(sens[-1, :], alpha, sigma_sq, delta)

        noisy_w = w[-1, :] + sigma[:, np.newaxis] * noise
        acc[:, j] = test_func(noisy_w, test_X, test_y) * 100
        obj[:, j] = loss_func(noisy_w, train_X, train_y, reg_coeff=args.mu)
        j += 1

    avg_acc = np.mean(acc, axis=1)
    avg_eps = np.mean(eps, axis=1)
    avg_obj = np.mean(obj, axis=1)

    str_mu = "{0}".format(args.mu)[2:]
    str_is = "{0}".format(args.init_step).replace('.', '').rstrip('0')
    filename = "rsgdd_{5}_T{0}B{1}mu{2}IS{3}_{4}".format(
        args.T, args.batch_size, str_mu, str_is, args.dname, task)
    rs_dir = "./plot/results"
    np.savetxt("{0}/{1}_eps.out".format(rs_dir, filename), avg_eps, fmt='%.5f')
    np.savetxt("{0}/{1}_acc.out".format(rs_dir, filename), avg_acc, fmt='%.5f')
    np.savetxt("{0}/{1}_obj.out".format(rs_dir, filename), avg_obj, fmt='%.5f')
Пример #3
0
    parser.add_argument('dname', help='dataset name')
    parser.add_argument('T', type=int, help='epoch')
    parser.add_argument('rst', type=int, help='reset interval')
    parser.add_argument('--data_dir', type=str, default=None)
    parser.add_argument('--batch_size', type=int, default=4000)
    parser.add_argument('--init_step', type=float, default=0.5)
    parser.add_argument('--mu', type=float, default=0.001)
    parser.add_argument('--L', type=float, default=1.81)
    parser.add_argument('--norm', type=float, default=1.0)
    parser.add_argument('--delta', type=float, default=1e-12)

    args = parser.parse_args()

    # load the dataset
    fpath = os.path.join(args.data_dir, f"{args.dname}.dat")
    X, y = load_dat(fpath, normalize=args.norm)
    # y[y < 0.5] = -1.0

    batch_size = args.batch_size
    n_epoch = args.T
    w, sens = sgd_restart(X,
                          y,
                          logistic_grad,
                          batch_size,
                          n_epoch,
                          args.L,
                          reg_coeff=args.mu,
                          reset_intvl=args.rst,
                          R=args.norm,
                          init_step=0.5,
                          verbose=True,
Пример #4
0
    log_eta = logsumexp(expo, axis=0) - np.log(m)

    return w, log_eta


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='recursive mechanism')
    parser.add_argument('dname', help='dataset name')
    parser.add_argument('T', type=int, help='epoch')
    parser.add_argument('--data_dir', type=str, default=None)

    args = parser.parse_args()

    # load the dataset
    fpath = os.path.join(args.data_dir, f"{args.dname}.dat")
    X, y = load_dat(fpath, minmax=(0, 1), bias_term=True)
    # y[y < 0.5] = -1.0

    w, sen = sgd_recur(X,
                       y,
                       logistic_grad,
                       4000,
                       args.T,
                       0.25,
                       reg_coeff=0.001,
                       init_step=0.5,
                       verbose=True,
                       loss_func=logistic_loss,
                       test_func=logistic_test)
    acc = logistic_test(w[-1], X, y)
    print("accuracy={}".format(acc))