Regressão linear
Este caderno segue o conteúdo da lição sobre regressão linear. Nele, pode tentar resolver a tarefa de determinar os preços dos imóveis com base na metragem quadrada.
Primeiro, carregue as bibliotecas de que precisaremos no trabalho futuro.
import numpy as np
from matplotlib import pyplot as plt
np.random.seed(37)
Agora execute a seguinte célula para gerar o conjunto de dados de propriedades imobiliárias. A informação sobre a metragem quadrada é representada pela variável x enquanto a informação sobre os seus preços é representada pela variável y.
x = np.array([43, 25, 66, 80, 105, 70, 40, 85, 84, 102])
y = np.array([60, 32.1, 88.4, 111.4, 120.32, 72.1, 46.3, 90.1, 99.6, 139.2])
Execute a célula a seguir para obter uma representação gráfica dos pontos no conjunto de dados.
plt.title('Real Estate Prices')
plt.xlabel('Square Footage')
plt.ylabel('Price')
plt.grid('on')
plt.scatter(x, y)
plt.show()

Na célula seguinte, há uma função que desenhará a reta que você escolher no exercício. Logo abaixo está uma função que desenha a reta que você escolhe e as linhas que indicam seus erros. Pode ser útil para você ao procurar os melhores valores de parâmetro. Logo abaixo está uma função que desenha a reta que você escolhe e as linhas que indicam seus erros. Você pode achar útil ao procurar os melhores valores de parâmetro.
def draw_graph(beta_0, beta_1):
plt.title('Real Estate Prices')
plt.xlabel('Square Footage')
plt.ylabel('Price')
plt.grid('on')
plt.scatter(x, y)
model_x = np.linspace(20, 120, 100)
model_y = beta_0 + beta_1*model_x
plt.plot(model_x, model_y, color='red')
plt.show()
def draw_graph_with_errors(beta_0, beta_1):
plt.title('Real Estate Prices')
plt.xlabel('Square Footage')
plt.ylabel('Price')
plt.grid('on')
plt.scatter(x, y)
model_x = np.linspace(20, 120, 100)
model_y = beta_0 + beta_1*model_x
plt.plot(model_x, model_y, color='red')
for i in range(0, 10):
prediction = beta_0 + beta_1*x[i]
if prediction > y[i]:
ymin = y[i]
ymax = prediction
else:
ymin = prediction
ymax = y[i]
plt.vlines(x=x[i], ymin=ymin, ymax=ymax, colors='blue', linestyles='dotted')
plt.show()
Agora tente selecionar os parâmetros \(\beta_0\) e \(\beta_1\): escolha seus valores no controle deslizante à direita e, em seguida, execute a célula para ver o resultado. Você precisa escolher um par de parâmetros que você acha que melhor se ajustam aos dados disponíveis. Os valores dos parâmetros iniciais são \(\beta_0=3,84\) e \(\beta_1=0,62\).
beta_0 = 3.84 #@param {type:"slider", min:-1, max:15, step:0.01}
beta_1 = 0.62 #@param {type:"slider", min:-2, max:4, step:0.01}
print("Odabrani model: y = {beta_0} + {beta_1}*x".format(beta_0=beta_0, beta_1=beta_1))
draw_graph(beta_0, beta_1)
Odabrani model: y = 3.84 + 0.62*x

Na célula abaixo, você precisa inserir os valores dos parâmetros \(\beta_0\) e \(\beta_1\) que você escolheu e, em seguida, executar a célula com a chamada para a função 'draw_graph_with_errors', que mostrará os erros. Se você acha que pode fazer escolhas melhores, volte para a etapa anterior.
beta_0_selected = 3.84
beta_1_selected = 0.62
draw_graph_with_errors(beta_0_selected, beta_1_selected)

A função de erro associada ao modelo de regressão linear é chamada de mean squared error. A função a seguir pode ajudá-lo a calcular o erro quadrado médio para sua escolha de parâmetros.
def calculate_mean_squared_error(beta_0, beta_1, x, y):
y_predictions = beta_0 + beta_1 * x
individual_errors = y - y_predictions
return np.average(individual_errors**2)
calculate_mean_squared_error(beta_0_selected, beta_1_selected, x, y)
Out[ ]:
np.float64(1810.21888)
Ao calcular o erro quadrático médio, baseámo-nos na propriedade da biblioteca 'numpy' que nos permite aplicar funções a vetores de valores. Assim, com o comando 'y_predictions = beta_0 + beta_1*x', calculamos os valores de previsão para todos os x's de uma só vez. Da mesma forma, com a subtração 'individual_errors = y - y_predictions' ao calcular diferenças individuais e quadrá-las 'individual_errors**2'. Desta forma, o código é mais legível e, mais importante, mais rápido de calcular. Isso é valioso para nós devido ao trabalho com grandes quantidades de dados. Claro, também pode escrever sua própria função para calcular o erro quadrático médio para os valores de parâmetro escolhidos \(\beta_0\) e \(\beta_1\). Um lembrete é que ele é calculado usando a fórmula \(MSE = \frac{1}{n}\sum_{i=1}^{n}{(y_i-(\beta_0 + \beta_1x_i))^2}\).
def my_function_to_calculate_mean_squared_error(beta_0, beta_1, x, y):
pass
- Make a submission