Pular para o conteúdo principal

modelo de previsão de imoveis boston dataset

Modelo de previsão do preço de imoveis em boston

Nanodegree Engenheiro de Machine Learning

Modelo de Avaliação e Validação

Projeto 1: Estimando Preços dos Imóveis de Boston

Bem-vindo ao primeiro projeto do Nanodegree de Engenheiro de Machine Learning! Neste Notebook, alguns templates de código estão sendo fornecidos para você, e você irá precisar implementar funcionalidades adicionais para completar este projeto com sucesso. Você não vai precisar modificar o código que foi incluído além do que está sendo pedido. Seções que começam com 'Implementação' no cabeçalho indicam que o bloco de código seguinte vai exigir que você providencie funcionalidade adicional. Instruções serão fornecidas para cada seção e as especificidades da implementação são marcadas no bloco de código com o comando 'TODO'. Não esqueça de ler as instruções atentamente!
github code
http://github.com/juanengml/boston_housing
Além do código implementado, haverá questões relacionadas com o projeto e sua implementação que você deve responder. Cada seção em que há uma questão para você responder, ela será precedida por 'Questão X' no cabeçalho. Leia cada questão cuidadosamente e dê respostas completas no seguinte box de texto que contém 'Resposta: '. O projeto enviado será avaliado com base nas respostas para cada uma das questões e a implementação que você nos forneceu.

Antes de começar

Certifique-se que a sua versão do scikit-learn é a mesma que deve ser utilizada neste notebook. Execute a célula abaixo para verificar se sua versão é a ideal. Se você não quiser fazer downgrade, você precisa ficar atento as diferenças citadas ao decorrer do código.
In [1]:
import sklearn
print 'The scikit-learn version is ', sklearn.__version__
if sklearn.__version__ >= '0.18':
    print "Você precisa fazer downgrade do scikit-learn ou ficar atento as diferenças nas versões citadas."
    print "Pode ser feito executando:\n"
    print "pip install scikit-learn==0.17"
else:
    print "Tudo certo!"
The scikit-learn version is  0.19.1
Você precisa fazer downgrade do scikit-learn ou ficar atento as diferenças nas versões citadas.
Pode ser feito executando:

pip install scikit-learn==0.17

Começando

Neste projeto, você irá avaliar o desempenho e o poder de estimativa de um modelo que foi treinado e testado em dados coletados dos imóveis dos subúrbios de Boston, Massachusetts. Um modelo preparado para esses dados e visto como bem ajustado pode ser então utilizado para certas estimativas sobre um imóvel – em particular, seu valor monetário. Esse modelo seria de grande valor para alguém como um agente mobiliário, que poderia fazer uso dessas informações diariamente.
O conjunto de dados para este projeto se origina do repositório de Machine Learning da UCI. Os dados de imóveis de Boston foram coletados em 1978 e cada uma das 489 entradas representa dados agregados sobre 14 atributos para imóveis de vários subúrbios de Boston. Para o propósito deste projeto, os passos de pré-processamento a seguir foram feitos para esse conjunto de dados:
  • 16 observações de dados possuem um valor 'MEDV' de 50.0. Essas observações provavelmente contêm valores ausentes ou censurados e foram removidas.
  • 1 observação de dados tem um valor 'RM' de 8.78. Essa observação pode ser considerada valor atípico (outlier) e foi removida.
  • Os atributos 'RM', 'LSTAT', 'PTRATIO', and 'MEDV' são essenciais. O resto dos atributos irrelevantes foram excluídos.
  • O atributo 'MEDV' foi escalonado multiplicativamente para considerar 35 anos de inflação de mercado.
Execute a célula de código abaixo para carregar o conjunto dos dados dos imóveis de Boston, além de algumas bibliotecas de Python necessárias para este projeto. Você vai saber que o conjunto de dados carregou com sucesso se o seu tamanho for reportado.
In [2]:
# Importar as bibliotecas necessárias para este projeto
import numpy as np
import pandas as pd
import visuals as vs # Supplementary code
from sklearn.cross_validation import ShuffleSplit

# Formatação mais bonita para os notebooks
%matplotlib inline

