Advertisement
Guest User

Untitled

a guest
Jul 26th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.08 KB | None | 0 0
  1. ##################################################################
  2. ############ Modelo e uma analise exploratoria ############
  3. ##################################################################
  4. import numpy as np
  5. import pandas as pd
  6. import scipy.stats as stats
  7. import matplotlib.pyplot as plt
  8. import sklearn
  9. from sklearn.metrics import r2_score as rs
  10. from sklearn.linear_model import LinearRegression as LR
  11. from sklearn.model_selection import train_test_split as tts
  12.  
  13. import warnings
  14. warnings.filterwarnings("ignore")
  15.  
  16. def get_names():
  17. return ['CRIM' , 'ZN' , 'INDUS' , 'CHAS' , 'NOX' , 'RM' , 'AGE' , 'DIS' , 'RAD' , 'TAX' , 'PTRATIO' , 'B' , 'LSTAT' , 'MEDV']
  18.  
  19. #importando o dataset
  20. dataset = pd.read_csv('house_prices.csv', header=None, names=get_names())
  21.  
  22. #mostrando todo o dataset
  23. #print(dataset)
  24.  
  25.  
  26. for nome in get_names():
  27. print(dataset[nome].describe())
  28. print '*'*20
  29.  
  30.  
  31. ###########################################
  32. ##### Explorando o Dataset #####
  33. ###########################################
  34.  
  35.  
  36. #Vamos verificar se quanto mais longe do centro o preco das casas caem.
  37. #para isso iremos plotar o preco das casas como eixo Y e a distancia do centro como eixo X
  38. #Se ocorrer uma formatacao nos dados semelhante ao formato de uma \ podemos entender que quanto menor a distancia maior o preco.
  39. plt.scatter(x=dataset['DIS'], y=dataset['MEDV'])
  40. plt.title("Relacao entre valor e distancia do centro")
  41. plt.xlabel("Distancia do centro")
  42. plt.ylabel("Valor medio")
  43. plt.show()
  44.  
  45. #Vamos criar um indice relacionando a distancia do centro (DIS) com o indice de acesso por radiais ao centro para entender se as
  46. # variaveis geograficas impactam diretamente no precos dos imoveis
  47. plt.scatter( x=dataset['MEDV'], y=dataset['DIS']*dataset['RAD'])
  48. plt.title("Relacao entre valor e indice de acesso a estradas")
  49. plt.xlabel("Indice de acesso a estradas")
  50. plt.ylabel("Valor medio")
  51. plt.show()
  52.  
  53. #Agora vamos ver um fator que geralmente influencia muito em uma casa: O numero de quartos (/)
  54. plt.scatter(x=dataset['RM'], y=dataset['MEDV'])
  55. plt.title("Relacao entre valor e numero de quartos")
  56. plt.xlabel("Numero de quartos")
  57. plt.ylabel("Valor medio")
  58. plt.show()
  59.  
  60. ###########################################
  61. #Vamos observar outro fator importante: A idade das construcoes em relacao com os precos
  62.  
  63. plt.scatter(x= dataset['AGE'], y=dataset['MEDV'])
  64. plt.title("Relacao entre valor e idade media das contrucoes")
  65. plt.xlabel("Distancia do centro")
  66. plt.ylabel("Valor medio")
  67. plt.show()
  68.  
  69. ###########################################
  70.  
  71.  
  72. ###########################################
  73. ####### MODELO E PREVISAO ########
  74. ###########################################
  75. #Modelo Regressao Linear uma variavel
  76. # Numero de quartos por valor
  77.  
  78.  
  79. print('\n\n')
  80. print('###########################################')
  81. print('####### MODELO E PREVISAO ########')
  82. print('###########################################')
  83.  
  84. #A primeira previsao a ser descrita e a relacao entre o numero de quartos em relacao ao preco como pode ser visto abaixo:
  85.  
  86. X = dataset['RM']
  87. y = dataset['MEDV']
  88.  
  89. #gerando conjunto de testes
  90. X_teste = X[0:180].reshape(-1,1)
  91. y_teste = y[0:180]
  92.  
  93. #gerando conjunto de treino
  94. X_treino = X[180:].reshape(-1,1)
  95. y_treino = y[180:]
  96.  
  97. #criando o modelo
  98. modelo = LR()
  99. modelo.fit(X_treino, y_treino)
  100.  
  101. print("Coeficiente da variavel : "+str(modelo.coef_[0])[0:4])
  102.  
  103. print("Correlacao do modelo : "+str(modelo.score(X_teste, y_teste))[0:4])
  104.  
  105. print("Erro quadrado medio : "+str(np.mean((modelo.predict(X_teste) - y_teste) ** 2)))
  106.  
  107. print('\n'+('*'*45)+'\n')
  108. print('### RESIDUOS ###')
  109. print(modelo.residues_)
  110.  
  111. #print(list(modelo.predict(X_teste)[0:10]))
  112. #print(list(y_teste)[0:50])
  113.  
  114. #Correlacao entre a previsao e o teste
  115. print(modelo.score(X_teste[0:50], list(modelo.predict(X_teste)[0:50]))) #1.0
  116. #O que corresponde que a previsao do modelo acompanhou bem o conjunto de teste
  117.  
  118. #plotagem dos dados de previsao
  119. data = plt.scatter(y=dataset['MEDV'], x=dataset['RM'], c='r')
  120. previsao = plt.scatter(X_teste[0:100],(list(modelo.predict(X_teste)[0:100])), c='g')
  121. plt.title("Saida do Modelo - Previsao")
  122. plt.xlabel("Numero de quartos")
  123. plt.ylabel("Valor medio")
  124. plt.legend(
  125. (data,previsao),
  126. ("Valor x No de Quartos", "Prev. Valor x No de Quartos"),
  127. scatterpoints=1,
  128. loc='upper left',
  129. ncol=3,
  130. fontsize=8
  131. )
  132. plt.show()
  133.  
  134.  
  135.  
  136. ###########################################
  137. ####### MODELO E PREVISAO ########
  138. ###########################################
  139. #Modelo Regressao Linear duas variaveis
  140. # Numero de quartos e idade dos imoveis pelo preco
  141.  
  142.  
  143. print('\n\n')
  144. print('###########################################')
  145. print('####### MODELO E PREVISAO ########')
  146. print('###########################################')
  147.  
  148. #A primeira previsao a ser descrita e a relacao entre o numero de quartos em relacao ao preco como pode ser visto abaixo:
  149.  
  150. X = [dataset['RM'],dataset['AGE']]
  151. y = dataset['MEDV']
  152.  
  153. #gerando conjunto de testes
  154. X_teste = X[0][0:210].reshape(-1,1)
  155. X_teste = X[1][0:210].reshape(-1,1)
  156. y_teste = y[0:210]
  157.  
  158. #gerando conjunto de treino
  159. X_treino = X[0][210:].reshape(-1,1)
  160. X_treino = X[1][210:].reshape(-1,1)
  161. y_treino = y[210:]
  162.  
  163. #criando o modelo
  164. modelo = LR()
  165. modelo.fit(X_treino, y_treino)
  166.  
  167. print("Coeficiente da variavel : "+str(modelo.coef_[0])[0:4])
  168.  
  169. print("Correlacao do modelo : "+str(modelo.score(X_teste, y_teste))[0:4])
  170.  
  171. print("Erro quadrado medio : "+str(np.mean((modelo.predict(X_teste) - y_teste) ** 2)))
  172.  
  173. print('\n'+('*'*45)+'\n')
  174. print('### RESIDUOS ###')
  175. print(modelo.residues_)
  176.  
  177. #print(list(modelo.predict(X_teste)[0:10]))
  178. #print(list(y_teste)[0:50])
  179.  
  180. #Correlacao entre a previsao e o teste
  181. print(modelo.score(X_teste[0:50], list(modelo.predict(X_teste)[0:50]))) #1.0
  182. #O que corresponde que a previsao do modelo acompanhou bem o conjunto de teste
  183.  
  184. #plotagem dos dados de previsao
  185. data = plt.scatter(y=dataset['MEDV'], x=dataset['AGE'], c='r')
  186. previsao = plt.scatter(X_teste[0:100],(list(modelo.predict(X_teste)[0:100])), c='g')
  187. plt.title("Saida do Modelo - Previsao")
  188. plt.xlabel("Numero de quartos")
  189. plt.ylabel("Valor medio")
  190. plt.legend(
  191. (data,previsao),
  192. ("Idade Casas x No de Quartos", "Previsao"),
  193. scatterpoints=1,
  194. loc='upper left',
  195. ncol=3,
  196. fontsize=8
  197. )
  198. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement