Olá. Encontrei uma divergência (erro) no valor do R² em comparação ao do instrutor. Poderiam me auxiliar, por favor?
Avaliando melhor o modelo
def r_2(previstos, y):
variancia_prevista = sum([(y_i - y_previsto) ** 2 for y_i, y_previsto in zip (y, previstos)])
variancia_original = sum([(y_i - y.mean()) ** 2 for y_i in y])
return 1 - variancia_prevista / variancia_original
r_2(previstos, dados['Valor'])
0.641975652487156
Quanto custa um apartamento de 72m²
np.exp(prever(np.log(72), theta1, theta0))
568778.5698688689
Regressão linear com o Gradiente Descendente
def derivada(theta0, theta1, x, y):
dtheta0 = 0
dtheta1 =0
for x_i, y_i in zip(x,y):
dtheta0 += prever(x_i, theta1, theta0) - y_i
dtheta1 += (prever(x_i, theta1, theta0) - y_i) * x_i
dtheta0 /= 0.5 * len(x)
dtheta1 /= 0.5 * len(x)
return dtheta0, theta1
def gradienteDescendente(theta0, theta1, x, y, alpha):
dtheta0, dtheta1 = derivada(theta0, theta1, x, y)
theta0 -= alpha * dtheta0
theta1 -= alpha * dtheta1
return theta0, theta1
Inicializando nossos valores iniciais aleatóriamente e executando a otimização
theta0 = random.random()
theta1 = random.random()
for i in range(10000):
if i % 1000 == 0:
previstos = prever(dados['Area'], theta1, theta0)
print(erro_quadratico_medio(previstos, dados['Valor']))
theta0, theta1 = gradienteDescendente(theta0, theta1, dados['Area'], dados['Valor'], 0.01)
168.22116350027565
0.8163531768601124
0.816354065738248
0.8163540657766233
0.8163540657766248
0.8163540657766248
0.8163540657766248
0.8163540657766248
0.8163540657766248
0.8163540657766248
Avaliando com o R²
prev = prever(dados['Area'], theta1, theta0)
r_2(prev, dados['Valor'])
-3.774758283725532e-15
np.exp(prever(np.log(72), theta1, theta0))
885921.6670914496