In [1]:
import numpy as np
In [2]:
def sigmoid(x):
'''
A função sigmoid
'''
g = np.array([x]).flatten()
s = 1 / (1 + np.exp(-x))
return s
In [3]:
def costFunctionReg(theta, X, y, alpha):
'''
A versão do GD que acabamos de estudar é denominada *Batch gradienteient Descent*.
Em cada iteração do algoritmo, todo o conjunto de treinamento é utilizado.
X = características (features)
y = alvo (target)
Lambda = Taxa de regularização
'''
m = y.size
h = sigmoid(X.dot(theta))
Reg = (alpha/(2*m))*np.sum(np.square(theta[1:]))
J = -1*(1/m)*(np.log(h).T.dot(y)+np.log(1-h).T.dot(1-y)) + Reg
if np.isnan(J[0]): return(np.inf)
return(J[0])
In [4]:
def gradientReg(theta, X, y, alpha):
m = y.size
h = sigmoid(X.dot(theta.reshape(-1,1)))
Reg = (alpha/m)*np.r_[[[0]],theta[1:].reshape(-1,1)]
grad = (1/m)*X.T.dot(h-y) + Reg
return np.c_[grad]