O conteúdo desta página está no notebook practice_basics.ipynb
Exercício recomendado se você não está familizarizado com Python
Objetivos
Como proceder: Execute cada uma das células de código abaixo. Experimente alterar alguns parâmetros ou incluir prints adicionais
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
Arquivo exemplo: "data1.txt"
# O arquivo de dados é um txt no qual cada linha
# contém dois números, separados por vírgula.
# A primeira coluna é o x e a segunda coluna é o y
%pycat ../data/data1.txt
fname = '../data/data1.txt'
data = np.loadtxt(fname, delimiter = ',')
N = data.shape[0] # número de linhas; portanto número de exemplos
x = data[:, 0] # coluna 0 é o x
y = data[:, 1] # coluna 1 é o y
# Examinar a dimensão dos arrays
print('Dimensão do array data:', data.shape)
print('Dimensão do array x:', x.shape)
print('Dimensão do array y:', x.shape)
# plotar o dados
plt.plot(x, y, 'rx')
plt.xlim(-1, 10)
plt.ylim(-1, 6)
plt.title(fname)
plt.xlabel('x')
plt.ylabel('y')
plt.show()
Gráfico da reta $f(x) = w_o + w_1x$
Experimente:
# w = (w_0, w_1)
w = np.array((1,2))
print("Dimensão do array w: ", w.shape)
# sequência de inteiros de 0 a 9
ptx = np.arange(10)
print("Pontos:", ptx)
# plotar a reta
plt.title( 'Reta %.1f+%.1fx'%(w[0],w[1]) )
plt.plot(ptx, w[0]+w[1]*ptx, '-')
plt.xlabel('x')
plt.ylabel('f( x )')
plt.show()
Gráfico da reta $f(x) = w_o + w_1x = \mathbf{w}^T\,\mathbf{x}$
Desta vez, valor $y$ calculado por meio de equação matricial, fazendo-se $\mathbf{x} = \left[\begin{array}{c}1 \\ x \end{array}\right]$ e calculando :
$$
y = [w_0 \ \ w_1]\left[\begin{array}{c}1 \\ x\end{array}\right]
$$
# Será usado o mesmo peso w da célula anterior. Para alterar
# descomente a linha abaixo e edite os valores
# w = np.array((1,2))
# cada ponto x será transformado no par (1,x)
ptxx = np.vstack(zip(np.ones(10), ptx))
print("Pontos estendidos = \n", ptxx)
# plotar a reta
plt.title( 'Reta %.1f+%.1fx'%(w[0],w[1]) )
plt.plot(ptx, ptxx.dot(w), '-')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.show()
Plotar os pares de pontos $(x,y)$ iniciais e a reta $y = w_0 + w_1x$ num mesmo gráfico. Qual é a reta que melhor se "ajusta" aos exemplos ?
# chutar valores para o vetor de pesos
w = np.array((5,-1/2))
# plotar os dados (x,y)
plt.plot(x, y, 'rx')
# plotar a reta f(ptx) = w_0 + w_1*ptx
plt.title( fname + ' e a reta %.1f+%.1fx'%(w[0],w[1]) )
plt.plot(ptx, ptxx.dot(w), '-')
plt.xlim(-1, 10)
plt.ylim(-1, 6)
plt.xlabel('x')
plt.ylabel('y')
plt.show()