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)
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')
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,
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))