240615
This commit is contained in:
112
week1/betaversion/lab_utils_common.py
Normal file
112
week1/betaversion/lab_utils_common.py
Normal file
@@ -0,0 +1,112 @@
|
||||
"""
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user