Para se ter uma ideia de como funcionam os algoritmos de machine learning e para ter uma ideia melhor de alguns conceitos importantes, vamos usar as bibliotecas da linguagem de programação Python, nomeadamente NumPy, Matplotlib e Pandas. O objetivo aqui não é explorar estas bibliotecas em profundidade (todas elas são bastante extensas e oferecem muitas possibilidades), mas sim conhecer alguns objectos e funções básicos que nos podem ajudar.
Biblioteca NumPi
Todos os dados de que dispomos devem ser apresentados utilizando números e alguns esquemas que os combinem. Assim, por exemplo, a temperatura externa pode ser representada por um número real (também chamado de escalar), enquanto uma série de números pode ser representada pela temperatura externa para toda a semana (o comprimento dessa sequência é sete). Com um bloco de números, as chamadas matrizes, podemos representar os pixels de uma imagem em preto e branco. Se o tamanho da imagem for 200x300 pixels, este bloco tem 200 linhas e 300 colunas, e na interseção de cada tipo e coluna há um número que indica o valor do pixel. É por isso que dizemos que essas estruturas são bidimensionais. Se a imagem é colorida e usa o sistema de cores RGB (eng. Red Green Blue) (falaremos sobre isso mais adiante na seção sobre redes neurais convolucionais), na verdade temos três blocos de números medindo 200x300 (um para cada uma das cores) que também pode ser escrito como 200x300x3. Consegue imaginar como apresentamos o vídeo? Um vídeo, por sua vez, seria uma sequência de tais imagens ao longo do tempo, formando uma estrutura a quatro dimensões. Os habituais 24 frames por segundo permitem-nos experimentar o vídeo como natural, sem interrupções ou cortes. Isso significaria ainda que um segundo de vídeo pode ser descrito como 24x200x300x3. Tais estruturas são quadridimensionais. É comum que estruturas que têm múltiplas dimensões sejam chamadas de tensores. Na verdade, um escalar é um tensor de dimensão zero, uma cadeia é um tensor de dimensão um, e uma matriz é um tensor de dimensão dois. Daí o nome da popular biblioteca TensorFlow, que é usada no aprendizado de máquina.
Tensores de diferentes dimensões
A biblioteca NumPy é uma biblioteca de código aberto que nos permite executar rapidamente muitas operações matemáticas sobre os dados apresentados desta forma. Embora o conjunto de funcionalidades desta biblioteca seja muito rico, vamos aprender a:
- Definir matrizes e matrizes de números;
- Observar elementos, tipos e colunas;
- Adicionar e multiplicar;
- Aplicar funções matemáticas;
- Gerar valores aleatórios.
Esta seção é emparelhada com o volume de Jupyter B-numpy.ipynb. Para poder acompanhar o conteúdo, clique no botão para abrir o conteúdo no ambiente do Google Colab.Se estiver a visualizar os blocos de notas na sua máquina local, localize o bloco de notas com o mesmo nome no índice e execute-o. Para obter instruções mais detalhadas, consulte a seção Zona prática e a lição do Jupyter Exercise Notebook.
Logo no início do notebook, você será saudado pelo comando import numpy as np, que precisamos executar para poder usar a biblioteca NumPy.
Como você viu na introdução, para trabalhar com dados reais, precisamos de matrizes multidimensionais. A estrutura básica da biblioteca NumPy é uma matriz multidimensional matriz multidimensional, ndarray)tag. É caracterizada por uma forma que indica as dimensões de uma matriz multidimensional e os elementos que ela contém. Uma função que cria uma matriz multidimensional é chamada de matriz. O próximo bloco de código cria uma matriz M com dimensões 3x2, ou seja, uma matriz que tem três linhas e duas colunas.
Como vimos, encontramos esses blocos ao representar imagens, mas também dados tabulares - colunas individuais indicam atributos e tipos de instância indicam conjuntos.
O número de colunas e o número de tipos de uma matriz multidimensional M podem ser lidos pela propriedade shape, de modo que a seguinte linha de código resulta em um par de números (3, 2):
M.shape
Matrizes multidimensionais devem conter valores do mesmo tipo - eles podem ser inteiros ou números reais. A biblioteca também permite o uso de números com precisão simples e dupla, mas não entraremos nesses detalhes. Pode-se ler o tipo de elemento de uma matriz multidimensional usando a propriedade dtype. Como nossa matriz contém apenas números inteiros, o seguinte comando imprimirá int64 :
M.dtipe
Aqui estão alguns exemplos de criação de matrizes multidimensionais:
- Uma sequência de números de um dígito: np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- Uma matriz 1x3 contendo os números 10, 11 e 12: np.array([[10, 11, 12]])
- Uma matriz 3x1 contendo os números 10, 11 e 12: np.array([[10], [11], [12]])
Os elementos individuais da matriz são abordados usando os índices apropriados - usamos tantos índices quantos tivermos dimensões e certificamo-nos de que os índices começam do zero. Assim, M[0,0] lê o valor na linha zero e na coluna zero, enquanto M[2,1] lê o valor na segunda linha e na primeira coluna.
Assim como nas listas, a biblioteca NumPy pode usar o operador de recorte. Assim, por exemplo, na matriz A da dimensão 5x5 mostrada na figura abaixo:
- A [4 , :] distingue todos os elementos do último tipo, ou seja, o Bloco Amarelo,
- A [ :, 1::2] é extraída pelos elementos de todas as outras colunas, ou seja, os blocos vermelhos.
- A [1::2 , 0:3:2] distinguem-se pelos elementos do bloco azul.
As operações de adição e subtração em matrizes multidimensionais são realizadas elemento por elemento. Subtraia os elementos de matrizes que estão nas mesmas posições e, como resultado obtêm-se uma matriz das mesmas dimensões. Os operadores dessas ações são, como seria de esperar, + e -, e as funções de adicionar e subtrair também podem ser usadas.
O seguinte bloco de código soma duas matrizes: A =[1357911131517] e B =[24681012141618]:
A = np.array([
[1, 3, 5],
[7, 9, 11],
[13, 15, 17]
])
B = np.array([
[2, 4, 6],
[8, 10, 12],
[14, 16, 18]
])
A + B
O resultado é uma matriz [3711151923273135].
Quando se trata de multiplicação, é possível multiplicar matrizes por escalares, caso em que cada elemento da matriz é multiplicado por um escalar. Esta operação é indicada por *. Assim, o bloco inferior de código para a matriz A do exemplo anterior produz a matriz [3915212733394551].
3 * A
Para realizar a multiplicação matricial verdadeira, a função ponto é usada. As matrizes A e B recebem uma matriz [96114132240294348384474564].
A.dot(B)
Quando as funções matemáticas da biblioteca NumPy são aplicadas a matrizes multidimensionais, elas são aplicadas a cada um de seus elementos. Por exemplo, executando o seguinte código
npr.exp(M)
Aplicando a função exponencial aos elementos da matriz M =[123456], a matriz M =[2.718281837.389056120.0855369254.59815003148.4131591403.42879349].
Também é possível executar uma função apenas ao longo de alguma dimensão de uma matriz multidimensional, por exemplo, apenas por colunas ou apenas por tipos. Claro, isso só faz sentido para algumas funções, como encontrar máximos, mínimos, adições ou médias. O código a seguir adiciona primeiro os elementos da matriz M por tipo e, em seguida, por colunas. Como resultado, [3,7,11] e [9,12] são obtidos.
# Adicionar por tipo
np.sum(M, axis=1)
# Adição por colunas
np.sum(M, axis=0)
Em nosso trabalho, isso geralmente significa que geramos rapidamente matrizes com alguns valores aleatórios, ou vetores de zeros ou uns. Serão geradas as seguintes chamadas, pela ordem:
- Matriz de matriz aleatória 2x3: np.random.random((2, 3))
- Matriz Dimensão Zero 4k4: np.zeros((4, 4))
- Matriz de unidade 4x2: np.ones((4, 2))
- Uma matriz unidimensional com um conjunto equidistante de 9 pontos do intervalo 0 a 2: np.linspace(0, 2, 9)
Pode-se descobrir mais sobre os conteúdos e capacidades da biblioteca NumPy no site oficial da http://www.numpy.org/.
Biblioteca Matplotlib
Esta seção é emparelhada com o volume Jupyter A-matplotlib.ipynb. Para continuar acompanhando o conteúdo, clique no link e, em seguida, no botão para abrir o conteúdo no ambiente do Google Colab.Se estiver a visualizar os blocos de notas na sua máquina local, localize o bloco de notas com o mesmo nome no índice e execute-o. Para obter instruções mais detalhadas, consulte a seção Zona prática e a lição do Jupyter Exercise Notebook.
Matplotlib é uma biblioteca Python usada para gráficos 2D e 3D. As representações gráficas são muito úteis quando se trabalha com dados porque nos permitem compreender melhor os dados, bem como monitorizar melhor alguns dos comportamentos dos algoritmos. Vamos conhecer a funcionalidade desta biblioteca através de dois exemplos simples: plotar um gráfico da função sin(x) e exibir um gráfico de pontos de um conjunto de dados.
Normalmente, os códigos que usam a biblioteca Matplotlib começam com o comando import matplotlib.pyplot as plt, que carrega o painel de plotagem plt e suas funções.
Um exemplo de plotagem dos gráficos da função sin(x) no intervalo [0, 10] começará criando uma grade equidistante de pontos x chamando a função linspace da biblioteca NumPy. Esta função espera as extremidades dos intervalos 0 e 10 e o número de marcos como argumentos - no nosso caso, pode ser 100. Em seguida, calcularemos o valor da função seno para cada um desses pontos chamando a função sin(x). Vamos armazenar seus valores na variável y - e agora será uma única matriz de 100 pontos porque a função é aplicada a cada elemento da matriz x.
Definimos o título do gráfico chamando a função title, e os marcadores de eixo (os textos que explicarão seu significado) chamando as funções xlabel e ylabel. Todas estas funções são definidas ao nível do painel de desenho plt. O gráfico em si é plotado chamando a função de gráfico e dando os valores das coordenadas x e y para desenho (é por isso que nomeamos o conjunto inicial de pontos e valores da função seno com esses nomes). O gráfico é exibido chamando a função show.
# Criando uma grade de pontos
x = np.linspace(0, 10, 100)
y = np.sin(x)
# Definição de títulos, gráficos e marcadores de eixo
plt.title('Grafik funkcije y=sin(x)')
plt.xlabel('x')
plt.ylabel('y')
# Renderização de gráficos
plt.plot(x, y)
# Exibir gráficos
plt.show()
Os gráficos de dispersão são frequentemente usados para observar a disposição espacial dos dados. No exemplo a seguir, criaremos dez pares de pontos com valores inteiros de coordenadas do intervalo [0, 20] e os exibiremos na forma de um gráfico de dispersão.
Para criar uma série de pares de pontos, criaremos uma matriz de coordenadas únicas x e y. Faremos isso usando a função randomint NumPy, cujos argumentos baixo, alto e tamanho permitem controlar os limites inferior e superior do intervalo, bem como controlar o número de pontos. O gráfico de dispersão em si é criado chamando a função do painel de dispersão para desenhar plt. Quando esta função é chamada, os valores das coordenadas dos pontos, no nosso caso x e y, são dados. Além disso, você pode ajustar a cor dos pontos com o argumento de cor, bem como modificar o próprio símbolo para exibição com o argumento de marcador. Em vez dos círculos pretos padrão, os gráficos usam triângulos verdes apontando para baixo. O gráfico é exibido, como no exemplo anterior, chamando a função show.
# matrizes de comprimento 10 com elementos arbitrários do intervalo [0, 20]
np.random.seed(7)
k = np.random.randint (nisko = 0, visoko = 20, veličina = 10)
i = np.random.randint (nisko = 0, visoko = 20, veličina = 10)
# Gerar um gráfico de dispersã
plt.scatter(x, y, color='green', marker='v')
# Exibir gráficos
plt.show()
Podemos ver que neste exemplo, no nível da biblioteca NumPy e seu pacote aleatório, definimos o gerador de números aleatórios (a chamada propriedade semente) para um valor de 7. Isso nos permitirá obter a mesma disposição de pontos toda vez que executarmos esse código. Esse recurso é importante para nós devido à capacidade de reiniciar experimentos e compartilhar códigos. Esta propriedade é chamada repetibilidade ou reprodutibilidade.
O site oficial da biblioteca Matplotlib é https://matplotlib.org/ e, além dele, existem outras bibliotecas Python para visualizações, como Seaborn e Plotly.
A biblioteca Pandas foi projetada para trabalhar com dados tabulares. É caracterizado por funções para carregar vários formatos de arquivo e, em seguida, inúmeras funções para manipular dados. O link para o site oficial da biblioteca é https://pandas.pydata.org/ e conheceremos suas capacidades um pouco mais tarde, na parte com análise exploratória de dados.
- Make a submission