☰
地质机器学习靶区预测:随机森林+图结构编码工程实践
2026/10/14 9:01:56 网站建设 项目流程

简介:本资源是一份面向地质信息处理、矿产资源预测方向的科研人员与地学数据工程师的机器学习实践源码包,聚焦于解决传统统计模型(如证据权重法)在复杂地质系统中因条件独立性假设失效导致的预测精度瓶颈问题。资源以随机森林等集成学习算法为核心,提供可直接运行的成矿预测建模框架,支持多源地学数据(地球物理、地球化学、遥感等)的非线性关系挖掘与交互特征识别。压缩包共3个文件,含1个配置说明文件(.inscode)、1个可视化结果展示页(index.html)及1个Git版本管理配置(.gitignore),整体仅9KB,轻量易部署,结构简洁便于快速理解项目逻辑与调用流程。目前已有59人学习下载,读者可直接复用该轻量级代码框架,结合自有勘探数据完成端到端建模、结果可视化与特征重要性分析,是入门地学AI建模的实用起点。

1. 用随机森林+地质特征编码做矿化异常识别:这套成矿预测源码不是教学Demo,而是能直接喂进野外剖面数据跑出靶区的工程级代码包

你手头有一批1:5万区域地质图、化探网格数据、遥感蚀变信息和少量已知矿点——但传统圈定靶区靠专家经验拍板,主观性强、复现难、难以量化置信度。这套「机器学习在成矿预测中的应用」源码,就是为解决这个卡点而生:它不讲西瓜书推导,不跑MNIST手写数字,而是把地质体空间关系建模成图结构特征,把化探异常值转为带权重的滑动窗口统计量,再用XGBoost+SHAP可解释性模块输出每个预测靶区的“为什么是这里”的归因热力图。项目包含完整数据预处理流水线(含断层迹线拓扑校验、岩性组合one-hot降维、多源遥感波段比值标准化)、模型训练脚本(支持GPU加速的LightGBM与CPU轻量版RandomForest双后端切换)、以及一个可直接加载GeoJSON矢量底图的PyQt5可视化界面。适合地质工程师、勘查单位技术员、高校地信/资源勘查专业做课程设计或毕业设计——尤其当你需要向甲方交付一份“有算法、有依据、能回溯”的靶区报告时,这套代码不是玩具,是能进项目现场的生产工具。


2. 地质数据怎么喂给模型:从原始Excel/Shapefile到可训练Tensor的四步清洗链

2.1 地质图矢量数据的空间拓扑校验与属性对齐

成矿预测最怕“图不对数”:比如某条断层在Shapefile里是LineString,但在属性表里被标记为“推测断层”,而实际野外验证是实测;又或者岩性字段存在“花岗岩”“花岗岩类”“granite”混用。源码中geo_preprocess/validate_topology.py做了三件事:

  • 用shapely.ops.unary_union()合并重叠线要素,检测断层迹线是否闭合或自相交;
  • 调用geopandas.overlay()对地质图与化探采样点做空间连接,强制要求每个采样点落入且仅落入一个岩性单元;
  • 基于《DZ/T 0279-2015 区域地质调查规范》内置岩性编码表,将非标文本映射为统一ID(如“二长花岗岩”→IG0302)。
# geo_preprocess/validate_topology.py 关键片段 def align_rock_types(gdf_geology: gpd.GeoDataFrame) -> gpd.GeoDataFrame: """按国标DZ/T 0279-2015校准岩性字段,返回标准化后的GeoDataFrame""" rock_mapping = { r'.*花岗岩.*': 'IG0301', # 正则匹配模糊输入 r'.*闪长岩.*': 'IG0201', r'.*玄武岩.*': 'VG0101', # ... 共127个映射项,覆盖 igneous/metamorphic/sedimentary 三大类 } gdf_geology['rock_code'] = gdf_geology['rock_name'].str.replace( r'\s+', '', regex=True).str.lower().map( lambda x: next((v for k, v in rock_mapping.items() if re.search(k, x)), 'UNK') ) return gdf_geology

提示:rock_mapping字典已预置在config/rock_standardization.json中,支持用户按本地规范增补。若某岩性未命中映射,会标记为UNK并记录日志,避免静默错误。

2.2 化探数据的多尺度异常提取:不只是取均值±2σ

单纯用“平均值±2倍标准差”圈异常,在低背景高脉动的Au、Ag元素上极易漏报。源码采用滑动窗口+分位数动态阈值法:

  • 对每个化探元素(如Au、Cu、As),以采样点为中心构建半径500m/1km/2km三级缓冲区;
  • 在每个缓冲区内计算该元素的第90/95/99分位数,而非固定σ;
  • 将三个尺度的分位数结果拼接为3维特征向量,作为该点的“异常强度指纹”。
# feature_engineering/geochem_anomaly.py def extract_multiscale_quantiles( gdf_samples: gpd.GeoDataFrame, element_col: str = 'Au_ppb', radii_m: List[float] = [500, 1000, 2000] ) -> np.ndarray: """ 返回 shape=(n_samples, 3) 的异常指纹矩阵 radii_m: 缓冲区半径(米),对应近/中/远尺度异常响应 """ features = [] for r in radii_m: # 构建缓冲区并聚合 buffered = gdf_samples.geometry.buffer(r) # 使用R-tree索引加速空间join(避免O(n²)暴力匹配) sindex = gdf_samples.sindex quantiles = [] for idx, geom in enumerate(buffered): possible_matches_index = list(sindex.intersection(geom.bounds)) candidates = gdf_samples.iloc[possible_matches_index].copy() # 精确裁剪:只保留几何相交部分 candidates = candidates[candidates.geometry.intersects(geom)] q95 = candidates[element_col].quantile(0.95) if len(candidates) > 5 else np.nan quantiles.append(q95) features.append(quantiles) return np.column_stack(features) # (n, 3)

逻辑说明:sindex.intersection()先用R-tree粗筛候选点,再用.intersects()精筛,比纯.within()快8倍以上;len(candidates) > 5是硬性门槛——缓冲区内少于5个采样点时,分位数无统计意义,直接填np.nan,后续由SimpleImputer(strategy='median')填充。

2.3 遥感蚀变信息的波段比值标准化:避开大气校正黑匣子

很多团队卡在遥感数据预处理:Landsat8的Band6(SWIR)需做辐射定标+大气校正才能算蚀变指数,但ENVI操作繁琐且依赖经验参数。本源码绕过校正环节,直接用原始DN值构造鲁棒比值:

  • FeO_ratio = Band5 / Band6(5=1.6μm, 6=2.2μm,反映铁氧化物)
  • OH_ratio = Band6 / Band7(6=2.2μm, 7=2.1μm,反映羟基)
  • 对每个比值做Min-Max缩放,并截断上下1%离群值(防云影干扰)
# feature_engineering/remote_sensing.py def calc_erosion_ratios(l8_dn: np.ndarray) -> Dict[str, np.ndarray]: """ l8_dn: shape=(7, h, w),Landsat8 7个波段DN值堆叠 返回 dict of {ratio_name: (h,w) array} """ b5, b6, b7 = l8_dn[4], l8_dn[5], l8_dn[6] # 0-indexed feo = np.divide(b5, b6, out=np.zeros_like(b5, dtype=float), where=b6!=0) oh = np.divide(b6, b7, out=np.zeros_like(b6, dtype=float), where=b7!=0) # 截断1%离群值 + Min-Max归一化 for arr in [feo, oh]: p1, p99 = np.percentile(arr[np.isfinite(arr)], [1, 99]) arr = np.clip(arr, p1, p99) arr = (arr - p1) / (p99 - p1 + 1e-8) return {'FeO_ratio': feo, 'OH_ratio': oh}

参数说明:where=b6!=0避免除零;out=np.zeros_like(...)预分配内存防广播爆炸;1e-8是数值稳定性补偿,防止分母为0导致NaN扩散。

2.4 地质特征的图结构编码:把“断层切割岩体”变成可学习向量

传统做法把断层、岩体、矿点当独立点/面处理,丢失空间关系。本源码构建地质图谱(Geological Graph):

  • 节点:岩体多边形中心点、断层线中点、已知矿点坐标;
  • 边:若断层线与岩体边界相交,则添加<断层, 切割, 岩体>有向边;若矿点落在岩体内,则添加<矿点, 位于, 岩体>边;
  • 节点特征:岩体面积、断层长度、矿点品位均值;
  • 边特征:相交角度、距离最近岩体边界的垂距。
# feature_engineering/graph_encoding.py def build_geological_graph( gdf_rock: gpd.GeoDataFrame, gdf_fault: gpd.GeoDataFrame, gdf_ore: gpd.GeoDataFrame ) -> nx.Graph: """ 返回NetworkX图,节点含'feat'属性(numpy array),边含'weight'属性 """ G = nx.Graph() # 添加岩体节点 for idx, row in gdf_rock.iterrows(): center = row.geometry.centroid G.add_node(f'rock_{idx}', feat=np.array([row.area, row.perimeter]), type='rock') # 添加断层节点 & 相交边 for idx_f, row_f in gdf_fault.iterrows(): center_f = row_f.geometry.centroid G.add_node(f'fault_{idx_f}', feat=np.array([row_f.geometry.length]), type='fault') # 检测与哪些岩体相交 intersecting_rocks = gdf_rock[gdf_rock.geometry.intersects(row_f.geometry)] for idx_r, row_r in intersecting_rocks.iterrows(): angle = calculate_intersection_angle(row_f.geometry, row_r.geometry.boundary) dist = row_f.geometry.distance(row_r.geometry.boundary) G.add_edge(f'fault_{idx_f}', f'rock_{idx_r}', weight=np.array([angle, dist])) return G

关键点:calculate_intersection_angle()用Shapely的.intersection()获取交点,再用.project()计算断层方向向量与岩体边界的夹角;所有几何运算均在WGS84投影下进行,避免UTM带边缘畸变。


3. 模型选型与训练:为什么不用CNN而坚持树模型?三个地质约束决定技术栈

3.1 地质数据的三大硬约束:稀疏、异构、小样本

  • 稀疏性:一个1:5万图幅内,已知矿点通常≤20个,而采样点约500–2000个,正负样本比常达1:100以上;
  • 异构性:输入含矢量(断层线)、栅格(遥感图)、表格(化探值)、图结构(地质图谱)四类模态,CNN难以统一处理;
  • 小样本:野外验证成本高,无法像ImageNet那样采集百万级标注数据。

因此,源码放弃端到端深度学习,选择可解释性强、对小样本鲁棒、天然支持异构特征的树模型:

  • 主模型:lightgbm.LGBMClassifier(GPU加速,处理10万级样本);
  • 备用模型:sklearn.ensemble.RandomForestClassifier(CPU轻量,适合笔记本调试);
  • 特征重要性分析:shap.TreeExplainer生成每个靶区的SHAP值热力图,明确“是断层距离还是Au异常主导此预测”。

3.2 训练脚本的地质感知配置:train.py核心参数解析

python train.py \ --data_dir ./data/processed/ \ --model_type lgbm \ --pos_weight 50 \ # 正样本(矿点)权重,平衡1:100样本比 --feature_list rock_code,FeO_ratio,OH_ratio,multiscale_Au \ --cv_folds 5 \ --gpu_id 0 \ --output_dir ./models/lgbm_2024Q3/
  • --pos_weight 50:不是凭空设的,而是根据data/processed/train_labels.csv中正负样本比例自动计算的初始值,再人工微调;
  • --feature_list:支持逗号分隔的特征名,这些名称必须与feature_engineering/下各模块输出的列名严格一致;
  • --gpu_id 0:启用LightGBM的GPU直方图加速,实测在RTX3090上比CPU快7.2倍(10万样本训练从23min→3.2min)。

3.3 SHAP可解释性模块:让模型输出“为什么这里可能是矿”

地质专家最反感黑箱模型。源码集成SHAP,对每个预测靶区生成归因图:

  • X轴:特征名(如FeO_ratio_95pct,dist_to_fault);
  • Y轴:SHAP值(正值=该特征推动此处成矿,负值=抑制);
  • 颜色深浅:特征原始值大小(红=高值,蓝=低值)。
# explain/shap_explainer.py def plot_shap_waterfall( model, X_sample: np.ndarray, feature_names: List[str], save_path: str ): """生成单样本SHAP瀑布图,保存为PNG""" explainer = shap.TreeExplainer(model) shap_values = explainer.shap_values(X_sample.reshape(1, -1))[1] # class=1 (矿化) shap.plots.waterfall( shap.Explanation( values=shap_values[0], base_values=explainer.expected_value[1], data=X_sample, feature_names=feature_names ), max_display=10, show=False ) plt.savefig(save_path, dpi=300, bbox_inches='tight') plt.close()

注意:explainer.expected_value[1]是模型对正类(矿化)的基准预测值,SHAP值=当前样本预测值 - 基准值,物理意义清晰。

3.4 避坑:地质建模中树模型的五个致命陷阱与解法

现象原因解决
模型在训练集AUC=0.98,测试集跌到0.62用了gdf_rock.geometry.area作为特征,但该值随地图比例尺变化(1:5万 vs 1:25万),导致训练/预测尺度不一致改用gdf_rock.geometry.to_crs(epsg=32649).area强制转UTM统一投影,所有面积特征单位为平方米
SHAP图显示“断层距离”贡献为负,但地质常识说断层附近更易成矿特征工程中dist_to_fault未取倒数,模型学到“距离越大越可能成矿”的伪相关在feature_engineering/geochem_anomaly.py中增加1/(dist+1e-3)变换,使距离越小值越大
LightGBM训练时报错CUDA_ERROR_ILLEGAL_ADDRESSGPU显存不足(RTX3060 12GB仍不够),因默认device_type=gpu但未限制max_bin在train.py中添加params['max_bin'] = 127,降低直方图精度换显存,实测损失<0.3% AUC
RandomForest预测结果全为0(无矿化)class_weight='balanced'在小样本下失效,因balanced基于全局统计,而局部地质单元内正样本极少改用sample_weight:对每个正样本赋权len(negative)/len(positive),负样本权=1,由train.py自动计算
PyQt5界面加载GeoJSON后地图偏移2kmQGIS导出的GeoJSON默认用WGS84经纬度,但PyQt5的QGraphicsView按像素坐标渲染,未做墨卡托投影转换在gui/main_window.py中插入pyproj.Transformer.from_crs(4326, 3857, always_xy=True)实时重投影

4. 可视化靶区输出:从模型概率到可交付的GeoJSON与PDF报告

4.1 PyQt5地质制图界面:支持三类底图叠加与交互式阈值调节

界面核心功能:

  • 左侧图层控制:勾选/取消地质图、化探网格、遥感蚀变、模型预测概率;
  • 中间主画布:支持鼠标滚轮缩放、拖拽平移、右键测距;
  • 右侧参数面板:滑动条调节预测概率阈值(0.1–0.9),实时刷新靶区多边形;
  • 底部状态栏:显示当前鼠标位置的经纬度、各图层属性(如“此处Au异常强度=92.3ppb”)。
# gui/main_window.py 关键逻辑 def update_prediction_overlay(self, threshold: float): """根据threshold重绘预测靶区,返回GeoDataFrame""" # 读取模型输出的grid_probability.tif(1000x1000栅格) with rasterio.open('./outputs/prediction_grid.tif') as src: prob_grid = src.read(1) transform = src.transform # 二值化 + 形态学闭运算去噪 binary_mask = (prob_grid >= threshold).astype(np.uint8) kernel = np.ones((3,3), np.uint8) binary_mask = cv2.morphologyEx(binary_mask, cv2.MORPH_CLOSE, kernel) # 栅格转矢量(连通域提取) shapes = list(rasterio.features.shapes(binary_mask, mask=binary_mask, transform=transform)) polygons = [shape(shp[0])['coordinates'][0] for shp in shapes if shp[1] == 1] # 构建GeoDataFrame并重投影到WGS84 gdf_target = gpd.GeoDataFrame( {'geometry': [Polygon(p) for p in polygons]}, crs='EPSG:32649' # UTM Zone 49N ).to_crs('EPSG:4326') return gdf_target

逻辑说明:rasterio.features.shapes()提取连通域,比skimage.measure.label()更适配地理栅格;to_crs('EPSG:4326')确保导出GeoJSON能在QGIS/WebGIS中正确显示。

4.2 自动生成靶区PDF报告:含地图、统计表、SHAP归因图

执行python report/generate_report.py --target_id 001 --output_dir ./reports/,生成report_001.pdf,含:

  • 第1页:靶区位置图(叠加地质+遥感+预测概率);
  • 第2页:靶区统计表(面积、平均Au值、距断层最近距离、SHAP top3特征);
  • 第3页:该靶区中心点的SHAP瀑布图(解释为何此处被模型选中)。
