""" lab_utils_common.py functions common to all optional labs, Course 1, Week 2 """ import numpy as np import matplotlib.pyplot as plt plt.style.use('./deeplearning.mplstyle') dlblue = '#0096ff'; dlorange = '#FF9300'; dldarkred='#C00000'; dlmagenta='#FF40FF'; dlpurple='#7030A0'; dlcolors = [dlblue, dlorange, dldarkred, dlmagenta, dlpurple] dlc = dict(dlblue = '#0096ff', dlorange = '#FF9300', dldarkred='#C00000', dlmagenta='#FF40FF', dlpurple='#7030A0') ########################################################## # Regression Routines ########################################################## #Function to calculate the cost def compute_cost_matrix(X, y, w, b, verbose=False): """ Computes the gradient for linear regression Args: X (ndarray (m,n)): Data, m examples with n features y (ndarray (m,)) : target values w (ndarray (n,)) : model parameters b (scalar) : model parameter verbose : (Boolean) If true, print out intermediate value f_wb Returns cost: (scalar) """ m = X.shape[0] # calculate f_wb for all examples. f_wb = X @ w + b # calculate cost total_cost = (1/(2*m)) * np.sum((f_wb-y)**2) if verbose: print("f_wb:") if verbose: print(f_wb) return total_cost def compute_gradient_matrix(X, y, w, b): """ Computes the gradient for linear regression Args: X (ndarray (m,n)): Data, m examples with n features y (ndarray (m,)) : target values w (ndarray (n,)) : model parameters b (scalar) : model parameter Returns dj_dw (ndarray (n,1)): The gradient of the cost w.r.t. the parameters w. dj_db (scalar): The gradient of the cost w.r.t. the parameter b. """ m,n = X.shape f_wb = X @ w + b e = f_wb - y dj_dw = (1/m) * (X.T @ e) dj_db = (1/m) * np.sum(e) return dj_db,dj_dw # Loop version of multi-variable compute_cost def compute_cost(X, y, w, b): """ compute cost Args: X (ndarray (m,n)): Data, m examples with n features y (ndarray (m,)) : target values w (ndarray (n,)) : model parameters b (scalar) : model parameter Returns cost (scalar) : cost """ m = X.shape[0] cost = 0.0 for i in range(m): f_wb_i = np.dot(X[i],w) + b #(n,)(n,)=scalar cost = cost + (f_wb_i - y[i])**2 cost = cost/(2*m) return cost def compute_gradient(X, y, w, b): """ Computes the gradient for linear regression Args: X (ndarray (m,n)): Data, m examples with n features y (ndarray (m,)) : target values w (ndarray (n,)) : model parameters b (scalar) : model parameter Returns dj_dw (ndarray Shape (n,)): The gradient of the cost w.r.t. the parameters w. dj_db (scalar): The gradient of the cost w.r.t. the parameter b. """ m,n = X.shape #(number of examples, number of features) dj_dw = np.zeros((n,)) dj_db = 0. for i in range(m): err = (np.dot(X[i], w) + b) - y[i] for j in range(n): dj_dw[j] = dj_dw[j] + err * X[i,j] dj_db = dj_db + err dj_dw = dj_dw/m dj_db = dj_db/m return dj_db,dj_dw