Skip to content

Repository files navigation

油气管道腐蚀缺陷检测 — 传统机器学习与深度学习对比实验

基于约 10k 条油井生产数据预测油气管道腐蚀速率的二分类项目。对比 5 种传统机器学习模型与 2 种深度学习模型的效果。

目标: 根据 8 个油井生产参数预测腐蚀速率 (CR) 是否为高 (CR > 0.211) / 低 (CR ≤ 0.211)。

模型 调参后准确率
SVM (RBF) 0.9747
Deep MLP 0.9634
TabNet 0.9255
Gradient Boosting 0.9268
Random Forest 0.9045
KNN 0.9028
Decision Tree 0.8319

项目结构

├── traditional_machine_learning_models.py   # 阶段一:传统 ML (SVM, RF, KNN, GB, DT)
├── deep_learning_models.py                  # 阶段二:深度学习 (Deep MLP, TabNet)
├── generated_dataset.csv                    # 数据集 (~10,292 样本, 8 特征)
├── models/                                  # 训练好的模型 (pickle)
│   ├── svm_model.pkl
│   ├── rf_model.pkl
│   ├── knn_model.pkl
│   ├── gb_model.pkl
│   ├── dt_model.pkl
│   ├── scaler.pkl
│   └── feature_names.pkl
├── results/                                 # 实验结果 (CSV + PNG 可视化)
├── tests/                                   # 单元测试 (unittest)
├── requirements.txt
├── LICENSE
└── README.md

数据集

10,292 条样本,8 个数值特征:

特征 说明
Wellhead Temp. (C) 井口温度 (°C)
Wellhead Press (psi) 井口压力 (psi)
MMCFD- gas 天然气产量 (百万立方英尺/日)
BOPD 原油产量 (桶/日)
BWPD 日产水量 (桶/日)
BSW (%) 基本沉淀物和水百分比
CO2 mol. (%) CO2 摩尔百分比 (25°C, 1 atm)
Gas Grav. 气体比重

目标: CR-corrosion defect — 连续值,代码中以 0.211 为阈值二值化。

数据来源: 来源于 Oil-and-gas-pipeline-leakage(Abimbola-ai,AIIP Capstone 项目,源仓库未附带开源许可协议)。

说明: 源数据主体为作者随机生成(seed=42)、CR-corrosion defect 目标经回归模型预测补全,并混入少量原始 data.csv 样本,并非纯实测数据;本项目直接使用原文件,未做改动。

环境配置

# 创建虚拟环境 (conda 示例)
conda create -n corrosion python=3.11
conda activate corrosion

# 安装依赖 (CPU)
pip install -r requirements.txt

# 如需 PyTorch CUDA 版本,根据 CUDA 版本选择:
# CUDA 12.x:
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu126
# 注: pytorch-tabnet 已在 requirements.txt 中,无需单独安装

说明:本仓库开发时实际使用的环境名为 pytorch_env(本地 conda 环境),上面的 corrosion 只是通用示例名,可按需替换。

使用方式

# 阶段一:传统机器学习
python traditional_machine_learning_models.py

# 阶段二:深度学习 (建议先运行阶段一,用于生成对比图)
python deep_learning_models.py

两个脚本均为独立运行。阶段二的对比图会读取阶段一产出的 CSV 结果文件,因此建议按顺序执行。

运行说明

  • 全局配置(数据路径、随机种子、二值化阈值等)以模块级常量定义在脚本顶部;网格搜索参数空间与深度学习超参数内联在各函数中,均可直接修改
  • 阶段一(sklearn)随机种子固定为 42,可复现;深度学习部分未固定 PyTorch 随机种子,多次运行结果可能略有差异
  • Matplotlib 使用 Agg 非交互后端,可在无 GUI 环境中运行
  • 所有结果输出到 results/,模型保存到 models/

实验设计

阶段一:传统机器学习

  1. 加载数据 → MinMax 缩放 → 70/30 分层划分
  2. 默认参数: 训练并评估 5 个分类器
  3. 网格搜索调参: GridSearchCV + 5 折交叉验证
  4. 调参后: 使用最佳参数重新训练并评估
  5. 保存模型、结果 CSV、可视化图表

可视化输出: 混淆矩阵、ROC 曲线、PR 曲线、特征重要性、相关性热力图、雷达图等图表

阶段二:深度学习

  1. 数据按 70/15/15 划分为训练 / 验证 / 测试集(从训练集中再切 15% 做验证)
  2. Deep MLP: 5 层隐藏层 [256,256,128,128,64] + BatchNorm + ReLU + Dropout(0.3) + 2 个残差块。AdamW 优化器,ReduceLROnPlateau 调度,Early Stopping,梯度裁剪
  3. TabNet: 注意力特征选择 + 多步决策。n_d=16, n_a=16, n_steps=3
  4. Early Stopping 与学习率调度只使用验证集,测试集仅在最终评估时使用一次
  5. 与阶段一 SVM 结果对比

结果与局限

  • 本项目数据为复现论文而生成的合成数据(详见"数据集"一节),并非真实工业实测数据,所有指标只代表该合成分布下的表现,不能直接外推到真实管道场景。
  • 当前模型在合成数据上准确率普遍在 0.83–0.97、ROC-AUC 在 0.85–0.99,说明该二分类任务区分度较高、偏"容易",高指标不足以证明模型之间的真实差距,解读时应避免以"模型很强"作为结论。
  • 训练管线已做验证集隔离(70/15/15),早停与调度不接触测试集;但 MinMaxScaler 仍基于全量数据拟合,若要严格避免信息泄漏,可改为仅在训练集上拟合后再变换验证集与测试集。
  • 深度学习部分未固定 PyTorch 随机种子,多次运行结果可能略有波动。

各模型最佳超参数(GridSearchCV)

模型 最佳参数
SVM C=1000, gamma=0.1, kernel=rbf
Random Forest bootstrap=True, max_depth=None, max_features=sqrt, n_estimators=200
KNN metric=manhattan, n_neighbors=31, weights=distance
Gradient Boosting learning_rate=0.2, max_depth=5, max_features=log2, n_estimators=200
Decision Tree criterion=gini, max_depth=10, min_samples_leaf=2, min_samples_split=2

About

Comprehensive project for Fundamentals of Artificial Intelligence, Sophomore Spring Semester. Includes classic ML algorithms (SVM, Random Forest, KNN, Gradient Boosting, Decision Tree) and two DL algorithms (Deep MLP, TabNet).

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages