From c556eab14c1dff6efacbc4fd112ac180252deb64 Mon Sep 17 00:00:00 2001 From: Emmanuel Dellandrea <emmanuel.dellandrea@ec-lyon.fr> Date: Mon, 13 Jan 2025 16:27:44 +0100 Subject: [PATCH] Add session 2 --- .../Session_1/linear_regression-completed.py | 185 ++++++++++ .../logistic_regression-completed.py | 261 ++++++++++++++ .../Session_2/Subject_2_Neural_Networks.pdf | Bin 0 -> 74821 bytes Practical_sessions/Session_2/food_truck.txt | 97 ++++++ Practical_sessions/Session_2/houses.txt | 47 +++ Practical_sessions/Session_2/iris.txt | 150 ++++++++ Practical_sessions/Session_2/nn_regression.py | 323 ++++++++++++++++++ Practical_sessions/Session_2/scores.txt | 100 ++++++ 8 files changed, 1163 insertions(+) create mode 100644 Practical_sessions/Session_1/linear_regression-completed.py create mode 100644 Practical_sessions/Session_1/logistic_regression-completed.py create mode 100644 Practical_sessions/Session_2/Subject_2_Neural_Networks.pdf create mode 100644 Practical_sessions/Session_2/food_truck.txt create mode 100644 Practical_sessions/Session_2/houses.txt create mode 100644 Practical_sessions/Session_2/iris.txt create mode 100644 Practical_sessions/Session_2/nn_regression.py create mode 100644 Practical_sessions/Session_2/scores.txt diff --git a/Practical_sessions/Session_1/linear_regression-completed.py b/Practical_sessions/Session_1/linear_regression-completed.py new file mode 100644 index 0000000..67d2999 --- /dev/null +++ b/Practical_sessions/Session_1/linear_regression-completed.py @@ -0,0 +1,185 @@ +import matplotlib.pyplot as plt +import numpy as np + +def read_data(file_name, delimiter=','): + """ Read the data file and returns the corresponding matrices + + Parameters + ---------- + file_name : file name containg data + delimiter : character separating columns in the file ("," by default) + + Returns + ------- + X : data matrix of size [N, nb_var] + Y : matrix containg values of the target variable of size [N, 1] + + with N : number of elements and nb_var : number of predictor variables + + """ + + data = np.loadtxt(file_name, delimiter=delimiter) + nb_var = data.shape[1] - 1 + N = data.shape[0] + + X = data[:, :-1] + Y = data[:, -1].reshape(N,1) + + return X, Y, N, nb_var + +def normalization(X): + """ Normalize the provided matrix (substracts mean and divides by standard deviation) + + + Parameters + ---------- + X : data matrix of size [N, nb_var] + + with N : number of elements and nb_var : number of predictor variables + + Returns + ------- + X_norm : normalized data matrix of size [N, nb_var] + mu : means of the variables of size [1,nb_var] + sigma : standard deviations of the variables of size [1,nb_var] + + """ + + mu = np.mean(X, 0) + sigma = np.std(X, 0) + X_norm = (X - mu) / sigma + + return X_norm, mu, sigma + +def compute_loss(X, Y, theta): + """ Compute the loss function value (mean square error) + + Parameters + ---------- + X : data matrix of size [N, nb_var+1] + Y : matrix containg values of the target variable of size [N, 1] + theta : matrix containing the theta parameters of the linear model of size [1, nb_var+1] + + with N : number of elements and nb_var : number of predictor variables + + Returns + ------- + loss : loss function value (mean square error) + + """ + + N = X.shape[0] + + loss = np.sum((X.dot(theta.T) - Y) ** 2) / (2 * N) + + return loss + +def gradient_descent(X, Y, theta, alpha, nb_iters): + """ Training to compute the linear regression parameters by gradient descent + + Parameters + ---------- + X : data matrix of size [N, nb_var+1] + Y : matrix containg values of the target variable of size [N, 1] + theta : matrix containing the theta parameters of the linear model of size [1, nb_var+1] + alpha : learning rate + nb_iters : number of iterations + + with N : number of elements and nb_var : number of predictor variables + + + Returns + ------- + theta : matrix containing the theta parameters learnt by gradient descent of size [1, nb_var+1] + J_history : list containg the loss function values for each iteration of length nb_iters + + + """ + + # Initialisation de variables utiles + N = X.shape[0] + J_history = np.zeros(nb_iters) + + for i in range(0, nb_iters): + + error = X.dot(theta.T) - Y + theta -= (alpha/N)*np.sum(X*error, 0) + + J_history[i] = compute_loss(X, Y, theta) + + + return theta, J_history + +def display(X, Y, theta): + """ Display in 2 dimensions of data points and of the linear regression curve defined by theta parameters + + + Parameters + ---------- + X : data matrix of size [N, nb_var+1] + Y : matrix containg values of the target variable of size [N, 1] + theta : matrix containing the theta parameters of the linear model of size [1, nb_var+1] + + with N : number of elements and nb_var : number of predictor variables + + Returns + ------- + None + + """ + plt.figure(0) + plt.scatter(X[:, 1], Y, c='r', marker="x") + line1, = plt.plot(X[:, 1], X.dot(theta.T)) + plt.title("Linear Regression") + + plt.show() + + +if __name__ == "__main__": + + # ===================== Part 1: Data loading and normalization ===================== + print("Data loading ...") + + X, Y, N, nb_var = read_data("food_truck.txt") + # X, Y, N, nb_var = read_data("houses.txt") + + # Print of the ten first examples of the dataset + print("Print of the ten first examples of the dataset : ") + for i in range(0, 10): + print(f"x = {X[i,:]}, y = {Y[i]}") + + # Normalization of variables + print("Normalization of variables ...") + + X, mu, sigma = normalization(X) + + # Add one column of 1 values to X (for theta 0) + X = np.hstack((np.ones((N,1)), X)) + + # ===================== Part 2: Gradient descent ===================== + print("Training by gradient descent ...") + + # Choice of the learning rate and number of iterations + alpha = 0.01 + nb_iters = 1500 + + # Initialization of theta and call to the gradient descent function + theta = np.zeros((1,nb_var+1)) + theta, J_history = gradient_descent(X, Y, theta, alpha, nb_iters) + + # Display of the loss function values obtained during gradient descent training + plt.figure() + plt.title("Loss function values obtained during gradient descent training") + plt.plot(np.arange(J_history.size), J_history) + plt.xlabel("Nomber of iterations") + plt.ylabel("Loss function J") + + # Print of theta values + print(f"Theta computed by gradient descent : {theta}") + + # In case of only one predictor variable, display the linear regression curve + if nb_var == 1 : + display(X,Y,theta) + plt.show() + + print("Linear Regression completed.") diff --git a/Practical_sessions/Session_1/logistic_regression-completed.py b/Practical_sessions/Session_1/logistic_regression-completed.py new file mode 100644 index 0000000..826b54b --- /dev/null +++ b/Practical_sessions/Session_1/logistic_regression-completed.py @@ -0,0 +1,261 @@ +import matplotlib.pyplot as plt +import numpy as np + +def read_data(file_name, delimiter=','): + """ Read the data file and returns the corresponding matrices + + Parameters + ---------- + file_name : file name containg data + delimiter : character separating columns in the file ("," by default) + + Returns + ------- + X : data matrix of size [N, nb_var] + Y : matrix containg values of the target variable of size [N, 1] + + with N : number of elements and nb_var : number of predictor variables + + """ + + data = np.loadtxt(file_name, delimiter=delimiter) + nb_var = data.shape[1] - 1 + N = data.shape[0] + + X = data[:, :-1] + Y = data[:, -1].reshape(N,1) + + return X, Y, N, nb_var + +def normalization(X): + """ Normalize the provided matrix (substracts mean and divides by standard deviation) + + + Parameters + ---------- + X : data matrix of size [N, nb_var] + + with N : number of elements and nb_var : number of predictor variables + + Returns + ------- + X_norm : normalized data matrix of size [N, nb_var] + mu : means of the variables of sizede dimension [1,nb_var] + sigma : standar deviations of the variables of size [1,nb_var] + + """ + + mu = np.mean(X, 0) + sigma = np.std(X, 0) + X_norm = (X - mu) / sigma + + return X_norm, mu, sigma + +def sigmoid(z): + """ Compute the value of the sigmoid function applied to z + + Parameters + ---------- + z : can be a scalar value or a matrix + + Returns + ------- + s : sigmoid value of z. Same size as z + + """ + + s = 1 / (1 + np.exp(-z)) + + return s + +def compute_loss(X, Y, theta): + """ Compute the loss function value (log likelihood) + + Parameters + ---------- + X : data matrix of size [N, nb_var+1] + Y : matrix containg values of the target variable of size [N, 1] + theta : matrix containing the theta parameters of the linear model of size [1, nb_var+1] + + with N : number of elements and nb_var : number of predictor variables + + Returns + ------- + loss : loss function value (log likelihood) + """ + + N = X.shape[0] + + loss = - (Y*np.log(sigmoid(X.dot(theta.T))) + (1-Y)*np.log(1-sigmoid(X.dot(theta.T)))).sum() / N + + return loss + +def gradient_descent(X, Y, theta, alpha, nb_iters): + """ Training to compute the logistic regression parameters by gradient descent + + Parameters + ---------- + X : data matrix of size [N, nb_var+1] + Y : matrix containg values of the target variable of size [N, 1] + theta : matrix containing the theta parameters of the logistic model of size [1, nb_var+1] + alpha : learning rate + nb_iters : number of iterations + + with N : number of elements and nb_var : number of predictor variables + + + Returns + ------- + theta : matrix containing the theta parameters learnt by gradient descent of size [1, nb_var+1] + J_history : list containg the loss function values for each iteration of length nb_iters + + + """ + + # Init of useful variables + N = X.shape[0] + J_history = np.zeros(nb_iters) + + for i in range(0, nb_iters): + + error = sigmoid(X.dot(theta.T)) - Y + theta -= (alpha/N)*np.sum(X*error, 0) + + J_history[i] = compute_loss(X, Y, theta) + + + return theta, J_history + +def prediction(X,theta): + """ Predict the class of each element in X + + Parameters + ---------- + X : data matrix of size [N, nb_var+1] + Y : matrix containg values of the target variable of size [N, 1] + theta : matrix containing the theta parameters of the logistic model of size [1, nb_var+1] + + with N : number of elements and nb_var : number of predictor variables + + + Returns + ------- + p : matrix of size [N,1] providing the class of each element in X (either 0 or 1) + + """ + + p = sigmoid(X.dot(theta.T)) + pos = np.where(p >= 0.5) + neg = np.where(p < 0.5) + + p[pos] = 1 + p[neg] = 0 + + return p + +def classification_rate(Ypred,Y): + """ Compute the classification rate (proportion of correctly classified elements) + + Parameters + ---------- + Ypred : matrix containing the predicted values of the class of size [N, 1] + Y : matrix containing the values of the target variable of size [N, 1] + + with N : number of elements + + + Returns + ------- + r : classification rate + + """ + + N = Ypred.size + nb_errors = np.sum(np.abs(Ypred-Y)) + + t = (N-nb_errors) / N + + return t + +def display(X, Y): + """ Display of data in 2 dimensions (2 dimensions of X) and class representation (provided by Y) by a color + + Parameters + ---------- + X : data matrix of size [N, nb_var+1] + Y : matrix containg values of the target variable of size [N, 1] + + with N : number of elements and nb_var : number of predictor variables + + Returns + ------- + None + + """ + + pos = np.where(Y == 1)[0] + neg = np.where(Y == 0)[0] + plt.scatter(X[pos, 1], X[pos, 2], marker="+", c='b') + plt.scatter(X[neg, 1], X[neg, 2], marker="o", c='r') + + +if __name__ == "__main__": + # ===================== Part 1: Data loading and normalization ===================== + print("Data loading ...") + + X, Y, N, nb_var = read_data("scores.txt") + + # Print of the ten first examples of the dataset + print("Print of the ten first examples of the dataset : ") + for i in range(0, 10): + print(f"x = {X[i,:]}, y = {Y[i]}") + + # Normalization of variables + print("Normalization of variables ...") + + X, mu, sigma = normalization(X) + + # Add one column of 1 values to X (for theta 0) + X = np.hstack((np.ones((N,1)), X)) + + # Display in 2D of data points and actual class representation by a color + if nb_var == 2 : + plt.figure(0) + plt.title("Coordinates of data points in 2D - Reality") + display(X,Y) + + # ===================== Part 2: Gradient descent ===================== + print("Training by gradient descent ...") + + # Choice of the learning rate and number of iterations + alpha = 0.01 + nb_iters = 10000 + + # Initialization of theta and call to the gradient descent function + theta = np.zeros((1,nb_var+1)) + theta, J_history = gradient_descent(X, Y, theta, alpha, nb_iters) + + # Display of the loss function values obtained during gradient descent training + plt.figure(1) + plt.title("Loss function values obtained during gradient descent training") + plt.plot(np.arange(J_history.size), J_history) + plt.xlabel("Nomber of iterations") + plt.ylabel("Loss function J") + + # Print of theta values + print(f"Theta computed by gradient descent : {theta}") + + # Evaluation of the model + Ypred = prediction(X,theta) + + print("Classification rate : ", classification_rate(Ypred,Y)) + + # Display in 2D of data points and predicted class representation by a color + if nb_var == 2 : + plt.figure(2) + plt.title("Coordinates of data points in 2D - Prediction") + display(X,Ypred) + + plt.show() + + print("Logistic Regression completed.") diff --git a/Practical_sessions/Session_2/Subject_2_Neural_Networks.pdf b/Practical_sessions/Session_2/Subject_2_Neural_Networks.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8de18ffc4611c0be1bf3c2ee322848e99ae20f4f GIT binary patch literal 74821 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 XB(bOjTxy#e8=Dw$sj9mAyKw;kodf$A literal 0 HcmV?d00001 diff --git a/Practical_sessions/Session_2/food_truck.txt b/Practical_sessions/Session_2/food_truck.txt new file mode 100644 index 0000000..0f88ccb --- /dev/null +++ b/Practical_sessions/Session_2/food_truck.txt @@ -0,0 +1,97 @@ +6.1101,17.592 +5.5277,9.1302 +8.5186,13.662 +7.0032,11.854 +5.8598,6.8233 +8.3829,11.886 +7.4764,4.3483 +8.5781,12 +6.4862,6.5987 +5.0546,3.8166 +5.7107,3.2522 +14.164,15.505 +5.734,3.1551 +8.4084,7.2258 +5.6407,0.71618 +5.3794,3.5129 +6.3654,5.3048 +5.1301,0.56077 +6.4296,3.6518 +7.0708,5.3893 +6.1891,3.1386 +20.27,21.767 +5.4901,4.263 +6.3261,5.1875 +5.5649,3.0825 +18.945,22.638 +12.828,13.501 +10.957,7.0467 +13.176,14.692 +22.203,24.147 +5.2524,-1.22 +6.5894,5.9966 +9.2482,12.134 +5.8918,1.8495 +8.2111,6.5426 +7.9334,4.5623 +8.0959,4.1164 +5.6063,3.3928 +12.836,10.117 +6.3534,5.4974 +5.4069,0.55657 +6.8825,3.9115 +11.708,5.3854 +5.7737,2.4406 +7.8247,6.7318 +7.0931,1.0463 +5.0702,5.1337 +5.8014,1.844 +11.7,8.0043 +5.5416,1.0179 +7.5402,6.7504 +5.3077,1.8396 +7.4239,4.2885 +7.6031,4.9981 +6.3328,1.4233 +6.3589,-1.4211 +6.2742,2.4756 +5.6397,4.6042 +9.3102,3.9624 +9.4536,5.4141 +8.8254,5.1694 +5.1793,-0.74279 +21.279,17.929 +14.908,12.054 +18.959,17.054 +7.2182,4.8852 +8.2951,5.7442 +10.236,7.7754 +5.4994,1.0173 +20.341,20.992 +10.136,6.6799 +7.3345,4.0259 +6.0062,1.2784 +7.2259,3.3411 +5.0269,-2.6807 +6.5479,0.29678 +7.5386,3.8845 +5.0365,5.7014 +10.274,6.7526 +5.1077,2.0576 +5.7292,0.47953 +5.1884,0.20421 +6.3557,0.67861 +9.7687,7.5435 +6.5159,5.3436 +8.5172,4.2415 +9.1802,6.7981 +6.002,0.92695 +5.5204,0.152 +5.0594,2.8214 +5.7077,1.8451 +7.6366,4.2959 +5.8707,7.2029 +5.3054,1.9869 +8.2934,0.14454 +13.394,9.0551 +5.4369,0.61705 diff --git a/Practical_sessions/Session_2/houses.txt b/Practical_sessions/Session_2/houses.txt new file mode 100644 index 0000000..79e9a80 --- /dev/null +++ b/Practical_sessions/Session_2/houses.txt @@ -0,0 +1,47 @@ +2104,3,399900 +1600,3,329900 +2400,3,369000 +1416,2,232000 +3000,4,539900 +1985,4,299900 +1534,3,314900 +1427,3,198999 +1380,3,212000 +1494,3,242500 +1940,4,239999 +2000,3,347000 +1890,3,329999 +4478,5,699900 +1268,3,259900 +2300,4,449900 +1320,2,299900 +1236,3,199900 +2609,4,499998 +3031,4,599000 +1767,3,252900 +1888,2,255000 +1604,3,242900 +1962,4,259900 +3890,3,573900 +1100,3,249900 +1458,3,464500 +2526,3,469000 +2200,3,475000 +2637,3,299900 +1839,2,349900 +1000,1,169900 +2040,4,314900 +3137,3,579900 +1811,4,285900 +1437,3,249900 +1239,3,229900 +2132,4,345000 +4215,4,549000 +2162,4,287000 +1664,2,368500 +2238,3,329900 +2567,4,314000 +1200,3,299000 +852,2,179900 +1852,4,299900 +1203,3,239500 diff --git a/Practical_sessions/Session_2/iris.txt b/Practical_sessions/Session_2/iris.txt new file mode 100644 index 0000000..1de4bba --- /dev/null +++ b/Practical_sessions/Session_2/iris.txt @@ -0,0 +1,150 @@ +5.1,3.5,1.4,0.2,0 +4.9,3.0,1.4,0.2,0 +4.7,3.2,1.3,0.2,0 +4.6,3.1,1.5,0.2,0 +5.0,3.6,1.4,0.2,0 +5.4,3.9,1.7,0.4,0 +4.6,3.4,1.4,0.3,0 +5.0,3.4,1.5,0.2,0 +4.4,2.9,1.4,0.2,0 +4.9,3.1,1.5,0.1,0 +5.4,3.7,1.5,0.2,0 +4.8,3.4,1.6,0.2,0 +4.8,3.0,1.4,0.1,0 +4.3,3.0,1.1,0.1,0 +5.8,4.0,1.2,0.2,0 +5.7,4.4,1.5,0.4,0 +5.4,3.9,1.3,0.4,0 +5.1,3.5,1.4,0.3,0 +5.7,3.8,1.7,0.3,0 +5.1,3.8,1.5,0.3,0 +5.4,3.4,1.7,0.2,0 +5.1,3.7,1.5,0.4,0 +4.6,3.6,1.0,0.2,0 +5.1,3.3,1.7,0.5,0 +4.8,3.4,1.9,0.2,0 +5.0,3.0,1.6,0.2,0 +5.0,3.4,1.6,0.4,0 +5.2,3.5,1.5,0.2,0 +5.2,3.4,1.4,0.2,0 +4.7,3.2,1.6,0.2,0 +4.8,3.1,1.6,0.2,0 +5.4,3.4,1.5,0.4,0 +5.2,4.1,1.5,0.1,0 +5.5,4.2,1.4,0.2,0 +4.9,3.1,1.5,0.1,0 +5.0,3.2,1.2,0.2,0 +5.5,3.5,1.3,0.2,0 +4.9,3.1,1.5,0.1,0 +4.4,3.0,1.3,0.2,0 +5.1,3.4,1.5,0.2,0 +5.0,3.5,1.3,0.3,0 +4.5,2.3,1.3,0.3,0 +4.4,3.2,1.3,0.2,0 +5.0,3.5,1.6,0.6,0 +5.1,3.8,1.9,0.4,0 +4.8,3.0,1.4,0.3,0 +5.1,3.8,1.6,0.2,0 +4.6,3.2,1.4,0.2,0 +5.3,3.7,1.5,0.2,0 +5.0,3.3,1.4,0.2,0 +7.0,3.2,4.7,1.4,1 +6.4,3.2,4.5,1.5,1 +6.9,3.1,4.9,1.5,1 +5.5,2.3,4.0,1.3,1 +6.5,2.8,4.6,1.5,1 +5.7,2.8,4.5,1.3,1 +6.3,3.3,4.7,1.6,1 +4.9,2.4,3.3,1.0,1 +6.6,2.9,4.6,1.3,1 +5.2,2.7,3.9,1.4,1 +5.0,2.0,3.5,1.0,1 +5.9,3.0,4.2,1.5,1 +6.0,2.2,4.0,1.0,1 +6.1,2.9,4.7,1.4,1 +5.6,2.9,3.6,1.3,1 +6.7,3.1,4.4,1.4,1 +5.6,3.0,4.5,1.5,1 +5.8,2.7,4.1,1.0,1 +6.2,2.2,4.5,1.5,1 +5.6,2.5,3.9,1.1,1 +5.9,3.2,4.8,1.8,1 +6.1,2.8,4.0,1.3,1 +6.3,2.5,4.9,1.5,1 +6.1,2.8,4.7,1.2,1 +6.4,2.9,4.3,1.3,1 +6.6,3.0,4.4,1.4,1 +6.8,2.8,4.8,1.4,1 +6.7,3.0,5.0,1.7,1 +6.0,2.9,4.5,1.5,1 +5.7,2.6,3.5,1.0,1 +5.5,2.4,3.8,1.1,1 +5.5,2.4,3.7,1.0,1 +5.8,2.7,3.9,1.2,1 +6.0,2.7,5.1,1.6,1 +5.4,3.0,4.5,1.5,1 +6.0,3.4,4.5,1.6,1 +6.7,3.1,4.7,1.5,1 +6.3,2.3,4.4,1.3,1 +5.6,3.0,4.1,1.3,1 +5.5,2.5,4.0,1.3,1 +5.5,2.6,4.4,1.2,1 +6.1,3.0,4.6,1.4,1 +5.8,2.6,4.0,1.2,1 +5.0,2.3,3.3,1.0,1 +5.6,2.7,4.2,1.3,1 +5.7,3.0,4.2,1.2,1 +5.7,2.9,4.2,1.3,1 +6.2,2.9,4.3,1.3,1 +5.1,2.5,3.0,1.1,1 +5.7,2.8,4.1,1.3,1 +6.3,3.3,6.0,2.5,2 +5.8,2.7,5.1,1.9,2 +7.1,3.0,5.9,2.1,2 +6.3,2.9,5.6,1.8,2 +6.5,3.0,5.8,2.2,2 +7.6,3.0,6.6,2.1,2 +4.9,2.5,4.5,1.7,2 +7.3,2.9,6.3,1.8,2 +6.7,2.5,5.8,1.8,2 +7.2,3.6,6.1,2.5,2 +6.5,3.2,5.1,2.0,2 +6.4,2.7,5.3,1.9,2 +6.8,3.0,5.5,2.1,2 +5.7,2.5,5.0,2.0,2 +5.8,2.8,5.1,2.4,2 +6.4,3.2,5.3,2.3,2 +6.5,3.0,5.5,1.8,2 +7.7,3.8,6.7,2.2,2 +7.7,2.6,6.9,2.3,2 +6.0,2.2,5.0,1.5,2 +6.9,3.2,5.7,2.3,2 +5.6,2.8,4.9,2.0,2 +7.7,2.8,6.7,2.0,2 +6.3,2.7,4.9,1.8,2 +6.7,3.3,5.7,2.1,2 +7.2,3.2,6.0,1.8,2 +6.2,2.8,4.8,1.8,2 +6.1,3.0,4.9,1.8,2 +6.4,2.8,5.6,2.1,2 +7.2,3.0,5.8,1.6,2 +7.4,2.8,6.1,1.9,2 +7.9,3.8,6.4,2.0,2 +6.4,2.8,5.6,2.2,2 +6.3,2.8,5.1,1.5,2 +6.1,2.6,5.6,1.4,2 +7.7,3.0,6.1,2.3,2 +6.3,3.4,5.6,2.4,2 +6.4,3.1,5.5,1.8,2 +6.0,3.0,4.8,1.8,2 +6.9,3.1,5.4,2.1,2 +6.7,3.1,5.6,2.4,2 +6.9,3.1,5.1,2.3,2 +5.8,2.7,5.1,1.9,2 +6.8,3.2,5.9,2.3,2 +6.7,3.3,5.7,2.5,2 +6.7,3.0,5.2,2.3,2 +6.3,2.5,5.0,1.9,2 +6.5,3.0,5.2,2.0,2 +6.2,3.4,5.4,2.3,2 +5.9,3.0,5.1,1.8,2 \ No newline at end of file diff --git a/Practical_sessions/Session_2/nn_regression.py b/Practical_sessions/Session_2/nn_regression.py new file mode 100644 index 0000000..e80e6c6 --- /dev/null +++ b/Practical_sessions/Session_2/nn_regression.py @@ -0,0 +1,323 @@ + +import matplotlib.pyplot as plt +import numpy as np + +def read_data(file_name, delimiter=','): + """ Reads the file containing the data and returns the corresponding matrices + + Parameters + ---------- + file_name : name of the file containing the data + delimiter : character separating columns in the file ("," by default) + + Returns + ------- + x : data matrix of size [N, num_vars] + d : matrix containing the target variable values of size [N, num_targets] + N : number of elements + num_vars : number of predictor variables + num_targets : number of target variables + + """ + + data = np.loadtxt(file_name, delimiter=delimiter) + + ####################################################### + ##### To complete (and remove the pass statement) ##### + ####################################################### + pass + + # return x, d, N, num_vars, num_targets + +def normalization(x): + """ Normalizes the data by centering and scaling the predictor variables + + Parameters + ---------- + X : data matrix of size [N, num_vars] + + with N : number of elements and num_vars : number of predictor variables + + Returns + ------- + X_norm : centered-scaled data matrix of size [N, num_vars] + mu : mean of the variables of size [1, num_vars] + sigma : standard deviation of the variables of size [1, num_vars] + + """ + + ####################################################### + ##### To complete (and remove the pass statement) ##### + ####################################################### + pass + + # return x_norm, mu, sigma + +def split_data(x, d, val_prop=0.2, test_prop=0.2): + """ Splits the initial data into three distinct subsets for training, validation, and testing + + Parameters + ---------- + x : data matrix of size [N, num_vars] + d : matrix of target values [N, num_targets] + val_prop : proportion of validation data over the entire dataset (between 0 and 1) + test_prop : proportion of test data over the entire dataset (between 0 and 1) + + with N : number of elements, num_vars : number of predictor variables, num_targets : number of target variables + + Returns + ------- + x_train : training data matrix + d_train : training target values matrix + x_val : validation data matrix + d_val : validation target values matrix + x_test : test data matrix + d_test : test target values matrix + + """ + + ####################################################### + ##### To complete (and remove the pass statement) ##### + ####################################################### + pass + + # return x_train, d_train, x_val, d_val, x_test, d_test + +def calculate_mse_cost(y, d): + """ Calculates the value of the MSE (mean squared error) cost function + + Parameters + ---------- + y : matrix of predicted data + d : matrix of actual data + + Returns + ------- + cost : value corresponding to the MSE cost function (mean squared error) + + """ + + ####################################################### + ##### To complete (and remove the pass statement) ##### + ####################################################### + pass + + # return cost + +def forward_pass(x, W, b, activation): + """ Performs a forward pass in the neural network + + Parameters + ---------- + x : input matrix, of size num_vars x N + W : list containing the weight matrices of the network + b : list containing the bias matrices of the network + activation : list containing the activation functions of the network layers + + with N : number of elements, num_vars : number of predictor variables + + Returns + ------- + a : list containing the input potentials of the network layers + h : list containing the outputs of the network layers + + """ + ####################################################### + ##### To complete (and remove the pass statement) ##### + ####################################################### + pass + + # return a, h + +def backward_pass(delta_h, a, h, W, activation): + """ Performs a backward pass in the neural network (backpropagation) + + Parameters + ---------- + delta_h : matrix containing the gradient of the cost with respect to the output of the network + a : list containing the input potentials of the network layers + h : list containing the outputs of the network layers + W : list containing the weight matrices of the network + activation : list containing the activation functions of the network layers + + Returns + ------- + delta_W : list containing the gradient matrices of the network layer weights + delta_b : list containing the gradient matrices of the network layer biases + + """ + + ####################################################### + ##### To complete (and remove the pass statement) ##### + ####################################################### + pass + + # return delta_W, delta_b + +def sigmoid(z, deriv=False): + """ Calculates the value of the sigmoid function or its derivative applied to z + + Parameters + ---------- + z : can be a scalar or a matrix + deriv : boolean. If False returns the value of the sigmoid function, if True returns its derivative + + Returns + ------- + s : value of the sigmoid function applied to z or its derivative. Same dimension as z + + """ + + ####################################################### + ##### To complete (and remove the pass statement) ##### + ####################################################### + pass + + # return s + +def linear(z, deriv=False): + """ Calculates the value of the linear function or its derivative applied to z + + Parameters + ---------- + z : can be a scalar or a matrix + deriv : boolean. If False returns the value of the linear function, if True returns its derivative + + Returns + ------- + s : value of the linear function applied to z or its derivative. Same dimension as z + + """ + ####################################################### + ##### To complete (and remove the pass statement) ##### + ####################################################### + pass + + # return s + +def relu(z, deriv=False): + """ Calculates the value of the relu function or its derivative applied to z + + Parameters + ---------- + z : can be a scalar or a matrix + deriv : boolean. If False returns the value of the relu function, if True returns its derivative + + Returns + ------- + s : value of the relu function applied to z or its derivative. Same dimension as z + + """ + + ####################################################### + ##### To complete (and remove the pass statement) ##### + ####################################################### + pass + + # return s + + +# ===================== Part 1: Data Reading and Normalization ===================== +print("Reading data ...") + +x, d, N, num_vars, num_targets = read_data("food_truck.txt") +# x, d, N, num_vars, num_targets = read_data("houses.txt") + +# Displaying the first 10 examples from the dataset +print("Displaying the first 10 examples from the dataset: ") +for i in range(0, 10): + print(f"x = {x[i,:]}, d = {d[i]}") + +# Normalizing the variables (centering and scaling) +print("Normalizing the variables ...") +x, mu, sigma = normalization(x) +dmax = d.max() +d = d / dmax + +# Splitting the data into training, validation, and test subsets +x_train, d_train, x_val, d_val, x_test, d_test = split_data(x, d) + +# ===================== Part 2: Training ===================== + +# Choosing the learning rate and number of iterations +alpha = 0.001 +num_iters = 500 +train_costs = np.zeros(num_iters) +val_costs = np.zeros(num_iters) + +# Network dimensions +D_c = [num_vars, 5, 10, num_targets] # list containing the number of neurons for each layer +activation = [relu, sigmoid, linear] # list containing the activation functions for the hidden layers and the output layer + +# Random initialization of the network weights +W = [] +b = [] +for i in range(len(D_c)-1): + W.append(2 * np.random.random((D_c[i+1], D_c[i])) - 1) + b.append(np.zeros((D_c[i+1],1))) + +x_train = x_train.T # Data is presented as column vectors at the input of the network +d_train = d_train.T + +x_val = x_val.T # Data is presented as column vectors at the input of the network +d_val = d_val.T + +x_test = x_test.T # Data is presented as column vectors at the input of the network +d_test = d_test.T + +for t in range(num_iters): + + ############################################################################# + # Forward pass: calculating predicted output y on validation data # + ############################################################################# + a, h = forward_pass(x_val, W, b, activation) + y_val = h[-1] # Predicted output + + ############################################################################### + # Forward pass: calculating predicted output y on training data # + ############################################################################### + a, h = forward_pass(x_train, W, b, activation) + y_train = h[-1] # Predicted output + + ########################################### + # Calculating the MSE loss function # + ########################################### + train_costs[t] = calculate_mse_cost(y_train, d_train) + val_costs[t] = calculate_mse_cost(y_val, d_val) + + #################################### + # Backward pass: backpropagation # + #################################### + delta_h = (y_train-d_train) # For the last layer + delta_W, delta_b = backward_pass(delta_h, a, h, W, activation) + + ############################################# + # Updating weights and biases # + ############################################# + for i in range(len(b)-1,-1,-1): + b[i] -= alpha * delta_b[i] + W[i] -= alpha * delta_W[i] + +print("Final cost on the training set: ", train_costs[-1]) +print("Final cost on the validation set: ", val_costs[-1]) + +# Plotting the evolution of the cost function during backpropagation +plt.figure(0) +plt.title("Evolution of the cost function during backpropagation") +plt.plot(np.arange(train_costs.size), train_costs, label="Training") +plt.plot(np.arange(val_costs.size), val_costs, label="Validation") +plt.legend(loc="upper left") +plt.xlabel("Number of iterations") +plt.ylabel("Cost") +plt.show() + +# ===================== Part 3: Evaluation on the test set ===================== + +####################################################################### +# Forward pass: calculating predicted output y on test data # +####################################################################### +a, h = forward_pass(x_test, W, b, activation) +y_test = h[-1] # Predicted output + +cost = calculate_mse_cost(y_test, d_test) +print("Test set cost: ", cost) diff --git a/Practical_sessions/Session_2/scores.txt b/Practical_sessions/Session_2/scores.txt new file mode 100644 index 0000000..3a5f952 --- /dev/null +++ b/Practical_sessions/Session_2/scores.txt @@ -0,0 +1,100 @@ +34.62365962451697,78.0246928153624,0 +30.28671076822607,43.89499752400101,0 +35.84740876993872,72.90219802708364,0 +60.18259938620976,86.30855209546826,1 +79.0327360507101,75.3443764369103,1 +45.08327747668339,56.3163717815305,0 +61.10666453684766,96.51142588489624,1 +75.02474556738889,46.55401354116538,1 +76.09878670226257,87.42056971926803,1 +84.43281996120035,43.53339331072109,1 +95.86155507093572,38.22527805795094,0 +75.01365838958247,30.60326323428011,0 +82.30705337399482,76.48196330235604,1 +69.36458875970939,97.71869196188608,1 +39.53833914367223,76.03681085115882,0 +53.9710521485623,89.20735013750205,1 +69.07014406283025,52.74046973016765,1 +67.94685547711617,46.67857410673128,0 +70.66150955499435,92.92713789364831,1 +76.97878372747498,47.57596364975532,1 +67.37202754570876,42.83843832029179,0 +89.67677575072079,65.79936592745237,1 +50.534788289883,48.85581152764205,0 +34.21206097786789,44.20952859866288,0 +77.9240914545704,68.9723599933059,1 +62.27101367004632,69.95445795447587,1 +80.1901807509566,44.82162893218353,1 +93.114388797442,38.80067033713209,0 +61.83020602312595,50.25610789244621,0 +38.78580379679423,64.99568095539578,0 +61.379289447425,72.80788731317097,1 +85.40451939411645,57.05198397627122,1 +52.10797973193984,63.12762376881715,0 +52.04540476831827,69.43286012045222,1 +40.23689373545111,71.16774802184875,0 +54.63510555424817,52.21388588061123,0 +33.91550010906887,98.86943574220611,0 +64.17698887494485,80.90806058670817,1 +74.78925295941542,41.57341522824434,0 +34.1836400264419,75.2377203360134,0 +83.90239366249155,56.30804621605327,1 +51.54772026906181,46.85629026349976,0 +94.44336776917852,65.56892160559052,1 +82.36875375713919,40.61825515970618,0 +51.04775177128865,45.82270145776001,0 +62.22267576120188,52.06099194836679,0 +77.19303492601364,70.45820000180959,1 +97.77159928000232,86.7278223300282,1 +62.07306379667647,96.76882412413983,1 +91.56497449807442,88.69629254546599,1 +79.94481794066932,74.16311935043758,1 +99.2725269292572,60.99903099844988,1 +90.54671411399852,43.39060180650027,1 +34.52451385320009,60.39634245837173,0 +50.2864961189907,49.80453881323059,0 +49.58667721632031,59.80895099453265,0 +97.64563396007767,68.86157272420604,1 +32.57720016809309,95.59854761387875,0 +74.24869136721598,69.82457122657193,1 +71.79646205863379,78.45356224515052,1 +75.3956114656803,85.75993667331619,1 +35.28611281526193,47.02051394723416,0 +56.25381749711624,39.26147251058019,0 +30.05882244669796,49.59297386723685,0 +44.66826172480893,66.45008614558913,0 +66.56089447242954,41.09209807936973,0 +40.45755098375164,97.53518548909936,1 +49.07256321908844,51.88321182073966,0 +80.27957401466998,92.11606081344084,1 +66.74671856944039,60.99139402740988,1 +32.72283304060323,43.30717306430063,0 +64.0393204150601,78.03168802018232,1 +72.34649422579923,96.22759296761404,1 +60.45788573918959,73.09499809758037,1 +58.84095621726802,75.85844831279042,1 +99.82785779692128,72.36925193383885,1 +47.26426910848174,88.47586499559782,1 +50.45815980285988,75.80985952982456,1 +60.45555629271532,42.50840943572217,0 +82.22666157785568,42.71987853716458,0 +88.9138964166533,69.80378889835472,1 +94.83450672430196,45.69430680250754,1 +67.31925746917527,66.58935317747915,1 +57.23870631569862,59.51428198012956,1 +80.36675600171273,90.96014789746954,1 +68.46852178591112,85.59430710452014,1 +42.0754545384731,78.84478600148043,0 +75.47770200533905,90.42453899753964,1 +78.63542434898018,96.64742716885644,1 +52.34800398794107,60.76950525602592,0 +94.09433112516793,77.15910509073893,1 +90.44855097096364,87.50879176484702,1 +55.48216114069585,35.57070347228866,0 +74.49269241843041,84.84513684930135,1 +89.84580670720979,45.35828361091658,1 +83.48916274498238,48.38028579728175,1 +42.2617008099817,87.10385094025457,1 +99.31500880510394,68.77540947206617,1 +55.34001756003703,64.9319380069486,1 +74.77589300092767,89.52981289513276,1 -- GitLab