diff --git a/src/core/prediction/inference_batch.py b/src/core/prediction/inference_batch.py index b392bc0..3536187 100644 --- a/src/core/prediction/inference_batch.py +++ b/src/core/prediction/inference_batch.py @@ -662,6 +662,28 @@ class WaterQualityInference: print(f"[兼容填充] 特征不足,补零 " f"{n_current} → {expected_features} 列") + # ═══════════════════════════════════════════════════════════ + # ★ 特征补全:模型训练时可能包含 WQI 指数等衍生特征, + # 推理端需自动计算补齐(适用于新旧模型两条路径) + # ═══════════════════════════════════════════════════════════ + expected_features = getattr(model, 'n_features_in_', None) + if expected_features is not None and spectra.shape[1] < expected_features: + print(f"[特征补全] 检测到特征缺口:当前 {spectra.shape[1]} 列 " + f"< 模型期望 {expected_features} 列,正在计算 WQI 指数...") + try: + from src.utils.water_index import WaterQualityIndexCalculator + calc = WaterQualityIndexCalculator() + formulas = calc.list_available() + if formulas: + results_df = calc.calculate_many(formulas, spectra, fast=True) + if isinstance(results_df, pd.DataFrame) and not results_df.empty: + original_col_count = spectra.shape[1] + spectra = pd.concat([spectra, results_df], axis=1) + print(f"[特征补全] 完成!扩充至 {spectra.shape[1]} 列 " + f"(+{spectra.shape[1] - original_col_count} WQI)") + except Exception as e: + print(f"[特征补全] 失败: {e}") + # ═══════════════════════════════════════════════════════════ # 通用清洗 # ═══════════════════════════════════════════════════════════