Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ##################################################################
- ############ Modelo e uma analise exploratoria ############
- ##################################################################
- import numpy as np
- import pandas as pd
- import scipy.stats as stats
- import matplotlib.pyplot as plt
- import sklearn
- from sklearn.metrics import r2_score as rs
- from sklearn.linear_model import LinearRegression as LR
- from sklearn.model_selection import train_test_split as tts
- import warnings
- warnings.filterwarnings("ignore")
- def get_names():
- return ['CRIM' , 'ZN' , 'INDUS' , 'CHAS' , 'NOX' , 'RM' , 'AGE' , 'DIS' , 'RAD' , 'TAX' , 'PTRATIO' , 'B' , 'LSTAT' , 'MEDV']
- #importando o dataset
- dataset = pd.read_csv('house_prices.csv', header=None, names=get_names())
- #mostrando todo o dataset
- #print(dataset)
- '''
- for nome in get_names():
- print(dataset[nome].describe())
- print '*'*20
- '''
- ###########################################
- ##### Explorando o Dataset #####
- ###########################################
- '''
- #Agora vamos ver um fator que geralmente influencia muito em uma casa: O numero de quartos (/)
- plt.scatter(x=dataset['RM'], y=dataset['MEDV'])
- plt.title("Relacao entre valor e numero de quartos")
- plt.xlabel("Numero de quartos")
- plt.ylabel("Valor medio")
- plt.show()
- '''
- #Vamos verificar se quanto mais longe do centro o preco das casas caem.
- #para isso iremos plotar o preco das casas como eixo Y e a distancia do centro como eixo X
- #Se ocorrer uma formatacao nos dados semelhante ao formato de uma \ podemos entender que quanto menor a distancia maior o preco.
- plt.scatter(x=dataset['DIS'], y=dataset['MEDV'])
- plt.title("Relacao entre valor e distancia do centro")
- plt.xlabel("Distancia do centro")
- plt.ylabel("Valor medio")
- plt.show()
- #Vamos criar um indice relacionando a distancia do centro (DIS) com o indice de acesso por radiais ao centro para entender se as
- # variaveis geograficas impactam diretamente no precos dos imoveis
- plt.scatter( x=dataset['MEDV'], y=dataset['DIS']*dataset['RAD'])
- plt.title("Relacao entre valor e indice de acesso a estradas")
- plt.xlabel("Indice de acesso a estradas")
- plt.ylabel("Valor medio")
- plt.show()
- #Agora vamos ver um fator que geralmente influencia muito em uma casa: O numero de quartos (/)
- plt.scatter(x=dataset['RM'], y=dataset['MEDV'])
- plt.title("Relacao entre valor e numero de quartos")
- plt.xlabel("Numero de quartos")
- plt.ylabel("Valor medio")
- plt.show()
- ###########################################
- #Vamos observar outro fator importante: A idade das construcoes em relacao com os precos
- plt.scatter(x= dataset['AGE'], y=dataset['MEDV'])
- plt.title("Relacao entre valor e idade media das contrucoes")
- plt.xlabel("Distancia do centro")
- plt.ylabel("Valor medio")
- plt.show()
- ###########################################
- ###########################################
- ####### MODELO E PREVISAO ########
- ###########################################
- #Modelo Regressao Linear uma variavel
- # Numero de quartos por valor
- print('\n\n')
- print('###########################################')
- print('####### MODELO E PREVISAO ########')
- print('###########################################')
- #A primeira previsao a ser descrita e a relacao entre o numero de quartos em relacao ao preco como pode ser visto abaixo:
- X = dataset['RM']
- y = dataset['MEDV']
- #gerando conjunto de testes
- X_teste = X[0:180].reshape(-1,1)
- y_teste = y[0:180]
- #gerando conjunto de treino
- X_treino = X[180:].reshape(-1,1)
- y_treino = y[180:]
- #criando o modelo
- modelo = LR()
- modelo.fit(X_treino, y_treino)
- print("Coeficiente da variavel : "+str(modelo.coef_[0])[0:4])
- print("Correlacao do modelo : "+str(modelo.score(X_teste, y_teste))[0:4])
- print("Erro quadrado medio : "+str(np.mean((modelo.predict(X_teste) - y_teste) ** 2)))
- print('\n'+('*'*45)+'\n')
- print('### RESIDUOS ###')
- print(modelo.residues_)
- #print(list(modelo.predict(X_teste)[0:10]))
- #print(list(y_teste)[0:50])
- #Correlacao entre a previsao e o teste
- print(modelo.score(X_teste[0:50], list(modelo.predict(X_teste)[0:50]))) #1.0
- #O que corresponde que a previsao do modelo acompanhou bem o conjunto de teste
- #plotagem dos dados de previsao
- data = plt.scatter(y=dataset['MEDV'], x=dataset['RM'], c='r')
- previsao = plt.scatter(X_teste[0:100],(list(modelo.predict(X_teste)[0:100])), c='g')
- plt.title("Saida do Modelo - Previsao")
- plt.xlabel("Numero de quartos")
- plt.ylabel("Valor medio")
- plt.legend(
- (data,previsao),
- ("Valor x No de Quartos", "Prev. Valor x No de Quartos"),
- scatterpoints=1,
- loc='upper left',
- ncol=3,
- fontsize=8
- )
- plt.show()
- ###########################################
- ####### MODELO E PREVISAO ########
- ###########################################
- #Modelo Regressao Linear duas variaveis
- # Numero de quartos e idade dos imoveis pelo preco
- print('\n\n')
- print('###########################################')
- print('####### MODELO E PREVISAO ########')
- print('###########################################')
- #A primeira previsao a ser descrita e a relacao entre o numero de quartos em relacao ao preco como pode ser visto abaixo:
- X = [dataset['RM'],dataset['AGE']]
- y = dataset['MEDV']
- #gerando conjunto de testes
- X_teste = X[0][0:210].reshape(-1,1)
- X_teste = X[1][0:210].reshape(-1,1)
- y_teste = y[0:210]
- #gerando conjunto de treino
- X_treino = X[0][210:].reshape(-1,1)
- X_treino = X[1][210:].reshape(-1,1)
- y_treino = y[210:]
- #criando o modelo
- modelo = LR()
- modelo.fit(X_treino, y_treino)
- print("Coeficiente da variavel : "+str(modelo.coef_[0])[0:4])
- print("Correlacao do modelo : "+str(modelo.score(X_teste, y_teste))[0:4])
- print("Erro quadrado medio : "+str(np.mean((modelo.predict(X_teste) - y_teste) ** 2)))
- print('\n'+('*'*45)+'\n')
- print('### RESIDUOS ###')
- print(modelo.residues_)
- #print(list(modelo.predict(X_teste)[0:10]))
- #print(list(y_teste)[0:50])
- #Correlacao entre a previsao e o teste
- print(modelo.score(X_teste[0:50], list(modelo.predict(X_teste)[0:50]))) #1.0
- #O que corresponde que a previsao do modelo acompanhou bem o conjunto de teste
- #plotagem dos dados de previsao
- data = plt.scatter(y=dataset['MEDV'], x=dataset['AGE'], c='r')
- previsao = plt.scatter(X_teste[0:100],(list(modelo.predict(X_teste)[0:100])), c='g')
- plt.title("Saida do Modelo - Previsao")
- plt.xlabel("Numero de quartos")
- plt.ylabel("Valor medio")
- plt.legend(
- (data,previsao),
- ("Idade Casas x No de Quartos", "Previsao"),
- scatterpoints=1,
- loc='upper left',
- ncol=3,
- fontsize=8
- )
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement