def create_model_neural_network(self): """ Creamos modelo de red neuronal feed forward. Arquitectura. 01 capa oculta con "n" neuronas. Función de activación: Tangente Hiperbólica.(Valores -1 a 1) Optimizador: Adam Métrica de Pérdida: (Loss) Error Absoluto Medio Para calcular el acuracy, se utilizará Error Cuadrático Medio (MSE) """ Console.highlight("6. CREANDO LA RED NEURONAL") self.print_info_neural_network() self.neurals_hidden_layer = int( input("Neuronas para la capa de entrada: ")) print("\n") self.model_nn = Sequential() self.model_nn.add( Dense(self.neurals_hidden_layer, input_shape=(1, self.train_predictive_months), activation=self.activation)) self.model_nn.add(Flatten()) self.model_nn.add(Dense(1, activation=self.activation)) self.model_nn.compile(loss=self.loss, optimizer=self.optimizer, metrics=["mse"]) self.model_nn.summary() Console.stop_continue("[Enter para continuar]")
def input_data(self): """ Ingresar información (edificio y departamento) para obtener dataset de la base de datos. """ Console.highlight("1. SELECCIONAR CONJUNTO DE DATOS") self.building = str(input("Ingrese nombre de edificio: ")).upper() self.apartment = str(input("Ingrese nombre de vivienda: ")).upper()
def data_partition(self): Console.highlight("5. PARTICION DEL CONJUNTO DE DATOS") self.input_data_partition() self.set_data_partition() self.build_xy_train_test() self.print_data_partition() Console.stop_continue("[Enter para continuar]")
def get_time_series_wc(self): """ Obtener y mostrar informacion que conformará la serie de tiempo """ self.df = self.df.drop(['Anio', 'Mes', 'Facturado'], axis=1) print("SERIE DE TIEMPO") print(self.df) Console.stop_continue("[Enter para continuar]")
def predict_next_wc(self): """ Realiza la predicción del próximo consumo de agua (wc = water consumption) """ Console.highlight("8. PREDECIR PROXIMO CONSUMO MENSUAL DE AGUA") self.set_df_predict() self.build_matrix_predict() self.predict_model() print("El pronostico de su proximo consummo de agua es : {} m3".format( self.predicted_value))
def question_continue_prediction(self): """ Muestra texto con pregunta a fin de confirmar si se continua con el entrenamiento o si se va realizar la predicción """ Console.highlight("VOLVER A ENTRENAR?") print("1. Si, volver a entrenar.") print("2. No, continuar con la prediccion.") response = int(input("=> ")) self.iterate_train() if response == 1 else self.predict_next_wc()
def execution_model_neural_network(self): Console.highlight("7. ENTRENAMIENTO DE LA RED NEURONAL") self.epochs = int(input("Numero de epochs: ")) self.model_nn.fit(self.x_train, self.y_train, epochs=self.epochs, validation_data=(self.x_val, self.x_val), batch_size=self.train_predictive_months) print("\nFin de entrenamiento") Console.stop_continue("[Enter para ver resultado]")
def normalize_wc(self): """ Normalizar valores del consumo de m3 a valores entre -1 a 1. """ Console.highlight("3. NORMALIZACION DE LOS DATOS") scaler = MinMaxScaler(feature_range=(-1, 1)) self.wc_normalize = scaler.fit_transform(self.df.values.reshape(-1, 1)) print("Datos de la serie de tiempo normalizados [-1,1].") print(self.wc_normalize) Console.stop_continue("[Enter para continuar]")
def convert_time_series_to_supervised_learning_matrix(self): """ Convertimos serie de tiempo en una matrix de aprendizaje supervisado, con tantas variables predictoras ingresadas por consola. """ Console.highlight( "4. CONVERTIR SERIE DE TIEMPO EN MATRIZ DE APRENDIZAJE SUPERVISADO" ) self.train_predictive_months = int( input("Ingresar la cantidad de variables predictoras: ")) self.matrix_sl = self.convert_sequence_to_matrix(1) print( "Matriz de la serie de tiempo con {} variables predictoras (entrenamiento)" .format(self.train_predictive_months)) print("\n") print(self.matrix_sl) Console.stop_continue("[Enter para continuar]")
def build_wc_df(self): """ Construir dataframe de consumo de agua """ Console.highlight( "2. CONSUMOS MENSUALES DE AGUA DEL DEPARTAMENTO {}".format( self.apartment)) self.get_dataset_water_consumption() self.set_dataframe_wc() self.show_dataframe_wc() Console.stop_continue("[Ver consumos del {}]".format(self.apartment)) print(self.df) Console.stop_continue("[Enter para continuar]")