Esempio n. 1
0
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')