diff --git a/.gitignore b/.gitignore index e43b0f9..f1f867e 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .DS_Store +.vscode/* diff --git a/cours_ex1.py b/cours_ex1.py new file mode 100644 index 0000000..ef41d9b --- /dev/null +++ b/cours_ex1.py @@ -0,0 +1,66 @@ +import random +import numpy as np +from numpy import arange +import matplotlib.pyplot as plt + +random.seed(0) + +def line_w_gauss_noise(inter,slope,noise,numPoints): + x = np.zeros(shape=(numPoints, 2)) + y = np.zeros(shape=numPoints) + for i in range(0, numPoints): + x[i][0] = i + x[i][1] = 1 + y[i] = (i + inter) + random.uniform(0, noise) * slope + return x, y + + +def MSE(x,y,weights): + N,D = np.shape(x) + x_T = x.transpose() + y_hat = np.dot(weights,x_T) + return np.sum((y - y_hat)**2) / N + + +def dMSE(x,y,weights): + N = len(x) + inter = np.sum(np.dot(np.dot(x[:,1],weights[1]) - y,x[:,1])) * (2/N) + slope = np.sum(np.dot(x[:,0],weights[0]) - y,) * (2/N) + new_weight = np.array([slope,inter]) + return new_weight + +def gradient_desscent(x,y,alpha,weights,iter): + losses = list() + costs = list() + for n in range(iter): + cost = MSE(x,y,weights) + loss = np.sum(y - np.dot(x,weights)) + losses.append(loss) + costs.append(cost) + print(cost) + print(loss) + print(n) + if np.abs(losses[n]) > np.abs(losses[n-1]): + break + + weights = weights - (alpha * dMSE(x,y,weights)) + return weights,costs,losses + +if __name__ == '__main__': + x,y = line_w_gauss_noise(1,2,5,100) + num_var = len(x.transpose()) + w = np.ones(num_var) + + result,cost,loss = gradient_desscent(x,y,0.001,w,80) + print(result) + y_hat = [] + for i in x[:,0]: + y_hat.append(result[1]+(result[0]*i)) + + plt.scatter(x[:,0],y) + plt.plot(x[:,0],y_hat) + plt.show() + + #plt.plot(cost) + #plt.plot(loss) + #plt.show()