# Executar o conjunto de dados de imóveis de Boston
data = pd.read_csv('housing.csv')
prices = data['MEDV']
features = data.drop('MEDV', axis = 1)
    
# Êxito
print "O conjunto de dados de imóveis de Boston tem {} pontos com {} variáveis em cada.".format(*data.shape)
/usr/local/lib/python2.7/dist-packages/sklearn/cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.
  "This module will be removed in 0.20.", DeprecationWarning)
/usr/local/lib/python2.7/dist-packages/sklearn/learning_curve.py:22: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the functions are moved. This module will be removed in 0.20
  DeprecationWarning)
O conjunto de dados de imóveis de Boston tem 489 pontos com 4 variáveis em cada.

Explorando os Dados

Na primeira seção deste projeto, você fará uma rápida investigação sobre os dados de imóveis de Boston e fornecerá suas observações. Familiarizar-se com os dados durante o processo de exploração é uma prática fundamental que ajuda você a entender melhor e justificar seus resultados.
Dado que o objetivo principal deste projeto é construir um modelo de trabalho que tem a capacidade de estimar valores dos imóveis, vamos precisar separar os conjuntos de dados em atributos e variável alvo. O atributos, 'RM', 'LSTAT' e 'PTRATIO', nos dão informações quantitativas sobre cada ponto de dado. A variável alvo, 'MEDV', será a variável que procuramos estimar. Eles são armazenados em features e prices, respectivamente.

Implementação: Calcular Estatísticas

Para a sua primeira implementação de código, você vai calcular estatísticas descritivas sobre preços dos imóveis de Boston. Dado que o numpy já foi importado para você, use essa biblioteca para executar os cálculos necessários. Essas estatísticas serão extremamente importantes depois para analisar várias estimativas resultantes do modelo construído.
Na célula de código abaixo, você precisará implementar o seguinte:
  • Calcular o mínimo, o máximo, a média, a mediana e o desvio padrão do 'MEDV', que está armazenado em prices.
    • Armazenar cada cálculo em sua respectiva variável.
In [3]:
# TODO: Minimum price of the data
minimum_price = np.min(prices)

# TODO: Maximum price of the data
maximum_price = np.max(prices)

# TODO: Mean price of the data
mean_price = np.mean(prices)

# TODO: Median price of the data
median_price = np.median(prices)

# TODO: Standard deviation of prices of the data
std_price = np.std(prices,ddof=0)

# Show the calculated statistics
print "Statistics for Boston housing dataset:\n"
print "Minimum price: ${:,.2f}".format(minimum_price)
print "Maximum price: ${:,.2f}".format(maximum_price)
print "Mean price: ${:,.2f}".format(mean_price)
print "Median price ${:,.2f}".format(median_price)
print "Standard deviation of prices: ${:,.2f}".format(std_price)
Statistics for Boston housing dataset:

Minimum price: $105,000.00
Maximum price: $1,024,800.00
Mean price: $454,342.94
Median price $438,900.00
Standard deviation of prices: $165,171.13

Questão 1 - Observação de Atributos

Para lembrar, estamos utilizando três atributos do conjunto de dados dos imóveis de Boston: 'RM', 'LSTAT' e 'PTRATIO'. Para cada observação de dados (vizinhança):
  • 'RM' é o número médio de cômodos entre os imóveis na vizinhança.
  • 'LSTAT' é a porcentagem de proprietários na vizinhança considerados de "classe baixa" (proletariado).
  • 'PTRATIO' é a razão de estudantes para professores nas escolas de ensino fundamental e médio na vizinhança.
Usando a sua intuição, para cada um dos atributos acima, você acha que um aumento no seu valor poderia levar a um aumento no valor do 'MEDV' ou uma diminuição do valor do 'MEDV'? Justifique sua opinião para cada uma das opções.
Dica: Você pode tentar responder pensando em perguntas como:
  • Você espera que um imóvel que tem um valor 'RM' de 6 custe mais ou menos que um imóvel com valor 'RM' de 7?
  • Você espera que um imóvel em um bairro que tem um valor 'LSTAT' de 15 custe mais ou menos que em um bairro com valor 'LSTAD' de 20?
  • Você espera que um imóvel em um bairro que tem um valor 'PTRATIO' de 10 custe mais ou menos que em um bairro com 'PTRATIO' de 15?
