David 2 周之前
父节点
当前提交
3c38a40a6f

+ 11 - 5
data_processing/data_operation/custom_data_handler.py

@@ -5,11 +5,15 @@
 # @Author    :David
 # @Company: shenyang JY
 import argparse, numbers, joblib
+from unittest.mock import inplace
+
 import numpy as np
 import pandas as pd
 from io import BytesIO
 from bson.decimal128 import Decimal128
 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.data_cleaning import *
 
@@ -58,7 +62,7 @@ class CustomDataHandler(object):
         均分数据,获取预测数据集
         """
         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_loc = time_step - 1
         iters = int(len(feature_data)) // time_step
@@ -216,10 +220,10 @@ class CustomDataHandler(object):
         train_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_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
         # 3.缺值补值
         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())):
             raise ValueError("预测数据特征不满足模型特征!")
         pre_data = data[features].copy()
+        pre_data[self.opt.zone] = 1
         if self.opt.Model['predict_data_fill']:
             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)
         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])
         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
 

+ 1 - 0
models_processing/model_tf/tf_lstm_zone_pre.py

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