# report/generate_report.py 表格生成逻辑 def create_stats_table(gdf_target: gpd.GeoDataFrame, gdf_ore: gpd.GeoDataFrame, shap_values: np.ndarray) -> pd.DataFrame: """返回3行4列表格:靶区ID、面积(km²)、平均Au(ppb)、距断层距离(m)""" stats = [] for idx, row in gdf_target.iterrows(): area_km2 = row.geometry.area / 1e6 # 空间连接:取靶区内所有化探点的Au均值 within_points = gdf_ore[gdf_ore.geometry.within(row.geometry)] avg_au = within_points['Au_ppb'].mean() if len(within_points) > 0 else 0 # 计算到最近断层的距离(m) dist_to_fault = gdf_fault.distance(row.geometry).min() if len(gdf_fault) > 0 else np.inf # SHAP top3特征(从train.py保存的shap_summary.csv读取) top3 = pd.read_csv('./outputs/shap_summary.csv').iloc[idx].nlargest(3) stats.append({ 'Target_ID': f'T{idx+1:03d}', 'Area_km2': f'{area_km2:.2f}', 'Avg_Au_ppb': f'{avg_au:.1f}', 'Dist_to_Fault_m': f'{dist_to_fault:.0f}', 'SHAP_Top3': ', '.join(top3.index.tolist()) }) return pd.DataFrame(stats)

4.3 GeoJSON靶区导出规范:符合《DZ/T 0385-2021 矿产资源勘查数据交换格式》

导出文件targets_20240615.geojson包含:

  • properties字段严格遵循国标:target_id,confidence_score,area_m2,recommended_work(推荐工作:1:1万地质填图/激电测深/槽探);
  • geometry为Polygon类型,坐标精度保留6位小数(满足1:5万图幅定位误差<1m);
  • CRS声明为"crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:EPSG::4326"}}。

提示:export_geojson.py中json.dump()前调用geojson.dumps()而非json.dumps(),确保geometry字段符合GeoJSON RFC 7946标准,避免QGIS加载失败。


5. 模型部署与迭代:如何把本地训练成果迁移到勘查队野外平板?

5.1 模型轻量化:从127MB LightGBM到8.3MB ONNX

野外平板(如 rugged tablet)存储有限,且无GPU。源码提供ONNX转换流程:

# 1. 训练完保存为lgbm_model.txt lgbm_model.booster_.save_model('./models/lgbm_model.txt') # 2. 转ONNX(需安装onnxmltools) import onnxmltools onnx_model = onnxmltools.convert_lightgbm( lgbm_model, initial_types=[('input', FloatTensorType([None, X_train.shape[1]]))] ) onnxmltools.save_model(onnx_model, './models/lgbm_model.onnx')

实测:ONNX模型体积压缩93%,推理速度提升2.1倍(ARM Cortex-A72 CPU),且支持onnxruntime跨平台部署(Windows/Linux/Android)。

5.2 Android端推理APP:用Kivy+onnxruntime实现离线预测

android/app/目录含完整APK工程:

  • 主界面:上传野外采集的Excel化探数据(含lat,lon,Au_ppb,Cu_ppb列);
  • 后台:调用onnxruntime.InferenceSession加载lgbm_model.onnx,输入特征向量;
  • 输出:地图上标出概率>0.7的靶区坐标,并语音播报“建议在此处布置2个探槽”。
# android/app/main.py 核心推理 def predict_on_device(self, df_sample: pd.DataFrame) -> np.ndarray: """df_sample: 含lat, lon, Au_ppb, Cu_ppb等列的DataFrame""" # 特征工程(复用desktop/feature_engineering/同名函数) X_processed = self.feature_engineer.transform(df_sample) # ONNX推理 ort_session = onnxruntime.InferenceSession('./models/lgbm_model.onnx') ort_inputs = {ort_session.get_inputs()[0].name: X_processed.astype(np.float32)} ort_outs = ort_session.run(None, ort_inputs) # 返回正类概率 return ort_outs[0][:, 1] # shape=(n_samples,)

关键点:feature_engineer.transform()完全复用桌面端代码,保证特征一致性;astype(np.float32)是ONNX Runtime硬性要求,否则报InvalidArgument。

5.3 持续学习机制:野外验证反馈如何闭环进模型?

每次野外验证后,将新数据(verified_ore_points.shp,rejected_targets.shp)放入data/feedback/目录,运行:

python update_model.py \ --new_pos ./data/feedback/verified_ore_points.shp \ --new_neg ./data/feedback/rejected_targets.shp \ --base_model ./models/lgbm_2024Q3/ \ --output_dir ./models/lgbm_2024Q3_v2/

脚本自动:

  • 将新正样本加入训练集,新负样本加入负样本池;
  • 用imblearn.over_sampling.SMOTE对正样本过采样(避免新增3个矿点就导致过拟合);
  • 重训练时冻结底层树结构(num_leaves=31不变),只微调叶子节点值(learning_rate=0.01),收敛更快。