Resposta: RM its more higher for MEDV if higher, this is work because more rooms its more space like that with this more expencive.
LSTAT for more higher if that i know MEDV more less/lower thinked this, and this type of the space is more insecury for kids compera like the uper class i know, based like this i thinks its more low cost.
PTRATIO it s more low to MEDV if think houses like Close to school if public i know, but if private its change thinked of teacher of public school to select live more next to school because the prices is more low.

Desenvolvendo um Modelo

Na segunda seção deste projeto, você vai desenvolver ferramentas e técnicas necessárias para um modelo que faz estimativas. Ser capaz de fazer avaliações precisas do desempenho de cada modelo através do uso dessas ferramentas e técnicas ajuda a reforçar a confiança que você tem em suas estimativas.

Implementação: Definir uma Métrica de Desempenho

É difícil medir a qualidade de um modelo dado sem quantificar seu desempenho durante o treinamento e teste. Isso é geralmente feito utilizando algum tipo de métrica de desempenho, através do cálculo de algum tipo de erro, qualidade de ajuste, ou qualquer outra medida útil. Para este projeto, você irá calcular o coeficiente de determinação, R2, para quantificar o desempenho do seu modelo. O coeficiente de determinação é uma estatística útil no campo de análise de regressão uma vez que descreve o quão "bom" é a capacidade do modelo em fazer estimativas.
Os valores para R2 têm um alcance de 0 a 1, que captura a porcentagem da correlação ao quadrado entre a estimativa e o valor atual da variável alvo. Um modelo R2 de valor 0 sempre falha ao estimar a variável alvo, enquanto que um modelo R2 de valor 1, estima perfeitamente a variável alvo. Qualquer valor entre 0 e 1 indica qual a porcentagem da variável alvo (ao utilizar o modelo) que pode ser explicada pelos atributos. Um modelo pode dar também um R2 negativo, que indica que o modelo não é melhor do que aquele que estima ingenuamente a média da variável alvo.
Para a função ‘performance_metric’ na célula de código abaixo, você irá precisar implementar o seguinte:
  • Utilizar o r2_score do sklearn.metrics para executar um cálculo de desempenho entre y_true e y_predict.
  • Atribuir a pontuação do desempenho para a variável score.
In [4]:
# TODO: Import 'r2_score'

from sklearn.metrics import r2_score

def performance_metric(y_true, y_predict):
    """ Calculates and returns the performance score between 
        true and predicted values based on the metric chosen. """
    
    # TODO: Calculate the performance score between 'y_true' and 'y_predict'
    score = r2_score(y_true, y_predict)
        
    # Return the score
    return score

Questão 2 - Qualidade do Ajuste

Admita que um conjunto de dados que contém cinco observações de dados e um modelo fez a seguinte estimativa para a variável alvo:
Valores Reais Estimativa
3.0 2.5
-0.5 0.0
2.0 2.1
7.0 7.8
4.2 5.3
Executar a célula de código abaixo para usar a função `performance_metric’ e calcular o coeficiente de determinação desse modelo.
In [5]:
# Calculate the performance of this model
score = performance_metric([3, -0.5, 2, 7, 4.2], [2.5, 0.0, 2.1, 7.8, 5.3])
print "Model has a coefficient of determination, R^2, of {:.3f}.".format(score)
Model has a coefficient of determination, R^2, of 0.923.
  • Você consideraria que esse modelo foi capaz de capturar a variação da variável alvo com sucesso? Por que ou por que não?
Dica:
  • R2 score com valor 0 significa que a variável dependente não pode ser estimada pela variável independente.
  • R2 score com valor 1 significa que a variável dependente pode ser estimada pela variável independente.
  • R2 score com valor entre 0 e 1 significa quanto a variável dependente pode ser estimada pela variável independente.
  • R2 score com valor 0.40 significa que 40 porcento da variância em Y é estimável por X.
Resposta:
Answer: soooo, the coefficient is 92% i thinks its good but bepends of the aplication, not show less of 0 but show that more 0 it's metric is good but, when i say depends of the aplication, for this prove of real needs to use this for um more data i know.

Implementação: Misturar e Separar os Dados

Sua próxima implementação exige que você pegue o conjunto de dados de imóveis de Boston e divida os dados em subconjuntos de treinamento e de teste. Geralmente os dados são também misturados em uma ordem aleatória ao criar os subconjuntos de treinamento e de teste para remover qualquer viés (ou erro sistemático) na ordenação do conjunto de dados.
Para a célula de código abaixo, você vai precisar implementar o seguinte:
  • Utilize train_test_split do sklearn.cross_validation para misturar e dividir os dados de features e prices em conjuntos de treinamento e teste. (se estiver com a versão do scikit-learn > 0.18, utilizar o sklearn.model_selection. Leia mais aqui)
    • Divida os dados em 80% treinamento e 20% teste.
    • Mude o random_state do train_test_split para um valor de sua escolha. Isso garante resultados consistentes.
  • Atribuir a divisão de treinamento e teste para X_train,X_test,y_trainey_test`.
