113 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
""" 
 | 
						|
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
 | 
						|
 |