sexta-feira, 29 de maio de 2020

Como obter a raiz quadrada de um número com Python

Como obter a raiz quadrada de um número com Python

Usando a função Sqrt() do módulo de matemática

  1. Importe o módulo de matemática usando import math no início do programa.
  2. Descubra a raiz quadrada do número usando o método math.sqrt(número).
  3. Observe que um erro será gera se um número negativo for passado.
Exemplo
import math

print(math.sqrt(19))
# Lança um erro se um número negativo for passado
#print (math.sqrt (-19))

Escrevendo uma função

  1. Crie uma função que aceite um argumento.
  2. Então, se o número for negativo, não retorne nada. (Números imaginários é outro tópico para outra tentativa)
  3. Agora, como uma raiz quadrada de um número é simplesmente o número aumentado para a potência 0.5, aumente o número fornecido para a potência 0.5 usando a seguinte sintaxe:
  4. numeroexpoente​​=
    numero**expoente

  5. Isso nos dará a raiz quadrada do número.
  6. Por fim, imprima o resultado para o usuário.
Exemplo
def sqrt(n):
  if n < 0:
    return
  else
:
    return n ** 0.5

print(sqrt(19))

Fonte: How to take the square root of a number in Python
Licença: Creative Commons -Attribution -ShareAlike 4.0 (CC-BY-SA 4.0)

quinta-feira, 28 de maio de 2020

O que é um perceptron de várias camadas?

O que é um perceptron de várias camadas?

Um perceptron de várias camadas ( Multi-Layered Perceptron - MLP) é um dos modelos de redes neurais mais comuns usados no campo da aprendizagem profunda (Deep Learning). Muitas vezes referida como uma rede neural "baunilha", uma MLP é mais simples que os modelos complexos da era atual. No entanto, as técnicas introduzidas abriram caminho para novas redes neurais avançadas. O perceptron multicamada (MLP) é usado para uma variedade de tarefas, como análise de ações, identificação de imagens, detecção de spam e previsões de votação nas eleições.

A estrutura básica

Um perceptron de múltiplas camadas consiste em neurônios interconectados transferindo informações um para o outro, como o cérebro humano. Cada neurônio recebe um valor. A rede pode ser dividida em três camadas principais.

Camada de entrada

Esta é a camada inicial da rede que recebe uma entrada que será usada para produzir uma saída.

Camadas ocultas

A rede precisa ter pelo menos uma camada oculta. As camadas ocultas realizam cálculos e operações nos dados de entrada para produzir algo significativo.

Camada de saída

Os neurônios nesta camada exibem uma saída significativa.

Conexões

O MLP é uma rede neural feedforward, o que significa que os dados são transmitidos da camada de entrada para a camada de saída.
As conexões entre as camadas recebem pesos atribuídos. O peso de uma conexão especifica sua importância. Esse conceito é a espinha dorsal do processo de aprendizado de um MLP.

Enquanto as entradas tiram seus valores do ambiente, os valores de todos os outros neurônios são calculados através de uma função matemática que envolve os pesos e valores da camada anterior a ela.
Por exemplo, o valor do nó h5 pode ser:

h5 = h1.w8 + h2.w9

Backpropagation

Backpropagation é uma técnica usada para otimizar os pesos de um MLP usando as saídas como entradas.
Em uma MLP convencional, pesos aleatórios são atribuídos a todas as conexões. Esses pesos aleatórios propagam valores através da rede para produzir a saída real. Naturalmente, esse resultado seria diferente do esperado. A diferença entre os dois valores é chamada de erro.
Backpropagation refere-se ao processo de enviar esse erro de volta pela rede, reajustando os pesos automaticamente para que, eventualmente, o erro entre a saída real e a esperada seja minimizado.
Dessa maneira, a saída da iteração atual se torna a entrada e afeta a próxima saída. Isso é repetido até que a saída correta seja produzida. Os pesos no final do processo seriam aqueles nos quais a rede neural funciona corretamente.

Fonte: What is a multi-layered perceptron?
Licença: Creative Commons -Attribution -ShareAlike 4.0 (CC-BY-SA 4.0)

Como executar operações aritméticas no NumPy

Como executar operações aritméticas no NumPy