In [7]:
# TODO: Import 'train_test_split'
from sklearn.cross_validation import train_test_split
# TODO: Shuffle and split the data into training and testing subsets
X_train, X_test, y_train, y_test = train_test_split(features,prices,test_size=0.2,random_state=10)

# Success
print "Training and testing split was successful."
Training and testing split was successful.

Questão 3 - Treinamento e Teste

  • Qual o benefício de separar o conjunto de dados em alguma relação de subconjuntos de treinamento e de teste para um algoritmo de aprendizagem?
Dica: O que pode dar errado se não houver uma maneira de testar seu modelo?
Resposta:
i can training this model using diferents parts of data and check used diferent parts. based like this can be show for me if me overfiting the model performace. Can be test and implemente new data for step to step catch up 100 acurracy of the model.
if i not test the model, i think to add data for train and test can be overfiting the model and my predictions be error

Analisando o Modelo de Desempenho

Na terceira parte deste projeto, você verá o desempenho em aprendizagem e teste de vários modelos em diversos subconjuntos de dados de treinamento. Além disso, você irá investigar um algoritmo em particular com um parâmetro 'max_depth' (profundidade máxima) crescente, em todo o conjunto de treinamento, para observar como a complexidade do modelo afeta o desempenho. Plotar o desempenho do seu modelo baseado em critérios diversos pode ser benéfico no processo de análise, por exemplo: para visualizar algum comportamento que pode não ter sido aparente nos resultados sozinhos.

Curvas de Aprendizagem

A célula de código seguinte produz quatro gráficos para um modelo de árvore de decisão com diferentes níveis de profundidade máxima. Cada gráfico visualiza a curva de aprendizagem do modelo para ambos treinamento e teste, assim que o tamanho do conjunto treinamento aumenta. Note que a região sombreada da curva de aprendizagem denota a incerteza daquela curva (medida como o desvio padrão). O modelo é pontuado em ambos os conjuntos treinamento e teste utilizando R2, o coeficiente de determinação.
Execute a célula de código abaixo e utilizar esses gráficos para responder as questões a seguir.
In [8]:
# Criar curvas de aprendizagem para tamanhos de conjunto de treinamento variável e profundidades máximas
vs.ModelLearning(features, prices)

Questão 4 - Compreendendo os Dados

  • Escolha qualquer um dos gráficos acima e mencione a profundidade máxima escolhida.
  • O que acontece com a pontuação da curva de treinamento se mais pontos de treinamento são adicionados? E o que acontece com a curva de teste?
  • Ter mais pontos de treinamento beneficia o modelo?
Dica: As curvas de aprendizagem convergem para uma pontuação em particular? Geralmente, quanto mais dados você tem, melhor. Mas, se sua curva de treinamento e teste estão convergindo com um desempenho abaixo do benchmark, o que seria necessário? Pense sobre os prós e contras de adicionar mais pontos de treinamento baseado na convergência das curvas de treinamento e teste.
Resposta: I choose the graph with max_depth = 3. Because the training curve has a rather negative slope with it as more training points are added, the training curve score decreases before stabilizing between 0.6 and 1.0. Paralleling to this I think that by adding more training points increases the score of the test data that ends up suffers a certain sharp positive slope at the initial test points before stabilizing at a value close to ~ 0.8. At about 300 to 350 points, the two curves converge before slightly diverging.

