|
|
04f9a647d8
|
fix: 推理端自适应反射率缩放 + Pipeline 列精确对齐
1. 自适应反射率量级缩放 (inference_pipeline/batch_inference/batch_inference_multi_data):
- 检测光谱列 max > 10 时自动 ÷10000 统一到 0-1 区间
- 三个推理入口全量同步保护
2. Pipeline 列精确对齐 (preprocess_spectra 两处):
- 旧: not in 盲目排除多余列 → 140个光谱列被当多余移除
- 新: 遍历 train_cols,精确字符串匹配 → math.isclose 浮点近似
匹配列重命名为训练列名,缺失列补零
最终 spectra[train_cols] 严格按训练顺序输出
- 兼容路径同步修复
3. 误导性日志修正:
- 改前: '正在应用预处理方法: D1' → 让用户以为推理端在手动做 D1
- 改后: '[模型信息] 训练预处理方法: D1 — 由 Pipeline 内部自动执行'
|
2026-08-04 09:10:26 +08:00 |
|
|
|
e3a08e0ad0
|
feat: 推理端光谱覆盖率智能预警
- 新增 _check_spectral_coverage() 静态方法
- 比较预测波长 vs 训练波长的起止范围
- 左端缺口 >15nm → 黄色警告:蓝端/紫外特征丢失
- 右端缺口 >15nm → 黄色警告:近红外特征丢失
- 在 _preprocess_dual_stream 和 preprocess_spectra 两处调用
- 使用 ANSI \033[93m 黄色高亮,不中断程序运行
|
2026-07-30 13:12:19 +08:00 |
|
|
|
314d947d34
|
fix: 推理端三项修复 — 光谱断崖 + 全零拦截 + MNF 加载诊断
【修复 1】np.interp 边缘断崖 (3 处)
- _preprocess_dual_stream + preprocess_spectra 主/兼容重采样路径
- left/right 从 np.nan 改为 y_vals[0]/y_vals[-1] 恒定外推
- 彻底杜绝 NaN→0.0 造成的光谱曲线两端零值断崖
【修复 2】全零光谱像素 NaN 拦截
- 新增 _mask_zero_spectra_pixels() 静态方法
- 检测 NDWI 掩膜外的全零陆地像素,强制预测值为 NaN
- 覆盖 inference_pipeline / batch_inference / batch_inference_multi_data
- Kriging/IDW 插值天然忽略 NaN,制图时陆地直接留白
【新增】MNF 诊断信息在模型加载时自动输出
- _print_mnf_info_if_available() 递归查找 Pipeline 中的 MNFTransformer
- load_best_model / load_specific_model 加载后自动打印精简 3 行诊断
|
2026-07-30 12:43:29 +08:00 |
|
|
|
3edb73b652
|
fix: DualStream Pipeline 三项修复 — StandardScaler + 部署导出 + 推理拆弹
任务1: Pipeline 插入 StandardScaler
imputer → FeatureUnion → cleaner → scaler(StandardScaler) → SVR
MNF(≈1e4量级)与物理指数(≈1e0量级)统一尺度后入SVR
任务2: .npz 导出 scaler_mean / scaler_scale
C++端可复现 (X - mean) / scale
任务3: 推理端 train_wavelengths 缺失时直接抛异常
不再静默裸退308列导致 SimpleImputer 维度不匹配崩溃
|
2026-07-29 15:41:25 +08:00 |
|
|
|
f3150f7807
|
refactor: 抽取 _preprocess_dual_stream 独立方法
- preprocess_spectra 中 DualStream_MNF 分支从 25 行内联代码
变为 1 行方法调用: self._preprocess_dual_stream(spectra, metadata)
- 新方法含完整文档、fallback 路径、重采样逻辑
- 与旧 WQI 补齐/linspace 路径完全解耦
|
2026-07-29 13:23:13 +08:00 |
|
|
|
f4a927386b
|
refactor: DualStream 纯光谱输入 — 消除 WQI 冗余双向断层
训练端:
- DualStream_MNF 时只取纯光谱列(50列)传给 Pipeline
- PhysicalFeatureExtractor + MNFTransformer 都只收纯光谱
- 不再从 CSV 预读 WQI 列混入输入
推理端:
- 只做 308→50 光谱重采样,不补 WQI
- pipeline.predict() 自动完成 Physical 指数计算 + MNF 降维
- 删除 30+ 行 WQI 补齐代码
训练/推理完全对称: 纯光谱入 → FeatureUnion → SVR 出
|
2026-07-29 13:15:10 +08:00 |
|
|
|
3414f0207a
|
fix: DualStream_MNF 推理重建113列后交给 Pipeline.predict() 完整处理
- 之前手动调 imputer/preproc.transform 后返回, predict() 又套一层
Pipeline → SimpleImputer 收到44列不匹配113列
- 改为重建113列训练特征集,返回后让 model.predict() 完整走
Pipeline: imputer→preproc→cleaner→SVR,与训练完全一致
|
2026-07-29 10:58:26 +08:00 |
|
|
|
c9374a489b
|
fix: DualStream_MNF 推理先重采样308→训练网格再进Pipeline
- 推理数据 308 波段 vs 训练时 113 列(50光谱+63WQI)维度不同
- SimpleImputer fit在113列上不接受308列输入
- 修复: 先 np.interp 重采样到训练波长网格, 再 WQI 补齐,
然后喂入 Pipeline 的 imputer+preproc+cleaner 最终进 SVR
|
2026-07-29 10:53:58 +08:00 |
|
|
|
8b3955fd7a
|
fix: 推理端 DualStream_MNF 直通 Pipeline — 不再走旧重采样+WQI路径
- 训练时 Pipeline 保存了完整 MNFTransformer(mean_/W_mnf_)
和 PhysicalFeatureExtractor(wavelengths/_feat_cols_)
- 推理端新增快速通道:检测到 DualStream_MNF 时,直接调用
Pipeline 的 imputer.transform + preproc.transform,复用训练时
fit 好的变换矩阵,无需手动光谱重采样和 WQI 补齐
- 旧模型(非 DualStream_MNF)保持原有逻辑不变
|
2026-07-29 10:51:01 +08:00 |
|
|
|
241b138bb5
|
fix: 异常值裁剪 P1/P99 → P2/P98,避免边界垃圾值污染
- P1-P99 对 pH/DO 等参数不够保守:边界像素模型预测 pH=-22
导致 P1=-2.38,裁剪后仍保留物理上不可能的值
- 改为 P2-P98(4% 裁剪),IQR 8.3-8.5 的主体数据完全不受影响
- 两处同步:预测端 _clip_outliers + 插值端 _perform_interpolation
|
2026-07-28 17:09:42 +08:00 |
|
|
|
3c7e735342
|
feat: 预测结果百分位裁剪 — 消除极端异常值拉爆专题图色阶
- 新增 _clip_outliers(P1-P99) 方法,预测完成后自动裁剪
- 水体边界零值区域导致模型外推极端值(-86~7026),
裁剪后克里金插值色阶不再被拉爆,正常空间细节可见
- 无异常值时不触发裁剪(零开销)
|
2026-07-28 16:38:07 +08:00 |
|
|
|
b6fa07925a
|
fix: 新模型路径推理时缺失 WQI 特征导致 Pipeline 维度不匹配
- 新模型路径(有 train_wavelengths)重采样后仅产出 50 列光谱,
未计算模型训练时包含的 WQI 指数特征(期望 113 列)
- 旧模型路径(else 分支)有此逻辑但被隔离,新路径无法受益
- 将 WQI 特征补全逻辑提至 if/else 之后统一执行,
通过 n_features_in_ 属性自动检测特征缺口并补齐
|
2026-07-28 15:31:49 +08:00 |
|
|
|
89b67fbd34
|
fix: ML Pipeline 缺失值填充 + 推理端外部模型 dict 兼容
- modeling_batch: Pipeline 首步新增 SimpleImputer(median) 填充 NaN
- inference_batch: 外部模型支持完整 dict(含 metadata/train_wavelengths),
兼容旧版裸 Pipeline 对象
- step9_ml_predict_panel: 模型加载保留完整 dict 而非仅 model 对象,
确保推理端可从 train_wavelengths 做光谱重采样
|
2026-07-28 14:59:11 +08:00 |
|
|
|
c16cddf384
|
feat: 推理端自动波长回填+linspace子采样(旧模型兼容)
|
2026-07-27 18:08:37 +08:00 |
|
|
|
92e8c90370
|
feat: ML模型波长记忆 + 跨传感器光谱重采样 + 数据加载规范化
训练端 (modeling_batch.py):
- _extract_train_wavelengths() 从列名提取训练波长写入 metadata
- load_data_batch/load_data_single 改为基于列名语义智能提取特征
- 废除 feature_start_column 硬编码位置索引
推理端 (inference_batch.py):
- preprocess_spectra() 分支A: train_wavelengths存在→np.interp精确重采样
- preprocess_spectra() 分支B: 无波长元数据→解析列名→np.interp到400-800nm标准网格
- 废除暴力截断和零值填充
|
2026-07-27 14:52:30 +08:00 |
|
|
|
8de73db80e
|
格式统一
|
2026-07-01 11:32:32 +08:00 |
|
|
|
e337f01312
|
全局修正
|
2026-06-29 16:16:55 +08:00 |
|
|
|
d6c003a211
|
fix: Step7 UI坍塌修复+EventBus打通 + DRY抽离spxy/ks + GridSearchCV→RandomizedSearchCV + smoke test死链修复
|
2026-06-18 11:18:27 +08:00 |
|
|
|
e3debbcb15
|
fix(step8): 修复外部模型字典透传断链 + 规范化 loaded_model_data 防 Ridge subscriptable 崩溃
|
2026-06-08 11:36:36 +08:00 |
|
|
|
2b76d7908f
|
feat(step8): 外部模型从单文件升级为母文件夹多模型字典扫描
|
2026-06-08 09:56:02 +08:00 |
|
|
|
170d347e21
|
内容部分修改
|
2026-05-11 17:38:29 +08:00 |
|
|
|
c12b9d8d8a
|
界面优化
|
2026-05-07 14:23:58 +08:00 |
|
|
|
91e36407ae
|
Initial commit of WQ_GUI
|
2026-04-08 15:25:08 +08:00 |
|