Uma característica interessante das matrizes NumPy é que podemos executar a mesma operação matemática em cada elemento com um único comando.
Nota: As operações exponencial e logarítmica são suportadas.

Exemplo
import numpy as np

arr = np.array([[5, 10], [15, 20]])
# Adiciona 10 para cada elemento
print("Adicionando 10: " + repr(arr + 10))

# Multiplicando cada elemento por 5
print("Multiplicando cada elemento por 5: " + repr(arr * 5))

# Subtraindo 5 de cada elemento
print("Subtraindo 5: " + repr(arr - 5))

# Multiplicação de matrizes
arr1 = np.array([[-8, 7], [17, 20], [8, -16], [11, 4]])
arr2 = np.array([[5, -5, 10, 20], [-8, 0, 13, 2]])
print("Multiplicando duas matrizes: " + repr(np.matmul(arr1, arr2)))

# Exponencial
arr3 = np.array([[1, 5], [2.5, 2]])

# Exponencial de cada elemento
print("Taking the exponential: " + repr(np.exp(arr3)))

# Cubo de cada elemento
print("Transformando cada elemento em uma potência de 3: " + repr(np.power(3, arr3)))

Estatísticas e agregação

Como o objetivo é produzir algo útil a partir de um conjunto de dados, o NumPy oferece várias ferramentas estatísticas, como mínimo, máximo, mediana, média e soma.

Exemplo
import numpy as np

arr = np.array([[18, 5, -25],
                [-10, 30, 7],
                [8, 16, -2]])

print("Mínimo: ", arr.min())
print("Máximo: ", arr.max())
print("Soma: ", np.sum(arr))
print("Média ", np.mean(arr))
print("Mediano: ", np.median(arr))
print("Variação: ", np.var(arr))

Salvando dados

No NumPy, todos os nossos dados podem ser salvos usando o método save. Isso criará um arquivo com a extensão .npy contendo todos os nossos dados.
O método load pode carregar os dados de um arquivo .npy novamente no programa.

Fonte: How to perform arithmetic operations in NumPy?
Licença: Creative Commons -Attribution -ShareAlike 4.0 (CC-BY-SA 4.0)

O que é NumPy

O que é NumPy

O NumPy é uma biblioteca Python gratuita, equipada com uma coleção de operações matemáticas complexas, adequadas para o processamento de dados estatísticos. A biblioteca pode ser importada para o seu projeto Python da seguinte maneira:

Exemplo
import numpy as np
# aqui importamos a biblioteca numpy e demos um apelido a ela: “np”.

Dados numéricos no aprendizado de máquina

A manipulação de dados é um componente essencial nas ciências de dados e no aprendizado de máquina. No caso do aprendizado de máquina, o sistema coleta uma enorme quantidade de dados e se treina para fazer previsões precisas. Naturalmente, seria necessário executar operações aritméticas em dados numéricos para produzir algo significativo. É aqui que o NumPy entra em cena.

Funções básicas do NumPy

A principal estrutura de dados do NumPy é a matriz NumPy. Todos os dados são armazenados em matrizes. O NumPy fornece um vasto repertório de operações matemáticas e estatísticas que podem ser executadas nessas matrizes.

Fonte: What is NumPy?
Licença: Creative Commons -Attribution -ShareAlike 4.0 (CC-BY-SA 4.0)

terça-feira, 26 de maio de 2020

Visualizando um campo escalar 2D

Visualizando um campo escalar 2D

As bibliotecas matplotlib e numpy nos fornecem algumas funções uteis para a visualização de um campo escalar em 2D. Nesse tutorial vamos aprender como visualizar um campo escalar 2D de um jeito muito simples.

Como visualizar um campo escalar 2D com o Matplotlib

Para visualizar um campo escalar 2D vamos utilizar a função meshgrid, da biblioteca numpy, e a pcolormesh, da biblioteca matplotlib. A função meshgrid retorna matrizes com vetores de coordenadas. E a função pcolormesh, é chamada para mostrar a função. Veja um exemplo abaixo usando as duas funções:

Exemplo
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

x = np.linspace(-3, 3, 51)
y = np.linspace(-2, 2, 41)
X, Y = np.meshgrid(x, y)

Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)