Curvas de Complexidade

A célula de código a seguir produz um gráfico para um modelo de árvore de decisão que foi treinada e validada nos dados de treinamento utilizando profundidades máximas diferentes. O gráfico produz duas curvas de complexidade – uma para o treinamento e uma para a validação. Como a curva de aprendizagem, a área sombreada de ambas as curvas de complexidade denota uma incerteza nessas curvas, e o modelo pontuou em ambos os conjuntos de treinamento e validação utilizando a função performance_metric.
Execute a célula de código abaixo e utilize o gráfico para responder as duas questões a seguir.
In [9]:
vs.ModelComplexity(X_train, y_train)

Questão 5 - Equilíbrio entre viés e variância

  • Quando o modelo é treinado com o profundidade máxima 1, será que o modelo sofre mais de viés (erro sistemático) ou variância (erro aleatório)?
  • E o que acontece quando o modelo é treinado com profundidade máxima 10? Quais pistas visuais existem no gráfico para justificar suas conclusões?
Dica: Como você sabe que um modelo está experimentando viés alto ou variância alta? Viés alto é um sinal de underfitting (o modelo não é complexo o suficiente para aprender os dados) e alta variância é um sinal de overfitting (o modelo está "decorando" os dados e não consegue generalizar bem o problema). Pense em modelos (com profundidade de 1 e 10, por exemplo) e qual deles está alinhado com qual parte do equilíbrio.
Resposta: [High bias, because the all index is so low to compare with another index of the graph] [High variance, because the data of the training and validation is to much biggest with another max_depth] [indentification of high bias and high variance is like form to generalization the variance there are not good to much with generalization but bias is good but is so good in organizer the model diferents of bias.]
Then the model is trained as the max_depth of 1 the model happens to have a greater polarization because the training score and validation scores ends up being low with that the model is underfitting the data. Comparing with the max_depth 10 training model, the model generates low tendencies and high variation. Thus the training r² is compared to less than about 0.8. This indicates a certain excess of data at that point

Questão 6 - Modelo Ótimo de Melhor Suposição

  • Qual profundidade máxima ('max_depth') você acredita que resulta em um modelo que melhor generaliza um dado desconhecido?
  • Que intuição te levou a essa resposta?
Dica: Olhe no gráfico acima e veja o desempenho de validação para várias profundidades atribuidas ao modelo. Ele melhora conforme a profundidade fica maior? Em qual ponto nós temos nosso melhor desempenho de validação sem supercomplicar nosso modelo? E lembre-se, de acordo com a Navalha de Occam, sempre devemos optar pelo mais simples ao complexo se ele conseguir definir bem o problema.
Resposta: i choose the max_depth 4 because the form of generalizated and the pontuation of training and high scores, and when i see i think of the no so bad with high variance, so finish with this i thinks this model is like good.

Avaliando o Desempenho do Modelo

Nesta parte final do projeto, você irá construir um modelo e fazer uma estimativa de acordo com o conjunto de atributos do cliente utilizando um modelo otimizado a partir de fit_model.

Questão 7 - Busca em Matriz

  • O que é a técnica de busca em matriz (grid search)?
  • Como ela pode ser aplicada para otimizar um algoritmo de aprendizagem?
Dica: Quando explicar a técnica de busca em matriz, tenha certeza que você explicou o motivo dela ser usada, o que a 'matriz' significa nesse caso e qual o objetivo da técnica. Para ter uma resposta mais sólida, você pode também dar exemplo de um parâmetro em um modelo que pode ser otimizado usando essa técnica.
Resposta: Grid search is a hyperparameter optimization with grid selection, evaluate them, and return the result of that type. In this type of parameters, a search can choose a learning algorithm i using K_fold Cross Validation this is the nice tecniquis with high values for this and order a better and nice model ! and during curse i see about high acurracy like K_fold and CV..

Questão 8 - Validação Cruzada

  • O que é a técnica de treinamento de validação-cruzada k-fold?
  • Quais benefícios essa técnica proporciona para busca em matriz ao otimizar um modelo?
