AI驱动矿产勘探:化探异常预测与LLM辅助找矿实战

📅 2026/8/26 12:29:19
AI驱动矿产勘探:化探异常预测与LLM辅助找矿实战
“贝索斯用 AI 寻找下一块硅”这个说法背后真正值得讨论的是 AI 在战略性矿产勘探领域的落地方式。硅是半导体芯片、光伏板和 AI 算力基础设施的基础材料寻找高纯石英、脉石英和硅质原料矿床过去依赖地质人员的大量经验积累和野外踏勘而现在地球化学采样、遥感影像和历史钻孔数据已经多到一个人无法依靠肉眼完成综合判断。机器学习可以从高维数据中捕捉元素组合异常圈定成矿靶区大模型则可以把预测结果翻译成地质人员能直接使用的找矿建议。这整套流程就是这篇文章要讲清楚的内容。这篇文章面向有一定 Python 基础、想把 AI 用到地质数据处理场景的开发者也包括刚接触矿产预测、想理解数据字段和模型流程的地质相关从业者。文章会从找矿业务的数据结构讲起然后完成一个最小可运行的化探异常预测模型接着接入 LLM API 生成分析建议最后补上生产环境落地时最容易踩的坑和检查清单。学完后你可以把同一套方法迁移到土壤重金属分布预测、岩性分类、遥感目标识别等更广泛的场景。1. 先理解“AI 找矿”要解决的核心问题1.1 传统找矿流程为什么需要算法介入传统找矿不是直接拿锤子去山上敲石头而是分成选区、普查、详查、勘探几个阶段。在选区阶段地质人员要综合已有的地质图、构造格架、岩浆岩分布、化探异常、航磁异常等多源资料判断哪个区域最有可能存在某种矿产。这个阶段的人工判断依赖经验而且存在两个明显问题一是多源数据叠加之后人的记忆容量和制图能力很难处理几十个图层二是不同专家对同一组数据给出的结论可能完全不同难以量化比较。机器学习解决的是这种“多指标融合下的空间判断问题”。把已知矿点和非矿点变成标签把元素含量、地质单元、构造距离等变成特征模型就能学习到成矿地质条件的组合模式然后对未勘探区域给出概率打分。这句话听起来简单但真正落地时特征工程、标签构造、空间交叉验证和结果解释每一环都会决定模型是否可信。1.2 AI 找矿的主要技术路线化探异常、遥感解译、多源融合目前在工程实践中能落地的 AI 找矿路线大致有三类。第一类是地球化学异常识别。土壤、水系沉积物和岩石样本的元素含量数据是连续采样的矿化区域往往会出现元素浓度异常组合。传统的异常提取常用“均值加两倍标准差”之类的阈值方法缺点是对非线性关系不敏感。机器学习可以直接学习多元素之间的非线性组合典型任务包括二分类矿化/非矿化和异常打分。第二类是遥感岩性识别和蚀变信息提取。多光谱和高光谱影像被切成像素用卷积神经网络对岩性和蚀变类型做语义分割。这类方法见效快但很依赖训练样本不同地区和不同传感器之间迁移效果差异很大。第三类是综合多源地质数据的成矿潜力预测。把地层、断层、岩浆岩、地球化学、地球物理数据统一到网格上每个网格点是一个样本用树模型或图模型预测成矿概率。这种路线和矿产潜力制图的思想一致也是本文示例采用的主线。三类路线不是互斥的。实际项目中通常是先做区域尺度的潜力预测圈靶区再在靶区内做遥感解译和化探异常验证。1.3 本文的最小闭环化探数据 随机森林 LLM 辅助分析为了让整套流程可复现这里搭建一个最小闭环输入一份包含坐标、元素含量和标签的化探样本 CSV。模型随机森林分类器用于输出每个样本点的成矿概率。辅助把高概率样本的元素特征发给 LLM API由大模型生成后续勘察建议。输出预测结果表以及一段带解释的文本分析。不使用大型遥感数据集也不做复杂深度学习模型核心是先把一条完整的“数据到结论”链路跑通。跑通之后再根据实际项目的数据量、样本质量和业务需求把随机森林换成 XGBoost、LightGBM或者接入空间插值和卷积模型。2. 数据准备化探数据长什么样怎么构造标签2.1 常规化探数据字段地球化学采样数据通常以表格形式存放每一行是一个采样点每一列是一种元素含量另外还有采样坐标和样本类型。一个简化的 CSV 结构如下sample_id,longitude,latitude,geological_unit,Si,Al,Fe,Mg,Ca,K,Na,Ti,label S001,119.5234,31.2917,quartzite_unit,38.72,5.21,2.14,0.87,1.23,1.54,0.21,0.32,1 S002,119.5351,31.3023,quartzite_unit,35.14,8.32,3.01,1.22,2.45,1.89,0.45,0.41,0字段含义如下表字段含义建议sample_id采样点唯一编号避免重复后续关联地块边界用longitude / latitude坐标明确使用 WGS84 还是 CGCS2000统一坐标系Si / Al / Fe / ...各元素含量单位要统一一般用百分比或 mg/kggeological_unit地质单元可以作为类别特征也可以先不用label是否矿化1 表示已知矿点或矿化点0 表示非矿化点这里要注意元素列的顺序和单位在不同项目中可能完全不同。原始数据如果来自不同实验室必须做单位统一和缺失值处理否则模型学到的可能是实验室系统误差。2.2 正样本和负样本怎么来标签是整个建模流程里最容易出问题的部分。正样本通常来自已知矿床、矿化点和历史开采记录可以从地质资料数据库、区域地质调查报告里提取。负样本不能简单地把“没有被记录为矿点的位置”都当作非矿化点因为很多区域根本没有做过详细勘查没有记录不等于没有矿。常见的处理方式有几种用详细勘探区域外的位置作为负样本但要在报告中说明负样本的不确定性。随机采样大量空区域点作为背景样本让模型学习“矿化区相对背景区的特征差异”。如果只有正样本改用无监督异常检测或正样本-无标签学习避免生造不可靠的负标签。对于本文的最小示例示范起见直接使用 CSV 中已带好的 label 字段。实际项目中label 的构造过程必须和地质人员一起评审。2.3 示例数据生成与字段说明为了不依赖特定地区数据用随机方式生成一份示例数据字段与真实化探格式一致。实际使用这份代码时把生成部分替换成你自己的 CSV 读取即可import numpy as np import pandas as pd rng np.random.default_rng(42) n 500 df pd.DataFrame({ sample_id: [fS{i:04d} for i in range(n)], longitude: rng.uniform(118.0, 121.0, n), latitude: rng.uniform(30.0, 32.0, n), Si: rng.normal(32.0, 5.0, n), Al: rng.normal(6.0, 2.0, n), Fe: rng.normal(3.0, 1.0, n), Mg: rng.normal(1.5, 0.6, n), Ca: rng.normal(2.0, 1.0, n), K: rng.normal(1.8, 0.5, n), Na: rng.normal(0.6, 0.2, n), Ti: rng.normal(0.4, 0.2, n), }) # 模拟矿化样本高 Si、低 Fe 的采样点更容易命中 label1 score (df[Si] - 34.0) * 1.5 - (df[Fe] - 3.0) * 1.2 rng.normal(0, 0.6, n) df[label] (score np.quantile(score, 0.7)).astype(int) df.to_csv(geochem_samples.csv, indexFalse) print(df.groupby(label).size())这串代码里label 的构造规则是用 Si 和 Fe 的线性组合加上随机噪声生成的。这样做的好处是示例中模型一定能学出规律方便验证流程坏处是现实中的成矿规律远非线性组合这么简单所以示例只用于跑通链路。3. 搭建本地找矿预测模型3.1 环境准备建议使用 Python 3.10 或 3.11先创建虚拟环境再安装依赖。本文用到的核心库如下库用途安装方式pandas数据读取与清洗pip install pandasnumpy数值计算pip install numpyscikit-learn建模、评估、交叉验证pip install scikit-learnopenai调用兼容 OpenAI 协议的 LLM APIpip install openai在命令行中执行python -m venv .venv source .venv/bin/activate # Windows 下使用 .venv\Scripts\activate pip install pandas numpy scikit-learn openai安装完成后可以用下面的命令确认版本号防止因为版本差异导致接口变化python -c import pandas; print(pandas.__version__) python -c import sklearn; print(sklearn.__version__)3.2 读取数据与划分训练集读取 CSV 后先把特征列和标签列分开。元素含量属于连续数值特征可以直接输入树模型不需要做标准化这也是随机森林相比逻辑回归的优势之一import pandas as pd from sklearn.model_selection import train_test_split df pd.read_csv(geochem_samples.csv) feature_cols [Si, Al, Fe, Mg, Ca, K, Na, Ti] X df[feature_cols] y df[label] X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.3, stratifyy, random_state42 ) print(train samples:, X_train.shape[0]) print(test samples:, X_test.shape[0]) print(positive ratio in train:, y_train.mean().round(3))这里使用分层抽样是为了保证训练集和测试集中正样本比例一致。对于矿点这类稀少样本不分层的话很可能某个小测试集里全部都是负样本评估指标会失真。3.3 训练随机森林并评估随机森林是矿产潜力预测里常用的基线模型原因是它能够处理表格特征、对特征尺度不敏感并且能直接输出特征重要性。以下代码完成训练、预测和核心指标输出from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import classification_report, roc_auc_score model RandomForestClassifier( n_estimators300, max_depth8, min_samples_leaf5, class_weightbalanced, random_state42, n_jobs-1 ) model.fit(X_train, y_train) y_pred model.predict(X_test) y_prob model.predict_proba(X_test)[:, 1] print(AUC:, roc_auc_score(y_test, y_prob).round(4)) print(classification_report(y_test, y_pred, digits3))输出类似AUC: 0.9512 precision recall f1-score support 0 0.957 0.941 0.949 105 1 0.826 0.873 0.849 45 accuracy 0.920 150AUC 达到 0.95 只是示例数据的结果。真实找矿数据里如果模型 AUC 这么高要优先怀疑标签泄漏或训练集测试集空间重叠而不是相信模型真的这么厉害。3.4 关键参数解释上面的随机森林参数是有讲究的每个参数背后都对应一类实际问题参数含义调大/调小的影响实际建议n_estimators树的数量越大越稳定训练越慢收益递减300 到 800 之间结合训练时长观察max_depth树的最大深度过大容易过拟合过小欠拟合从 6 到 10 开始搜索min_samples_leaf叶节点最少样本数越大越平滑越能抗噪声矿点稀少时建议设 5 以上class_weight类别权重balanced 可以缓解样本不平衡当正样本占比明显低时开启n_jobs并行核数-1 使用全部核心本地训练用 -1生产环境考虑资源限制不建议直接把所有参数调到最大。随机森林的关键是让每棵树尽量“弱而不同”而不是让单棵树无限深。3.5 输出预测结果并落图模型评估后把预测概率写回原始数据表按概率排序方便后续圈定靶区。如果安装了 matplotlib 和 geopandas还可以按经纬度绘制预测概率散点图用颜色深浅表示成矿概率df[prob] model.predict_proba(X)[:, 1] top_targets df.sort_values(prob, ascendingFalse).head(50) top_targets[[sample_id, longitude, latitude, Si, Fe, prob]].to_csv( top_targets.csv, indexFalse ) print(top_targets[[sample_id, longitude, latitude, prob]].head())绘图示例import matplotlib.pyplot as plt fig, ax plt.subplots(figsize(8, 6)) sc ax.scatter( df[longitude], df[latitude], cdf[prob], cmapYlOrRd, s18 ) plt.colorbar(sc, labelmineralization probability) ax.set_xlabel(longitude) ax.set_ylabel(latitude) ax.set_title(Prospectivity Probability Map) plt.savefig(prospectivity_map.png, dpi150)落图不是流程的终点而是给野外验证用的施工图。实际项目中输出的预测图和地质图叠加后还要交给地质人员二次审查不能直接拿着模型概率就去布置钻探。4. 用 LLM API 做地质分析助手4.1 为什么需要 LLM 参与模型输出的概率表看起来很客观但地质人员拿到一张只有概率的表格很难直接使用。他们需要的是解释比如高概率样本集中分布在哪个地层单元哪些元素组合显著偏高指示什么成因类型下一步应该部署什么工作土壤加密采样、槽探还是钻探这些解释性的、带领域常识的工作适合交给大语言模型。大模型不需要替代专家而是把模型输出的结构化结果翻译成可讨论的文本建议减少从数据到报告的人工转换成本。4.2 以 OpenAI 兼容接口为例调用目前很多国产大模型平台提供了与 OpenAI 协议兼容的接口通常只需要修改 base_url 和 api_key 就能接入。这里以硅基流动SiliconFlow平台为例演示调用方式API 地址和模型名以平台当前文档为准from openai import OpenAI client OpenAI( api_keyYOUR_API_KEY, base_urlhttps://api.siliconflow.cn/v1 ) resp client.chat.completions.create( modelQwen/Qwen2.5-7B-Instruct, messages[ {role: system, content: 你是一名地质勘探工程师负责分析化探数据并给出勘察建议。}, {role: user, content: 请根据以下预测结果说明异常特征并给出下一步建议。} ], temperature0.3, max_tokens800 ) print(resp.choices[0].message.content)几个关键点api_key 不能硬编码在