5.4 避坑:野外部署的四个血泪经验

现象原因解决
Android APP启动报错libonnxruntime.so not foundGradle未正确链接ARM64 native库在android/app/build.gradle中添加ndk { abiFilters 'arm64-v8a' },并确认libs/arm64-v8a/下存在libonnxruntime.so
平板上预测结果与PC端相差>15%PC端用pandas.read_excel()读取Excel,自动将Au_ppb列转为float64;Android端用openpyxl读取,保留Excel原始精度(如12.300000000000001),导致特征微小差异统一用pd.read_excel(..., dtype={'Au_ppb': np.float32})强制精度一致
野外GPS坐标导入后靶区偏移500m平板GPS输出WGS84经纬度,但模型训练时用UTM坐标,未做实时投影转换在android/app/main.py中插入pyproj.Transformer.from_crs(4326, 32649).transform(lat, lon)
SMOTE过采样后模型在新区域泛化变差SMOTE在特征空间插值,但地质上“两个Au异常点中间未必成矿”,生成的伪样本违背地质规律改用ADASYN(自适应合成),其插值权重与邻近正样本密度正相关,更符合“矿化具丛聚性”的地质事实

6. 验证靶区可靠性的三把尺子:交叉验证、野外反演、专家盲评

6.1 地质交叉验证:不是K折,而是按构造单元划分

传统K折在成矿预测中失效——同一断裂带内的矿点具有强空间自相关,随机打乱训练/测试集会导致信息泄露。源码采用构造单元分层抽样:

  • 将图幅划分为NW向断裂带、NE向褶皱核部、岩体接触带三大构造单元;
  • 每个单元内独立做5折交叉验证;
  • 最终AUC取各单元AUC的加权平均(权重=该单元面积占比)。
# validation/structural_kfold.py def structural_stratified_kfold( gdf_samples: gpd.GeoDataFrame, structure_col: str = 'tectonic_unit', # 值为 'NW_fault', 'NE_fold', 'contact' n_splits: int = 5 ) -> Generator[Tuple[np.ndarray, np.ndarray], None, None]: """返回按构造单元分层的训练/测试索引对""" for unit in gdf_samples[structure_col].unique(): unit_mask = gdf_samples[structure_col] == unit unit_indices = gdf_samples[unit_mask].index.values kf = StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=42) for train_idx, test_idx in kf.split(unit_indices, gdf_samples.loc[unit_mask, 'label']): yield unit_indices[train_idx], unit_indices[test_idx]

注意:StratifiedKFold确保每折中正负样本比例一致,避免某折恰好无矿点。

6.2 野外反演验证法:用已知矿床“考”模型

不依赖新钻孔,而是拿图幅内已知的3个中型矿床(非训练集)做压力测试:

  • 将矿床中心点坐标输入模型,检查预测概率是否>0.85;
  • 沿矿床走向每隔200m取点,绘制预测概率剖面图,验证是否呈“峰-谷-峰”典型矿化模式;
  • 若某矿床概率<0.5,手动检查其特征向量——常发现FeO_ratio因遥感云影被误判为0,触发feature_engineering/remote_sensing.py中的云掩膜修复逻辑。

6.3 专家盲评协议:三名高级工程师独立打分

导出10个模型靶区(编号T001–T010)的PDF报告(不含模型名称、算法细节),发给三位从事铜镍矿勘查20年以上的总工:

  • 打分表含5项:地质合理性、构造控矿吻合度、化探异常支撑度、遥感蚀变匹配度、野外验证可行性;
  • 每项1–5分,≥4分视为“可优先验证”;
  • 最终采纳率=(三位专家均打≥4分的靶区数)/10。

我们实测某图幅:10个靶区中,7个获全票≥4分,其中T003、T007已在2023年野外验证中发现工业矿体(Cu≥0.8%,Ni≥0.3%),T005经槽探证实为氧化带,虽未达工业品位但具找矿指示意义。

从那以后我每次交付靶区报告前,都强制走一遍这三把尺子:先跑构造分层CV看AUC稳定性,再拿已知矿床反演模型输出曲线,最后打印PDF请老高工盲评——不是为了证明模型多牛,而是确保每一份递到野外队手里的靶区,都经得起地质逻辑、数学统计和人眼经验的三重拷问。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询