Dica: Lembre-se de expllicar o que significa o 'k' da validação-cruzada k-fold, como a base de dados é dividida e quantas vezes ela é executada.
Assim como há um raciocínio por trás de utilizar um conjunto de teste, o que poderia dar errado ao utilizar busca em matriz sem um conjunto de validação cruzada? Você pode utilizar a documentação para basear sua resposta.
Resposta: k_folds is like a dataset is split durind process and durint time to test 1 data to be training k-1 data, Average is used for the estimate data out of the dataset.
Cross_VALIDATION its to much trusted in estimate of the performace on the train and test split with this the low recude of the variance and single split by train/test
soo, if think if not using CV in dataset onde GSearch, the model estimate have higher variance.
How many iterations are executed and what is the difference between them? The K-fold cross validation technique involves splitting data into subsets k. The hold out method is repeated k times with each of the subsets serving as test data one by one with the remaining k-1 subsets as training data. The mean error in all k tests is computed.

Implementação: Ajustar um Modelo

Na sua última implementação, você vai precisar unir tudo o que foi aprendido e treinar um modelo utilizando o algoritmo de árvore de decisão. Para garantir que você está produzindo um modelo otimizado, você treinará o modelo utilizando busca em matriz para otimizar o parâmetro de profundidade máxima ('max_depth') para uma árvore de decisão. Esse parâmetro pode ser entendido como o número de perguntas que o algoritmo de árvore de decisão pode fazer sobre os dados antes de fazer uma estimativa. Árvores de decisão são parte de uma classe de algoritmos chamados algoritmos de aprendizagem supervisionada.
Além disso, você verá que a implementação está usando o ShuffleSplit() como alternativa para a validação cruzada (veja a variável cv_sets). Ela não é a técnica que você descreveu na Questão 8, mas ela é tão útil quanto. O ShuffleSplit() abaixo irá criar 10 (n_splits) conjuntos misturados e 20% (test_size) dos dados serão utilizados para validação. Enquanto estiver trabalhando na sua implementação, pense nas diferenças e semelhanças com a validação k-fold.
Fique atento que o ShuffleSplit tem diferentes parâmetros nas versões 0.17 e 0.18/0.19 do scikit-learn.
  • Versão 0.17 - ShuffleSplit(n, n_iter=10, test_size=0.1, train_size=None, indices=None, random_state=None, n_iterations=None)
  • Versão 0.18 - ShuffleSplit(n_splits=10, test_size=’default’, train_size=None, random_state=None)
Para a função fit_model na célula de código abaixo, você vai precisar implementar o seguinte:
  • Utilize o DecisionTreeRegressor do sklearn.tree para gerar um objeto regressor de árvore de decisão.
    • Atribua esse objeto à variável 'regressor'.
  • Gere um dicionário para 'max_depth' com os valores de 1 a 10 e atribua isso para a variável 'params'.
  • Utilize o make_scorer do sklearn.metrics para gerar um objeto de função de pontuação.
    • Passe a função performance_metric como um parâmetro para esse objeto.
    • Atribua a função de pontuação à variável 'scoring_fnc'.
  • Utilize o GridSearchCV do sklearn.grid_search para gerar um objeto de busca por matriz.
    • Passe as variáveis 'regressor', 'params', 'scoring_fnc' and 'cv_sets' como parâmetros para o objeto.
    • Atribua o objeto GridSearchCV para a variável 'grid'.
In [10]:
# TODO: Import 'make_scorer', 'DecisionTreeRegressor', and 'GridSearchCV'
from sklearn.grid_search import GridSearchCV
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import make_scorer

def fit_model(X, y):
    """ Performs grid search over the 'max_depth' parameter for a 
        decision tree regressor trained on the input data [X, y]. """
    
    # Create cross-validation sets from the training data
    # sklearn version 0.18: ShuffleSplit(n_splits=10, test_size=0.1, train_size=None, random_state=None)
    # sklearn versiin 0.17: ShuffleSplit(n, n_iter=10, test_size=0.1, train_size=None, random_state=None)
    cv_sets = ShuffleSplit(X.shape[0], n_iter = 10, test_size = 0.20, random_state = 0)

    # TODO: Create a decision tree regressor object
    regressor = DecisionTreeRegressor()

    # TODO: Create a dictionary for the parameter 'max_depth' with a range from 1 to 10
    lista = range(1,11)
    params = {'max_depth':list(lista)}

    # TODO: Transform 'performance_metric' into a scoring function using 'make_scorer' 
    scoring_fnc = make_scorer(performance_metric)

    # TODO: Create the grid search object
    grid = GridSearchCV(regressor,params,scoring=scoring_fnc, cv=cv_sets)

    # Fit the grid search object to the data to compute the optimal model
    grid = grid.fit(X, y)

    # Return the optimal model after fitting the data
    return grid.best_estimator_
