<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Problemas de regressão envolvem a predição de um valor numérico contínuo a partir de um conjunto de característiacs.
Neste exemplo, vamos construir um modelo para prever preços de casas a partir de características delas, como número de quartos e taxa de crimes na localização da casa.
Leitura dos dados
Usaremos o pacote pandas para ler os dados.
Pandas é uma biblioteca de código aberto que permite a leitura de dados a partir de diversos formatos para uma estrutura tabular que pode ser acessada e processada por scripts Python.
Step1:  Neste exercício, usaremos o dataset [Boston Housinh]((http
Step2:  Pandas permite a leitura de nossos dados a partir de diferentes formatos. Veja esse link para uma lista de formatos suportados e as respectivas funções usadas para lê-los.
O tipo usado pelo pandas para representar essa tabela com nosso dataset carregado é chamada de DataFrame.
Step3:  O método head() imprime as primeiras cinco linhas por padrão. Ele pode receber opcionalmente um argumento que especifique quantas linhas devem ser exibidas, como boston.head(n=10).
Step4:  O método info() exibe vários detalhes sobre o dataset, como a sua quantidade de linhas, quais  features estão presentes, qual é o tipo de cada feature e se existem valores em branco.
Step5:  O método describe() apenas mostra estatísticas de features numéricas. Se uma feature contém strings, por exemplo, ele não será capaz de mostrar informações sobre ela.
Visualização de dados
Após ler os dados em um DataFrame do pandas e ter obtido uma visão geral do dataset, podemos criar gráficos para visualizar o "formato" desses dados.
Usaremos a biblitoeca Matplotlib para criar esses gráficos.
Exemplo
Suponha que lhe seja dada a seguinte informação sobre quatro datasets
Step6:  Todos eles possuem aproximadamente a mesma média, desvio-padrão e correlação. Quão parecidos esses datasets devem ser?
Esse conjunto de datasets são conhecidos como o Quarteto de Anscombe e eles costumam ser usados para ilustrar como confiar apenas em estatísticas como uma forma de caracterizar conjuntos de dados podem induzir a conclusões incorretas.
Step7:  Previsão de preços
Vimos nos gráficos anteriores que algumas features parecem ter uma relação linear com os preços das casas. Usaremos então a classe LinearRegression to Scikit-Learn para modelar essa relação e conseguir prever preços de casas a partir dessas features.
O exemplo abaixo constrói um modelo LinearRegression usando o número médio de cômodos para prever o preço da casa
Step8:  A chamada values.reshape(-1, 1) é necessária nesse caso porque o scikit-learn espera que os preditores estejam na forma de uma matriz - isto é, em um formato de array bidimensional. Como estamos usando apenas um preditor, o pandas acaba representando isso como um array unidimensional, então precisamos "reformatá-lo" em uma "matriz de uma coluna só". Esse passo não é necessário se estivermos usando mais de um preditor para treinar um modelo do scikit-learn, como será visto no próximo exemplo.
Agora que temos o dataset isolado em preditores e saídas, eles precisam ser divididos em dois conjuntos diferentes
Step9:  *Se tentarmos estimar a performance do modelo no mesmo conjunto de dados que foi usado para treiná-lo, obteremos uma estimativa enviesada já que o modelo foi treinado para minimizar sua taxa de erro exatamente nos exemplos presentes no conjunto de treinamento. Para estimar corretamente o quão bem o modelo se comportará na prática, ele precisa se testado em um conjunto de dados com o qual ele nunca teve contato.
Step10:  Podemos agora usar a função mean_squared_error do Scikit-Learn para calcular o erro total médio do modelo nos dados do conjunto de teste.
Step11:  O erro aqui provavelmente será bem alto. Usaremos então todas as features do dataset como preditores para tentar prever os preços das casas e vamos checar o quanto isso melhora a performance do modelo.
Step12:  O método drop(), por padrão, exclui linhas ao invés de colunas. Para descartar colunas, é necessário passar uma argumento adicional axis=1.
<ASSISTANT_TASK:>
Python Code:
# Testando se a biblioteca está instalada corretamente e consegue ser importada
import pandas as pd
Explanation: Problemas de regressão envolvem a predição de um valor numérico contínuo a partir de um conjunto de característiacs.
Neste exemplo, vamos construir um modelo para prever preços de casas a partir de características delas, como número de quartos e taxa de crimes na localização da casa.
Leitura dos dados
Usaremos o pacote pandas para ler os dados.
Pandas é uma biblioteca de código aberto que permite a leitura de dados a partir de diversos formatos para uma estrutura tabular que pode ser acessada e processada por scripts Python.
End of explanation
# Carregue o arquivo 'datasets/boston.csv' usando o pandas
boston_housing_data = pd.read_csv('../datasets/boston.csv')
Explanation: Neste exercício, usaremos o dataset [Boston Housinh]((http://www.cs.toronto.edu/~delve/data/boston/bostonDetail.html) para prever preços de casas a partir de características delas e de sua vizinhança.
End of explanation
# Use o método head() para exibir as primeiras cinco linhas do dataset
boston_housing_data.head()
Explanation: Pandas permite a leitura de nossos dados a partir de diferentes formatos. Veja esse link para uma lista de formatos suportados e as respectivas funções usadas para lê-los.
O tipo usado pelo pandas para representar essa tabela com nosso dataset carregado é chamada de DataFrame.
End of explanation
# Use o método info() para exibir algumas informações sobre o dataset
boston_housing_data.info()
Explanation: O método head() imprime as primeiras cinco linhas por padrão. Ele pode receber opcionalmente um argumento que especifique quantas linhas devem ser exibidas, como boston.head(n=10).
End of explanation
# Use o método describe() apra exibir algumas estatísticas do dataset
boston_housing_data.describe()
Explanation: O método info() exibe vários detalhes sobre o dataset, como a sua quantidade de linhas, quais  features estão presentes, qual é o tipo de cada feature e se existem valores em branco.
End of explanation
datasets = pd.read_csv('../datasets/anscombe.csv')
for i in range(1, 5):
    dataset = datasets[datasets.Source == 1]
    print('Dataset {} (X, Y) mean: {}'.format(i, (dataset.x.mean(), dataset.y.mean())))
print('\n')
for i in range(1, 5):
    dataset = datasets[datasets.Source == 1]
    print('Dataset {} (X, Y) std deviation: {}'.format(i, (dataset.x.std(), dataset.y.std())))
print('\n')
for i in range(1, 5):
    dataset = datasets[datasets.Source == 1]
    print('Dataset {} correlation between X and Y: {}'.format(i, dataset.x.corr(dataset.y)))
Explanation: O método describe() apenas mostra estatísticas de features numéricas. Se uma feature contém strings, por exemplo, ele não será capaz de mostrar informações sobre ela.
Visualização de dados
Após ler os dados em um DataFrame do pandas e ter obtido uma visão geral do dataset, podemos criar gráficos para visualizar o "formato" desses dados.
Usaremos a biblitoeca Matplotlib para criar esses gráficos.
Exemplo
Suponha que lhe seja dada a seguinte informação sobre quatro datasets:
End of explanation
# Na primeira vez que o matplotlib é importado, pode ser exibido algum tipo
# de alerta relacionado às fontes do sistema dependendo da sua configuração
import matplotlib.pyplot as plt
# Essa linha permite que os gráficos gerados apareçam diretamente no notebook
# ao invés de serem abertos em uma janela ou arquivo separado.
%matplotlib inline
# Extraia os preços das casas e a quantidade média de cômodos em duas variáveis separadas
prices = boston_housing_data.medv
rooms = boston_housing_data.rm
# Crie um scatterplot dessas duas features usando plt.scatter()
plt.scatter(rooms, prices)
# Especifique labels para os eixos X e Y
plt.xlabel('Number of rooms')
plt.ylabel('House price')
# Exiba o gráfico
plt.show()
# Extraia os preços das casas e o índice de poluição da vizinhança em duas variáveis separadas
prices = boston_housing_data.medv
nox = boston_housing_data.nox
# Crie um scatterplot dessas duas features usando plt.scatter()
plt.scatter(nox, prices)
# Especifique labels para os eixos X e Y
plt.xlabel('Nitric oxide concentration')
plt.ylabel('House price')
# Exiba o gráfico
plt.show()
Explanation: Todos eles possuem aproximadamente a mesma média, desvio-padrão e correlação. Quão parecidos esses datasets devem ser?
Esse conjunto de datasets são conhecidos como o Quarteto de Anscombe e eles costumam ser usados para ilustrar como confiar apenas em estatísticas como uma forma de caracterizar conjuntos de dados podem induzir a conclusões incorretas.
End of explanation
# Primeiro, extraia os preditores (as features que serão usadas para
# prever o preço das casas) e a saída (os preços das casas) em
# variáveis separadas.
x = rooms.values.reshape(-1, 1) # Extraia os valores da coluna 'rm' aqui
y = prices.values.reshape(-1, 1) # Extraia os valores da coluna 'medv' aqui
print('x: {}'.format(x[0:3, :]))
print('y: {}'.format(y[0:3]))
Explanation: Previsão de preços
Vimos nos gráficos anteriores que algumas features parecem ter uma relação linear com os preços das casas. Usaremos então a classe LinearRegression to Scikit-Learn para modelar essa relação e conseguir prever preços de casas a partir dessas features.
O exemplo abaixo constrói um modelo LinearRegression usando o número médio de cômodos para prever o preço da casa:
End of explanation
# Use a função train_test_split() do scikit-learn para dividir os dados em dois conjuntos.
# http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html
from sklearn.model_selection import train_test_split
RANDOM_STATE = 4321
xtr, xts, ytr, yts = train_test_split(x, y, random_state=RANDOM_STATE) # Chame a função train_test_split aqui
Explanation: A chamada values.reshape(-1, 1) é necessária nesse caso porque o scikit-learn espera que os preditores estejam na forma de uma matriz - isto é, em um formato de array bidimensional. Como estamos usando apenas um preditor, o pandas acaba representando isso como um array unidimensional, então precisamos "reformatá-lo" em uma "matriz de uma coluna só". Esse passo não é necessário se estivermos usando mais de um preditor para treinar um modelo do scikit-learn, como será visto no próximo exemplo.
Agora que temos o dataset isolado em preditores e saídas, eles precisam ser divididos em dois conjuntos diferentes: um conjunto de treinamento e um conjunto de teste.
Esse passo é necessário caso você precise estimar o quão bem seu modelo treinado se comportará quando for usado para prever preços de novas casas: é necessário usar o conjunto de treinamento para treinar o modelo e então calcular a sua taxa de erros no conjunto de teste.
End of explanation
from sklearn.linear_model import LinearRegression
lr = LinearRegression().fit(xtr, ytr) # Treine um modelo LinearRegression aqui usando o conjunto de treinamento
lr.predict(6)
# Calcule os preços previstos pelo modelo treinado
predicted_prices = lr.predict(x)
# Crie um scatterplot dessas duas propriedades usando plt.scatter()
plt.scatter(rooms, prices)
# Crie um line plot exibindo os valores previstos em vermelho
plt.plot(rooms, predicted_prices, 'r')
# Crie labels para os eixos X e Y
plt.xlabel('Number of rooms')
plt.ylabel('House price')
# Exiba o gráfico
plt.show()
Explanation: *Se tentarmos estimar a performance do modelo no mesmo conjunto de dados que foi usado para treiná-lo, obteremos uma estimativa enviesada já que o modelo foi treinado para minimizar sua taxa de erro exatamente nos exemplos presentes no conjunto de treinamento. Para estimar corretamente o quão bem o modelo se comportará na prática, ele precisa se testado em um conjunto de dados com o qual ele nunca teve contato.
End of explanation
# Use o conjunto de testes para avaliar a performace do modelo
from sklearn.metrics import mean_squared_error
# Calcule o mean_squared_error do modelo aqui
mean_squared_error(yts, lr.predict(xts))
Explanation: Podemos agora usar a função mean_squared_error do Scikit-Learn para calcular o erro total médio do modelo nos dados do conjunto de teste.
End of explanation
X = boston_housing_data.drop('medv', axis=1) # Use o método drop() aqui para descartar a coluna 'medv' e manter as demais.
y = boston_housing_data.medv # Extraia o preço das casas aqui a partir da coluna 'medv'.
X.head()
Explanation: O erro aqui provavelmente será bem alto. Usaremos então todas as features do dataset como preditores para tentar prever os preços das casas e vamos checar o quanto isso melhora a performance do modelo.
End of explanation
from sklearn.model_selection import train_test_split
ANOTHER_RANDOM_STATE=1234
Xtr, Xts, ytr, yts = train_test_split(X, y, random_state=ANOTHER_RANDOM_STATE) # Divida o dataset em treinamente e teste
# Use o conjunto de treinamento para treinar um modelo LinearRegression
lr = LinearRegression().fit(Xtr, ytr)
# Calcule o mean_squared_error do modelo no conjunto de teste aqui
mean_squared_error(yts, lr.predict(Xts))
Explanation: O método drop(), por padrão, exclui linhas ao invés de colunas. Para descartar colunas, é necessário passar uma argumento adicional axis=1.
End of explanation
<END_TASK>