# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     name: python3
# ---

# + [markdown] id="view-in-github" colab_type="text"
# <a href="https://colab.research.google.com/github/jscienciadados/Ocean_JornadaPython_Intro_03_2021/blob/main/Matematica_para_Machine_Learning.ipynb" target="_parent"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/></a>

# + [markdown] id="QstktJDB4UKT"
# # Matematica para Machine Learning
#

# + [markdown] id="XVCBzY8lAHyJ"
# # Máximo e Mínimo Local
#
# As funçoes matematicas podem ter "colinas e vales": locais onde atingem um mínimo ou máximo.

# + colab={"base_uri": "https://localhost:8080/", "height": 252} id="Qe_m1KWQ5XUV" outputId="3556ca65-f521-4f96-8a47-de9eea803f7b"
from IPython.display import Image
Image('func1.png')


# + [markdown] id="MTGzF-XuAzbp"
# # Global (ou Absoluto) Máximo e Mínimo
#
# O maximo ou mínimo em toda a função é chamado de máximo ou mínimo "absoluto ou global".
# Existe apenas um máximo global e um mínimo global, mas apenas pode haver mais de um máximo ou mínimo local.

# + colab={"base_uri": "https://localhost:8080/", "height": 242} id="9kxgOXtk4p6_" outputId="419154e1-90cc-4a19-ea54-6edb72748976"
from IPython.display import Image
Image('func2.png')

# + colab={"base_uri": "https://localhost:8080/", "height": 691} id="mOTK8XMMBs6g" outputId="1c1e47c6-4540-4c20-abb8-9ba88b6d3299"
from IPython.display import Image
Image('gradiente1.png')

# + colab={"base_uri": "https://localhost:8080/", "height": 369} id="pxM97E-sB15o" outputId="6f6d2d84-65c4-4316-a516-5983a3a435cd"
from IPython.display import Image
Image('gradiente2.png')

# + [markdown] id="HXpYCiv6CG37"
# # Exemplo
#
# Encontre os minimos locais da função y =(x + 5)² começando do ponto x = 3
#
# Sabemos a resposta apenas olhando para o grafico y = (x + 5)² atinge seu mínimo quando x = -5 (ou seja, quando x = -5, y = 0). Portanto, x = -5 é o mínimo local e global da função.

# + colab={"base_uri": "https://localhost:8080/", "height": 817} id="dwdeiQcXB_uG" outputId="4637f8f1-e6d2-4025-d069-9651269e2276"
from IPython.display import Image
Image('grafico.png')

# + [markdown] id="CZyNHZXkDRW5"
# # Aplicando Gradiente Descendente

# + id="4e5Izd6UDBAV"
# O algoritmo inicia com o parâmetro x=3
cur_x = 3

# Learning rate
rate = 0.01

# Define quando parar o algoritmo
# Parar o loop quando a diferença entre os valores de x em 2 iterações consecutivas for menor que 0,000001
# ou quando o número de iterações exceder 10 mil
precision = 0.000001

# Inicializa o contador do passo anterior
previous_step_size = 1

# Número máximo de iterações
max_iters = 10000

# Contador de iterações
iters = 0

# Gradiente da função
df = lambda x: 2*(x+5)

# + colab={"base_uri": "https://localhost:8080/"} id="4jfaHM-aDkEg" outputId="3818a185-2dc7-4069-9a9d-d80c916ad63c"
while previous_step_size > precision and iters < max_iters:
   
    # Armazena o valor corrente de x em prev_x
    prev_x = cur_x
   
    # Aplica o Gradient descent
    cur_x = cur_x - rate * df(prev_x)
   
    # Altera o valor de x
    previous_step_size = abs(cur_x - prev_x)
   
    # Incrementa o número de iterações
    iters = iters + 1
   
    # Imprime as iterações
    print("Iteration", iters,"\nValor de x igual a ", cur_x)
   
print("\nO mínimo local da função ocorre em: ", cur_x)

# + id="ov98CmaEEAc9"


StarcoderdataJupyterScriptsDedupFiltered