David 2 weeks ago
parent
commit
3c38a40a6f

+ 11 - 5
data_processing/data_operation/custom_data_handler.py

@@ -5,11 +5,15 @@
 # @Author    :David
 # @Author    :David
 # @Company: shenyang JY
 # @Company: shenyang JY
 import argparse, numbers, joblib
 import argparse, numbers, joblib
+from unittest.mock import inplace
+
 import numpy as np
 import numpy as np
 import pandas as pd
 import pandas as pd
 from io import BytesIO
 from io import BytesIO
 from bson.decimal128 import Decimal128
 from bson.decimal128 import Decimal128
 from sklearn.preprocessing import MinMaxScaler
 from sklearn.preprocessing import MinMaxScaler
+from sqlalchemy.dialects.mssql.information_schema import columns
+
 from common.processing_data_common import missing_features, str_to_list
 from common.processing_data_common import missing_features, str_to_list
 from common.data_cleaning import *
 from common.data_cleaning import *
 
 
@@ -58,7 +62,7 @@ class CustomDataHandler(object):
         均分数据,获取预测数据集
         均分数据,获取预测数据集
         """
         """
         time_step = self.opt.Model["time_step"]
         time_step = self.opt.Model["time_step"]
-        feature_data = norm_data.reset_index(drop=True)
+        feature_data = norm_data.loc[:, self.opt.features].reset_index(drop=True)
         time_step *= int(time_series)
         time_step *= int(time_series)
         time_step_loc = time_step - 1
         time_step_loc = time_step - 1
         iters = int(len(feature_data)) // time_step
         iters = int(len(feature_data)) // time_step
@@ -216,10 +220,10 @@ class CustomDataHandler(object):
         train_scaler = MinMaxScaler(feature_range=(0, 1))
         train_scaler = MinMaxScaler(feature_range=(0, 1))
         target_scaler = MinMaxScaler(feature_range=(0, 1))
         target_scaler = MinMaxScaler(feature_range=(0, 1))
         # 标准化特征和目标
         # 标准化特征和目标
-        scaled_train_data = train_scaler.fit_transform(train_data_cleaned[self.opt.features])
+        scaled_train_data = train_scaler.fit_transform(train_data_cleaned[self.opt.features+self.opt.zone])
         scaled_target = target_scaler.fit_transform(train_data_cleaned[[target]])
         scaled_target = target_scaler.fit_transform(train_data_cleaned[[target]])
         scaled_cap = target_scaler.transform(np.array([[float(self.opt.cap)]]))[0,0]
         scaled_cap = target_scaler.transform(np.array([[float(self.opt.cap)]]))[0,0]
-        train_data_cleaned[self.opt.features] = scaled_train_data
+        train_data_cleaned[self.opt.features+self.opt.zone] = scaled_train_data
         train_data_cleaned[[target]] = scaled_target
         train_data_cleaned[[target]] = scaled_target
         # 3.缺值补值
         # 3.缺值补值
         train_datas = self.fill_train_data(train_data_cleaned, col_time)
         train_datas = self.fill_train_data(train_data_cleaned, col_time)
@@ -254,9 +258,11 @@ class CustomDataHandler(object):
         if not set(features).issubset(set(data.columns.tolist())):
         if not set(features).issubset(set(data.columns.tolist())):
             raise ValueError("预测数据特征不满足模型特征!")
             raise ValueError("预测数据特征不满足模型特征!")
         pre_data = data[features].copy()
         pre_data = data[features].copy()
+        pre_data[self.opt.zone] = 1
         if self.opt.Model['predict_data_fill']:
         if self.opt.Model['predict_data_fill']:
             pre_data = self.fill_pre_data(pre_data)
             pre_data = self.fill_pre_data(pre_data)
-        pre_data.loc[:, features] = feature_scaler.transform(pre_data)
-
+        scaled_pre_data = feature_scaler.transform(pre_data)[:, :len(features)]
+        pre_data.drop(columns=self.opt.zone, inplace=True)
+        pre_data.loc[:, features] = scaled_pre_data
         pre_x = self.get_predict_data([pre_data], time_series)
         pre_x = self.get_predict_data([pre_data], time_series)
         return pre_x, data
         return pre_x, data

+ 1 - 1
models_processing/model_tf/tf_lstm_zone.py

@@ -55,7 +55,7 @@ class TSHandler(object):
 
 
         model = Model(nwp_input, [zone, output])
         model = Model(nwp_input, [zone, output])
         adam = optimizers.Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-7, amsgrad=True)
         adam = optimizers.Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-7, amsgrad=True)
-        model.compile(loss={"zone": loss, "cdq_output": loss}, loss_weights={"zone": 0.7, "cdq_output": 0.3}, optimizer=adam)
+        model.compile(loss={"zone": loss, "cdq_output": loss}, loss_weights={"zone": 0.1, "cdq_output": 0.9}, optimizer=adam)
 
 
         return model
         return model
 
 

+ 1 - 0
models_processing/model_tf/tf_lstm_zone_pre.py

@@ -37,6 +37,7 @@ def update_config():
     # features参数规则:1.有传入,解析,覆盖 2. 无传入,不覆盖,原始值
     # features参数规则:1.有传入,解析,覆盖 2. 无传入,不覆盖,原始值
     request_args['features'] = request_args['features'].split(',') if 'features' in request_args else current_config['features']
     request_args['features'] = request_args['features'].split(',') if 'features' in request_args else current_config['features']
     request_args['time_series'] = request_args.get('time_series', 1)
     request_args['time_series'] = request_args.get('time_series', 1)
+    request_args['zone'] = request_args['zone'].split(',')
     current_config.update(request_args)
     current_config.update(request_args)
 
 
     # 存储到请求上下文
     # 存储到请求上下文