Exercício 1-2

No exercício anterior, usamos o método do gradiente descendente para encontrar o vetor de pesos $w$.

Aqui iremos usar a solução analítica, expressa na forma matricial por $w = (X^T\,X)^{-1}\,X^{T}\,y$.

Lembre que

  • $X$ é uma matriz $N \times 2$

  • $y$ é uma matriz (vetor) $N \times 1$

Fazer a leitura de dados (os mesmos do Exercício 1-1) e calcular o vetor de pesos $w$ ótimo de acordo com a equação acima.


In [ ]:
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt

# leitura e preparação dos dados
fname = 'data1.txt'
data = np.loadtxt(fname, delimiter = ',')
N = data.shape[0]
X = data[:, 0]
y = data[:, 1]

X = np.vstack(zip(np.ones(N), X))

# cálculo da transposta de X e inversa, antes do cálculo de w
XT = np.transpose(X)
TMP = np.linalg.inv(XT.dot(X))
w = TMP.dot(XT.dot(y))

print w

# Plot the linear fit
plt.plot(X[:,1], y, 'rx')
plt.plot(X[:,1], X.dot(w), '-')
plt.xlim(-1, 10)
plt.ylim(-1,6)
plt.xlabel('x')
plt.ylabel('y')
plt.show()

Vamos comparar o custo final obtido aqui com o obtido no Exercício 1-1. Para isso, você já devrá ter criado o arquivo funcoes.py com a função computeCost
Qual dos métodos resultou em custo menor ?


In [ ]:
from funcoes import computeCost

finalCost = computeCost(X, y, w)
print 'Final cost: ', finalCost