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
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!"
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.
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)
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 onumpy
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 emprices
.- 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)
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.
'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.
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
dosklearn.metrics
para executar um cálculo de desempenho entrey_true
ey_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 |
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)
- 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?
- 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.
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
dosklearn.cross_validation
para misturar e dividir os dados defeatures
eprices
em conjuntos de treinamento e teste. (se estiver com a versão do scikit-learn > 0.18, utilizar osklearn.model_selection
. Leia mais aqui)- Divida os dados em 80% treinamento e 20% teste.
- Mude o
random_state
dotrain_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_traine
y_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."
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?
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
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?
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çãoperformance_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?
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
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?
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 defit_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?
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?
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.
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)
fit_model
na célula de código abaixo, você vai precisar implementar o seguinte:- Utilize o
DecisionTreeRegressor
dosklearn.tree
para gerar um objeto regressor de árvore de decisão.- Atribua esse objeto à variável
'regressor'
.
- Atribua esse objeto à variável
- 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
dosklearn.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'
.
- Passe a função
- Utilize o
GridSearchCV
dosklearn.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'
.
- Passe as variáveis
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_
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?
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'])
Dica: A resposta vem da saída do código acima.
Resposta: the Optimal model is max_depth = 4 for the model >////< cool !!!
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?*
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)
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)
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.
- 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
Postar um comentário