sábado, 17 de fevereiro de 2018

Gradiente descendente em python para problemas em 1° grau


O seguinte código utiliza o recurso gradiente descendente para descobrir dois parâmetros, theta e theta1, que irão descrever uma equação de primeiro grau no tipo y = theta + theta*x.

Utilização: substitua os dados de experiência no código abaixo no formato [ (x,y),(x1,y1)...(xn,yn)]. também é necessário substituir o valor da variável "m", que corresponde ao quantidade dos dados de experiência. O parâmetro alfa é a velocidade com que o algorítimo converge para a solução, um valor de alfa muito alto poderá divergir, em um fenômeno chamado de "overshooting", não chegando assim a uma solução. Ao rodar o código abaixo, será impresso os valores de theta e theta1.


#coloque aqui os dados de experiência
experiencia = [
    (1, 0.5),
    (2, 1),
    (4, 2),
    (0, 0)
    ]
 m = 4

#-- parametros inicias
theta = 0
theta1 = 0
#x = 0
m = 4

#-- velocidade de aprendizado
alfa = 0.001

#-- funcão de representação dos dados, nesse caso primeiro grau
#h = theta + theta1 * x




#gradient descent - algoritimo de amortização do custo
#faz a diferença entre a função custo e representação, diminuir

def aprender(theta, theta1):
    while (True):     
        #print (dataset(0,theta, theta1))
        p_theta = theta - (alfa * (1/m) * dataset(0, theta, theta1))
     
         #print (str(dataset(1,theta, theta1)) + " t1")
        theta1 = theta1 - (alfa * (1/m) * dataset(1, theta, theta1))
     
        theta = p_theta
        #condição de saida: derivada menor que |0.1|
        if ((dataset(1,theta, theta1) <= 0.1) and (dataset(1,theta, theta1) >= -0.1) and (dataset(0,theta, theta1) <= 0.1) and (dataset(0,theta, theta1) >= -0.1)): break   

    print (theta)
    print (theta1)

 

def dataset( opcao, theta, theta1 ):
    somatorio = 0
    for x,y in experiencia:
        h = theta + theta1 * x
        if opcao == 0: somatorio = somatorio + (h - y)
        else: somatorio = somatorio + ((h - y) * x)
    return somatorio

aprender(theta, theta1)

Gradiente descendente em python para problemas em 1° grau

O seguinte código utiliza o recurso gradiente descendente para descobrir dois parâmetros, theta e theta1, que irão descrever uma equação d...