/usr/local/lib/python2.7/dist-packages/sklearn/grid_search.py:42: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. This module will be removed in 0.20.
  DeprecationWarning)

Fazendo Estimativas

Uma vez que o modelo foi treinado em conjunto de dados atribuído, ele agora pode ser utilizado para fazer estimativas em novos conjuntos de entrada de dados. No caso do regressor da árvore de decisão, o modelo aprendeu quais são as melhores perguntas sobre a entrada de dados, e pode responder com uma estimativa para a variável alvo. Você pode utilizar essas estimativas para conseguir informações sobre os dados dos quais o valor da variável alvo é desconhecida – por exemplo, os dados dos quais o modelo não foi treinado.

Questão 9 - Modelo Ótimo

  • Qual profundidade máxima do modelo ótimo? Como esse resultado se compara com a sua suposição na Questão 6?
Executar a célula de código abaixo para ajustar o regressor da árvore de decisão com os dados de treinamento e gerar um modelo ótimo.
In [11]:
reg = fit_model(X_train, y_train)

# Produce the value for 'max_depth'
print "Parameter 'max_depth' is {} for the optimal model.".format(reg.get_params()['max_depth'])
Parameter 'max_depth' is 4 for the optimal model.
Dica: A resposta vem da saída do código acima.
Resposta: the Optimal model is max_depth = 4 for the model >////< cool !!!

Questão 10 - Estimando Preços de Venda

Imagine que você era um corretor imobiliário na região de Boston ansioso para utilizar esse modelo que ajuda os imóveis que seus clientes desejam vender. Você coletou as seguintes informações de três dos seus clientes:
Atributos Cliente 1 Cliente 2 Cliente 3
Número total de cômodos em um imóvel 5 cômodos 4 cômodos 8 cômodos
Nível de pobreza da vizinhança (em %) 17% 32% 3%
Razão estudante:professor das escolas próximas 15-to-1 22-to-1 12-to-1
  • Qual valor você sugeriria para cada um dos seus clientes para a venda de suas casas?
  • Esses preços parecem razoáveis dados os valores para cada atributo?*
Dica: Utilize as estatísticas que você calculou na seção Explorando Dados para ajudar a justificar sua resposta. Dos três clientes, o Cliente 3 tem a maior casa, no melhor bairro de escolas públicas e menor inídice de pobreza; Cliente 2 tem a menor casa, em um bairro com índice de pobreza relativamente alto e sem as melhores escolas públicas.
Execute a célula de códigos abaixo para que seu modelo otimizado faça estimativas para o imóvel de cada um dos clientes.
In [12]:
# Produce a matrix for client data
client_data = [[5, 17, 15], # Client 1
               [4, 32, 22], # Client 2
               [8, 3, 12]]  # Client 3

# Show predictions
for i, price in enumerate(reg.predict(client_data)):
    print "Predicted selling price for Client {}'s home: ${:,.2f}".format(i+1, price)
Predicted selling price for Client 1's home: $406,933.33
Predicted selling price for Client 2's home: $232,200.00
Predicted selling price for Client 3's home: $938,053.85
Resposta: For the Client 1 home is better $ 406,933.33
For the Client 2 home is better $ 232,200.00

For the Client 3 home is better $ 938,053.85

The customer's house 2 has a house with only 4 rooms leading at a lower price. Client 3 has a house with 8 rooms therefore the price should be high. In comparison with that. The net worth of each of the families indicates the affluence of the neighborhood and is in order 3 greater than 1 greater than 2. As the richer neighborhoods will probably have more expensive houses. The predictions seem justifiable. In addition, the student-teacher ratio is best for 3 and worse for 2. Again, the predictions are consistent with this feature.

Sensibilidade

