Advertisement
Guest User

Untitled

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