plt.pcolormesh(X, Y, Z, cmap = cm.viridis)
plt.colorbar()

plt.show()

Executando o código acima o seu gráfico deve estar igual a este:

Nesse exemplo fica claro como uma boa escolha de cores pode ajudar na analise de dados. Na imagem os valores negativos aparecem com uma tonalidade mais para o azul e os valores positivos mais para o amarelo.

Como funciona...

A função meshgrid recebe duas coordenadas x e y, e retorna dois grids com as coordenadas de x e y. E a função pcolormesh recebe as variáveis x, y e z, assim obtemos as coordenadas corretas. A função pcolormesh é chamada para renderizar o gráfico com as coordenadas recebidas, o mesmo resultado pode ser alcançado utilizando a função imshow.

terça-feira, 19 de maio de 2020

Adicionando legenda do colormap

Adicionando legenda do colormap

Uma coisa indispensável em muitos gráficos, e que ainda não aprendemos, é adicionar uma legenda do mapa de cores. Uma legenda do mapa de cores pode tornar o seu gráfico mais legível e visualmente mais agradável. Claro que a estética é uma das últimas preocupações quando estamos criando um gráfico. O que realmente gostaríamos de mostra, quando adicionamos uma legenda ao mapa de cores, é o valor que cada cor representa no gráfico. Nesse tutorial vamos aprender como adicionar uma legenda do colormap com a biblioteca matplotlib.

Como adicionar legendas do colormap

Para esse exemplo vamos criar uma matriz 2d com valores aleatórios e adicionar uma legenda ao colormap. Veja como fazer isso no exemplo abaixo:

Exemplo
import numpy as np
import matplotlib.pyplot as plt

matriz = np.random.random((100,100))
plt.imshow(matriz, origin = 'lower', cmap = 'viridis', interpolation = 'nearest')

cb = plt.colorbar(orientation = 'horizontal', shrink = .75)
cb.set_label('Legenda do colormap')

plt.show()

Executando o código acima o seu gráfico deve ficar parecido com esse:

Com essa barra e a legenda é possível saber qual valor uma determinada cor representa.

Como funciona…

Com o método colorbar dizemos a biblioteca matplotlib que queremos adicionar uma barra ao nosso gráfico. Para facilitar o entendimento, adicionamos alguns parâmetros adicionais ao método colorbar. O parâmetro orientation define a orientação da barra, o padrão desse parâmetro é vertical. Nesse caso escolhemos horizontal, para deixar a barra na vertical é só omitir esse parâmetro. Com o parâmetro shrink definimos o quanto a barra deve ser encolhida com base no seu tamanho padrão. Já para adicionar a legenda precisamos criar um objeto colorbar e chamar o método set_label, passando como argumento o texto da legenda que queremos adicionar a barra.

Mais sobre o método imshow

Mais sobre o método imshow do Matplotlib

Com o exemplo do tutorial anterior, obtivemos alguns resultados preliminares. Nesse exemplo é possível notar que os eixos usados no gráfico são os indexes da matriz 2d que passamos para o método imshow. É possível que você queira usar outros eixos. Para fazer essa alteração precisamos passar os novos valores para o parâmetro extent. Nesse exemplo vamos utilizar os valores do quadro de amostra do mandelbrot. Para evitar digitar código repetido vamos apenas mudar a chamada a função imshow do tutorial passado, veja como fica a nova chamada ao método imshow:

Exemplo
plt.imshow(mandelbrot, cmap = cm.viridis, extent = (x_min, x_max, y_min, y_max))

Executando o código do tutorial anterior com as alterações no método imshow, que fizemos nesse tutorial, o gráfico gerado deve ser igual a esse:

Como funciona…

Quando passamos valores para o parâmetro opcional extent especificamos o sistema de coordenados que deve ser usado para renderizar os dados da matriz 2d. O parâmetro extent recebe uma tupla com quatro valores. Os dois primeiros valores da tupla devem ter os valores mínimos e máximos do eixo horizontal. E os dois últimos valores devem ter os valores do eixo vertical. Fazendo essa alteração os eixos mostram os valores que usamos para calcular o conjunto de mandelbrot.