Um modelo ótimo não é necessariamente um modelo robusto. Às vezes, um modelo é muito complexo ou muito simples para generalizar os novos dados. Às vezes, o modelo pode utilizar um algoritmo de aprendizagem que não é apropriado para a estrutura de dados especificado. Outras vezes, os próprios dados podem ter informação excessiva ou exemplos insuficientes para permitir que o modelo apreenda a variável alvo – ou seja, o modelo não pode ser ajustado.
Execute a célula de código abaixo para rodar a função fit_model dez vezes com diferentes conjuntos de treinamento e teste para ver como as estimativas para um cliente específico mudam se os dados foram treinados.
In [13]:
vs.PredictTrials(features, prices, fit_model, client_data)
Trial 1: $391,183.33
Trial 2: $419,700.00
Trial 3: $415,800.00
Trial 4: $420,622.22
Trial 5: $413,334.78
Trial 6: $411,931.58
Trial 7: $399,663.16
Trial 8: $407,232.00
Trial 9: $351,577.61
Trial 10: $413,700.00

Range in prices: $69,044.61

Questão 11 - Aplicabilidade

  • Em poucas linhas, argumente se o modelo construído deve ou não ser utilizado de acordo com as configurações do mundo real.
Dica: Olhe os valores calculados acima. Algumas questões para responder:
  • Quão relevante dados coletados em 1978 podem ser nos dias de hoje? A inflação é importante?
  • Os atributos presentes são suficientes para descrever um imóvel?
  • Esse modelo é robusto o suficiente para fazer estimativas consistentes?
  • Dados coletados em uma cidade urbana como Boston podem ser aplicados para uma cidade rural?
  • É justo julgar o preço de um único imóvel baseado nas características de todo o bairro?
Resposta: this dataset is too much old of 1978, and the geograph of the boston change and features of the 1978 be change with time of public school,transport public and acess of more security, training and test this model i thinks it's intersting for learning about the basic forms to think of machine learning, and thinked like this i not be use this model for one real problem.

Comentários

Postagens mais visitadas deste blog

Redirecionamento de Porta usando ngrok (Port Forward with ngrok) SSH

Olá Humanos, estou no pensionato e aqui não tenho acesso ao roteador para fazer um redirencionamento de porta digno affs ¬__¬, sim pensei em Hackear rsrsrs, porem minha preguiça minha preguiça não deixa hauhauha, então encontrei uma ferramenta bem legal chamada ngrok que faz com que eu possa acessar remotamente meu servidor local para brincar com IoT. Instalação e ngrok  link: https://ngrok.com/ Para se cadastrar é bem simples basta logar com conta sua conta do git ou google depois faça download e na https://dashboard.ngrok.com/auth na aba auth pegue seu authtoken e valide no terminal # unzip ngrok-stable-linux-amd64.zip # ./ngrok authtoken <YOUR AUTHTOKEN> Instalando SSH no seu computador  Bom se você usa Ubuntu basta rodar  comando  # apt-get install openssh-server Para testar se o serviço digite  # service ssh status Iniciando SSH no Ngrok Rode o ngrok em protocolo tcp na porta 22  # ./ngrok tcp 22 O bom e que quando você m

Fim de Semana

/** Desculpe-me o português */ Esse  fim de semana fui visitar alguns amigos no interior aqui de RONDÔNIA ,mais especificamente em Nova Brasilândia D'Oeste  cara aqui em baixo tem alguns videos que fiz com meu "celular"  cara serio pensei que tinha camera Ruim quando  tinha um Nokia sei la qual,bom aqui uns videos desculpe pela qualidade de video mais fazer o que neh fazemos o que podemos neh? então tipo todo mundo la "Olha que lindo esse povo se apresentando e cara tipo vou usar minha mascara de V e vamos ver a reação desse povo Kkkk. Aqui era um bloco la eles foram legais por que tipo tinha um povo que tava com uns barquinhos e nossa muito legal tipo, em NBO(nova brasilandia D'Oeste) nunca tem nada e tipo nesse dia, que ja avia sido marcado que teria algo,tipo todas ou quase todas as escolas quiseram mostrar alguma coisa e foi genial por que realmente foram la fizeram e foi  FODA PRA CARALHO VEIO,isso não é fator nostalgia por que ja vi es