Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.17 KB | None | 0 0
  1. from __future__ import print_function
  2.  
  3. import math
  4.  
  5. from IPython import display
  6. from matplotlib import cm
  7. from matplotlib import gridspec
  8. from matplotlib import pyplot as plt
  9. import numpy as np
  10. import pandas as pd
  11. from sklearn import metrics
  12. import tensorflow as tf
  13. from tensorflow.python.data import Dataset
  14.  
  15. tf.logging.set_verbosity(tf.logging.ERROR)
  16. pd.options.display.max_rows = 10
  17. pd.options.display.float_format = '{:.1f}'.format
  18.  
  19. stats = pd.read_csv(r"D:TrabajoProyectosApi Fort - copiauser_matchescsv_all.csv", sep=",")
  20.  
  21. my_feature = stats[['Score']]
  22. feature_columns = [tf.feature_column.numeric_column('Score')]
  23.  
  24. targets = stats['Win']
  25.  
  26. my_optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.0000001)
  27. my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)
  28.  
  29. linear_regressor = tf.estimator.LinearRegressor(
  30. feature_columns=feature_columns,
  31. optimizer=my_optimizer,
  32. model_dir='none'
  33. )
  34.  
  35. def my_input_fn(features, targets, batch_size=1, shuffle=True, num_epochs=None):
  36.  
  37. features = {key:np.array(value) for key,value in dict(features).items()}
  38. ds = Dataset.from_tensor_slices((features,targets))
  39. ds = ds.batch(batch_size).repeat(num_epochs)
  40.  
  41.  
  42. if shuffle:
  43. ds = ds.shuffle(buffer_size=10000)
  44.  
  45.  
  46. features, labels = ds.make_one_shot_iterator().get_next()
  47. return features, labels
  48.  
  49. _ = linear_regressor.train(
  50. input_fn = lambda:my_input_fn(my_feature, targets),
  51. steps=1000
  52. )
  53.  
  54. prediction_input_fn =lambda: my_input_fn(my_feature, targets, num_epochs=1, shuffle=False)
  55.  
  56. #Llamo la funcion predict() en el regresor lineal para hacer predicciones
  57. predictions = linear_regressor.predict(input_fn=prediction_input_fn)
  58.  
  59. #Format las predicciones como un Numpy array, asi podemos calcular el error.
  60. predictions = np.array([item['predictions'][0] for item in predictions])
  61.  
  62. ##Display el mean squared error y el root mean squared error
  63. mean_squared_error = metrics.mean_squared_error(predictions, targets)
  64. root_mean_squared_error = math.sqrt(mean_squared_error)
  65.  
  66.  
  67. min_win_value = stats['Win'].min()
  68. max_win_value = stats['Win'].max()
  69. min_max_difference = max_win_value - min_win_value
  70.  
  71.  
  72.  
  73. ##revisando predicciones
  74.  
  75. calibration_data = pd.DataFrame()
  76. calibration_data["predictions"] = pd.Series(predictions)
  77. calibration_data["targets"] = pd.Series(targets)
  78. calibration_data.describe()
  79.  
  80. sample = stats.sample(n=300)
  81.  
  82. x_0 = sample['Win'].min()
  83. x_1 = sample['Win'].max()
  84.  
  85. weight = linear_regressor.get_variable_value('linear/linear_model/Score/weights')[0]
  86. bias = linear_regressor.get_variable_value('linear/linear_model/bias_weights')
  87.  
  88. y_0 = weight * x_0 + bias
  89. y_1 = weight * x_1 + bias
  90.  
  91. plt.plot([x_0, x_1], [y_0, y_1], c='r')
  92.  
  93. plt.ylabel("Win")
  94. plt.xlabel("Score")
  95.  
  96. # Plot a scatter plot from our data sample.
  97. plt.scatter(sample["Score"], sample["Win"])
  98.  
  99.  
  100.  
  101. def train_model(learning_rate, steps, batch_size, input_feature="Score"):
  102. periods = 10
  103. steps_per_period = steps / periods
  104.  
  105. my_feature = input_feature
  106. my_feature_data = stats[[my_feature]]
  107. my_label = "Win"
  108. targets = stats[my_label]
  109.  
  110. # Crear columnas de feature.
  111. feature_columns = [tf.feature_column.numeric_column(my_feature)]
  112.  
  113. # Crear funciones de input
  114. training_input_fn = lambda:my_input_fn(my_feature_data, targets, batch_size=batch_size)
  115. prediction_input_fn = lambda: my_input_fn(my_feature_data, targets, num_epochs=1, shuffle=False)
  116.  
  117. # Crear un objeto de regresor lineal
  118. my_optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)
  119. my_optimizer = tf.contrib.estimator.clip_gradients_by_norm(my_optimizer, 5.0)
  120. linear_regressor = tf.estimator.LinearRegressor(
  121. feature_columns=feature_columns,
  122. optimizer=my_optimizer
  123. )
  124.  
  125. # Configurar un plot para que muestre el estado de nuestra linea de modelo por cada periodo.
  126. plt.figure(figsize=(15, 6))
  127. plt.subplot(1, 2, 1)
  128. plt.title("Learned Line by Period")
  129. plt.ylabel(my_label)
  130. plt.xlabel(my_feature)
  131. sample = stats.sample(n=300)
  132. plt.scatter(sample[my_feature], sample[my_label])
  133. colors = [cm.coolwarm(x) for x in np.linspace(-1, 1, periods)]
  134.  
  135. # Entrenar el modelo, pero haciendolo en un look asi podemos revisar periodicamente.
  136. # Metricas de perdida
  137. print("Training model...")
  138. print("RMSE (on training data):")
  139. root_mean_squared_errors = []
  140. for period in range (0, periods):
  141. # Entrenar el modelo, empezando desde el punto anterior
  142. linear_regressor.train(
  143. input_fn=training_input_fn,
  144. steps=steps_per_period
  145. )
  146. # Computando predicciones
  147. predictions = linear_regressor.predict(input_fn=prediction_input_fn)
  148. predictions = np.array([item['predictions'][0] for item in predictions])
  149.  
  150. # Computando perdidas
  151. root_mean_squared_error = math.sqrt(
  152. metrics.mean_squared_error(predictions, targets))
  153. # Ocasionalmente print la perdida
  154.  
  155. # Agregar la perdida de metrica de este periodo a nuestra lista
  156. root_mean_squared_errors.append(root_mean_squared_error)
  157. # Finalmente rastrearemos los weights y biases over time.
  158. # Aplicar matematica para asegurarnos de que la data y la linea estan bien graficadas
  159. y_extents = np.array([0, sample[my_label].max()])
  160.  
  161. weight = linear_regressor.get_variable_value('linear/linear_model/%s/weights' % input_feature)[0]
  162. bias = linear_regressor.get_variable_value('linear/linear_model/bias_weights')
  163.  
  164. x_extents = (y_extents - bias) / weight
  165. x_extents = np.maximum(np.minimum(x_extents,
  166. sample[my_feature].max()),
  167. sample[my_feature].min())
  168. y_extents = weight * x_extents + bias
  169. plt.plot(x_extents, y_extents, color=colors[period])
  170.  
  171.  
  172. # Mostrar una graph de las perdidas sobre los periodos
  173. plt.subplot(1, 2, 2)
  174. plt.ylabel('RMSE')
  175. plt.xlabel('Periods')
  176. plt.title("Root Mean Squared Error vs. Periods")
  177. plt.tight_layout()
  178. plt.plot(root_mean_squared_errors)
  179.  
  180. # Mostrar tabla con data de prediccion
  181. calibration_data = pd.DataFrame()
  182. calibration_data["predictions"] = pd.Series(predictions)
  183. calibration_data["targets"] = pd.Series(targets)
  184. display.display(calibration_data.describe())
  185.  
  186.  
  187. train_model(
  188. learning_rate=0.000001,
  189. steps=100000,
  190. batch_size=20
  191. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement