def grade1(): marks = 0 try: X = np.random.rand(110, 5) Y = np.random.rand(110, 1) X_train, Y_train, X_test, Y_test = utils.split_data(X, Y, 0.75) assert np.allclose(np.vstack([X_train, X_test]), X) assert np.allclose(np.vstack([Y_train, Y_test]), Y) assert len(X_train) == 82 and len(Y_train) == 82 marks += 0.5 except: print('Q1 split_data() incorrect', file=stderr) return marks try: x = np.array([ 9.71711545, 5.27658861, 0.74957658, 7.25267862, 1.57512235, 4.95493874, 4.6645458, 8.81014817, 5.6875507, 8.9270358 ]).reshape(10, 1) y = np.array([ 7.4395211, 1.29711056, 4.99824035, 1.87706798, 0.93306619, 6.65645683, 8.6573449, 2.54946024, 1.3023241, 6.52289899 ]).reshape(10, 1) w = 0.513244 b = 1.839345 assert np.isclose(single_var_reg.mse(x, y, w, b), 4.319008411331635) marks += 0.5 except: print('Q1 mse() incorrect', file=stderr) return marks try: X, Y = utils.load_data1('data1.csv') X_train, Y_train, X_test, Y_test = utils.split_data(X, Y) w, b, train_mses, test_mses = single_var_reg.ordinary_least_squares( X_train, Y_train, X_test, Y_test) assert train_mses[-1] < 52 assert test_mses[-1] < 68 for i in range(len(train_mses) - 1): assert train_mses[i] >= train_mses[i + 1] marks += 3 except: print('Q1 ordinary_least_squares() incorrect', file=stderr) return marks return marks
## END TODO train_mses.append(train_mse) test_mses.append(test_mse) ## TODO: Update w and b using a single step of gradient descent ## END TODO return w, b, train_mses, test_mses if __name__ == '__main__': # Load and split data X, Y = load_data1('data1.csv') X_train, Y_train, X_test, Y_test = split_data(X, Y) w, b, train_mses, test_mses = ordinary_least_squares( X_train, Y_train, X_test, Y_test) # Plots plt.figure(figsize=(8, 4)) plt.subplot(121) plt.plot(train_mses) plt.plot(test_mses) plt.legend(['Train MSE', 'Test MSE']) plt.xlabel('Iteration') plt.ylabel('MSE') plt.subplot(122) plt.plot([-20, 50], [-20 * w + b, 50 * w + b], color='r')