def main(): # Set parameters degree = 20 eta = 2 max_iter = 200 # Load data and expand with polynomial features f = open('data_logreg.json', 'r') data = json.load(f) for k, v in data.items(): data[k] = np.array(v) # Encode list into numpy array # Expand with polynomial features X_train = logreg_toolbox.poly_2D_design_matrix(data['x1_train'], data['x2_train'], degree) n = X_train.shape[1] # Define the functions of the parameter we want to optimize def f(theta): return lr.cost(theta, X_train, data['y_train']) def df(theta): return lr.grad(theta, X_train, data['y_train']) # Test to verify if the computation of the gradient is correct logreg_toolbox.check_gradient(f, df, n) # Point for initialization of gradient descent theta0 = np.zeros(n) theta_opt, E_list = gd.gradient_descent(f, df, theta0, eta, max_iter) logreg_toolbox.plot_logreg(data, degree, theta_opt, E_list) plt.show()
def main(): # Set parameters degree = 5 eta = 1. max_iter = 20 # Load data and expand with polynomial features f = open('data_logreg.json', 'r') data = json.load(f) for k, v in data.items(): data[k] = np.array(v) # Encode list into numpy array # Expand with polynomial features X_train = logreg_toolbox.poly_2D_design_matrix(data['x1_train'], data['x2_train'], degree) n = X_train.shape[1] # Define the functions of the parameter we want to optimize def f(theta): return lr.cost(theta, X_train, data['y_train']) def df(theta): return lr.grad(theta, X_train, data['y_train']) # Test to verify if the computation of the gradient is correct logreg_toolbox.check_gradient(f, df, n) # Point for initialization of gradient descent theta0 = np.zeros(n) #### VARIANT 1: Optimize with gradient descent # theta_opt, E_list = gd.gradient_descent(f, df, theta0, eta, max_iter) #### VARIANT 2: Optimize with gradient descent # theta_opt, E_list, lr_list = gd.adaptative_gradient_descent(f, df, theta0, eta, max_iter) # plt.plot(lr_list) # plt.xlabel('Iterations') # plt.ylabel('Learning rate') # print('Adaptative gradient, final learning rate: {:.3g}'.format(lr_list[-1])) #### VARIANT 3: Optimize with gradient descent res = minimize(f, x0=theta0, jac=df, options={ 'disp': True, 'maxiter': max_iter }) theta_opt = res.x.reshape((n, 1)) E_list = [] logreg_toolbox.plot_logreg(data, degree, theta_opt, E_list) plt.show()