机器学习方法在测井解释上的应用-以岩性分类为例

机器学习在测井解释上的应用越来越广泛,主要用于提高油气勘探和开发的效率和精度。通过使用机器学习算法,可以从测井数据中自动识别地质特征,预测岩石物理性质,以及优化油气储层的评估和管理。

以下是机器学习在测井解释中的一些关键应用:

  1. 岩性分类:机器学习模型能够分析测井数据,如声波、电阻率、伽玛射线等,来识别不同的岩石类型和沉积环境。

  2. 孔隙度和渗透性预测:使用机器学习算法可以根据测井数据预测岩石的孔隙度和渗透性,这对于评估储层质量和油气潜力非常关键。

  3. 储层特征化:机器学习方法可以帮助解释和量化储层的复杂特性,如裂缝、岩层压实度和含油饱和度等。

  4. 时间序列分析:在动态测井解释中,机器学习模型能够分析时间序列数据,监测储层的变化,优化生产策略。

  5. 自动化和精确性:通过自动化的数据处理和分析,机器学习可以减少人为误差,提高解释的精确性和效率。

使用这些技术,地球物理学家和工程师可以更准确地评估油气田的潜力,优化开采计划,从而降低风险和成本。

本文介绍零基础配置机器学习环境完成测井解释中的常见任务——岩性分类

1. 配置实验环境

1.1 安装conda

Conda 是一个开源的包管理系统和环境管理系统,它支持多种语言,如 Python、R、Ruby、Lua、Scala、Java、JavaScript、C/C++ 等。Conda 主要用于科学计算领域,帮助用户管理依赖关系和环境,从而方便在不同项目之间切换不同的库版本。

Conda 的主要特点包括:

  1. 跨平台支持:支持 Linux、Windows 和 macOS。

  2. 环境管理:用户可以创建隔离的环境以避免不同库之间的依赖冲突。每个环境可以拥有不同的库版本,使得多项目开发更为便捷。

  3. 便捷的包管理:Conda 允许用户从其仓库中安装、升级和删除软件包。这些软件包预编译好了,可以避免用户自己编译的复杂性。

  4. 大型生态系统:Conda 通过 Anaconda 和 Miniconda 发行版,为用户提供了大量预编译的科学计算和数据科学相关的软件包。

使用 Conda 的基本命令很简单,比如:

  • 创建新环境:conda create --name myenv python=3.9
  • 激活环境:conda activate myenv
  • 安装包:conda install numpy
  • 列出环境中的包:conda list

这样的特性使 Conda 成为科学研究和数据科学领域非常受欢迎的工具之一。

参考安装方法:Conda安装及使用方法

这里安装成功即可,记得执行配置清华源(国内网速);

1.2 Conda安装Python环境

打开终端,windows打开cmd;

依次执行以下命令:

# 1. 创建环境
conda create -n well-logging python=3.9

image-20240416211401414

# 激活环境
conda activate well-logging

image-20240416211443162

# 安装包
pip install jupyter
pip install matplotlib
pip install pandas
pip install scikit-learn

2. 准备数据

打开vscode ,选择python环境即可

在这里插入图片描述

2.1 测井数据准备

以csv存储的数据为基础,需要包含研究的测井响应特征以判别的标签;这里Core Lithology 作为岩性标签,为了方便研究这里已经将对应的标签进行数据编号;其中 1=粗砂岩 2=中砂岩 3=细砂岩 4=粉砂岩 5=白云岩 6=石灰岩 7=泥岩

image-20240416212737742

2.2 导入环境

2.2.1 导入基本环境

import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.colors as colors
from mpl_toolkits.axes_grid1 import make_axes_locatable
from pandas import set_option
set_option("display.max_rows", 10)#设置要显示的默认行数,显示的最大行数是10
pd.options.mode.chained_assignment = None #为了在增加列表行数的时候防止出现setting with copy warning

2.2.2 读取数据显示

# 模型训练的数据
training_data = pd.read_csv('./train.csv')
training_data
# 预测的数据
testing_data = pd.read_csv('./test.csv')
testing_data

image-20240416214304940

2.2.3 查看数据分布(可选,防止测井响应特征存在缺失情况)

查看数目、均值、方差、误差分布图

# 1=粗砂岩  2=中砂岩   3=细砂岩
# 4=粉砂岩 5=白云岩 6=石灰岩 7=泥岩 ,不同的颜色选项
facies_colors = ['#F4D03F', '#F5B041','#DC7633','#6E2C00','#1B4F72','#2E86C1', '#AED6F1']# 类别不支持中文, 编为英文
facies_labels = ['CS', 'MS', 'FS', 'SS', 'DM','LS', 'MDS']
#facies_color_map is a dictionary that maps facies labels
#to their respective colors
facies_color_map = {}
for ind, label in enumerate(facies_labels):facies_color_map[label] = facies_colors[ind]
testing_data.describe()

image-20240416214727742

2.2.3 查看训练数据的标签数量

#count the number of unique entries for each facies, sort them by facies number (instead of by number of entries)
#计算每个相的唯一条目数,然后按相数(而不是条目数)对它们进行排序
facies_counts = training_data['Core Lithology'].value_counts().sort_index()
#use facies labels to index each count
#使用相标签索引每个计数
facies_counts.index = facies_labelsfacies_counts.plot(kind='bar',color=facies_colors, title='Distribution of Training Data by Facies')
# 各个岩性数据点统计
facies_counts

image-20240416214838440

2.2.4 提取对应数据

除Core Lithology 列,其余均为需要研究的测井响应特征、这里全部提取;

# 训练数据
correct_facies_labels = training_data['Core Lithology'].values
correct_facies_labels_test = testing_data['Core Lithology'].values
# 测试数据
feature_vectors = training_data.drop(['Core Lithology'], axis=1)
feature_vectors_test = testing_data.drop(['Core Lithology'], axis=1)feature_vectors.describe()
feature_vectors_test.describe()

image-20240416215132651

3. 数据建模

3.1 数据标准化

Scikit包含一个预处理模块,可以“标准化”数据(赋予每个变量零均值和单位方差,也称为白化)。 许多机器学习算法都假定特征将是标准的正态分布数据(即:均值和单位方差为零的高斯)。 用于标准化训练集的因素必须应用于将输入到分类器的任何后续功能集中。 StandardScalar类可以适合于训练集,并在以后用于标准化任何训练数据。

from sklearn import preprocessing
# 数据标准化
scaler = preprocessing.StandardScaler().fit(feature_vectors)
scaled_features = scaler.transform(feature_vectors)scaler_test = preprocessing.StandardScaler().fit(feature_vectors_test)
scaled_features_test = scaler.transform(feature_vectors_test)# 数据标准化后数据
feature_vectors

3

3.2 数据划分

X_train = scaled_features
X_test = scaled_features_test
y_train = correct_facies_labels
y_test = correct_facies_labels_test

3.3 数据建模

常用的几种分类方法

# 支持向量机(Support Vector Machine)
from sklearn.svm import SVC
# k近邻分类
from sklearn.neighbors import KNeighborsClassifier
# 逻辑回归
from sklearn.linear_model import LogisticRegression
# 决策树
from sklearn.tree import DecisionTreeClassifier
# 随机森林(Random Forest)
from sklearn.tree import DecisionTreeClassifier
# 梯度提升树(Gradient Boosting Machines)
from sklearn.ensemble import GradientBoostingClassifier## 定义模型,这里调用支持向量机
clf = SVC()
# 调用方式如下:
# clf = KNeighborsClassifier()

3.4 模型训练

clf.fit(X_train,y_train)

3.5 模型预测

predicted_labels = clf.predict(X_test)

See the file classification_utilities.py in this repo for the display_cm() function.

3.6 评估指标

我们需要一些指标来评估分类器的效果。 混淆矩阵是可用于描述分类模型性能的表。 Scikit-learn通过提供实际和预测的相貌标签,使我们能够轻松创建混淆矩阵。

混淆矩阵只是2D数组。 混淆矩阵C [i] [j]的条目等于预测具有相j的观测次数,但已知具有相i。

精度和回忆度是能够更深入地了解分类器对单个相的执行情况的指标。精度是给定一个样本的分类结果,这个样本实际上属于这个类别的概率。召回率是样本将被正确分类为给定类的概率。使用混淆矩阵可以很容易地计算出精确度和查全率

from sklearn.metrics import confusion_matrix
from classification_utilities import display_cm, display_adj_cm
# 混淆矩阵,还有其他例如,准确率、召回率
conf = confusion_matrix(y_test, predicted_labels)

3.7 不同超参数调参

svm算法存在不同过的超参数,需要显示参数过程,以实际准确率作为评估标准,显示不同超参数情况下模型准确率

#model selection takes a few minutes, change this variable
#to true to run the parameter loop
from sklearn.svm import SVC
def accuracy(conf):total_correct = 0.nb_classes = conf.shape[0]for i in np.arange(0,nb_classes):total_correct += conf[i][i]acc = total_correct/sum(sum(conf))return acc
def accuracy_adjacent(conf, adjacent_facies):nb_classes = conf.shape[0]total_correct = 0.for i in np.arange(0,nb_classes):total_correct += conf[i][i]for j in adjacent_facies[i]:total_correct += conf[i][j]return total_correct / sum(sum(conf))do_model_selection = Trueif do_model_selection:C_range = np.array([.01, 1, 5, 10, 20, 50, 100, 1000, 5000, 10000])gamma_range = np.array([0.0001, 0.001, 0.01, 0.1, 1, 10])fig, axes = plt.subplots(3, 2, sharex='col', sharey='row',figsize=(10,10))plot_number = 0for outer_ind, gamma_value in enumerate(gamma_range):row = int(plot_number / 2)column = int(plot_number % 2)cv_errors = np.zeros(C_range.shape)train_errors = np.zeros(C_range.shape)for index, c_value in enumerate(C_range):clf = SVC(C=c_value, gamma=gamma_value)clf.fit(X_train,y_train)train_conf = confusion_matrix(y_train, clf.predict(X_train))cv_conf = confusion_matrix(y_test, clf.predict(X_test))cv_errors[index] = accuracy(cv_conf)train_errors[index] = accuracy(train_conf)ax = axes[row, column]ax.set_title('Gamma = %g'%gamma_value)ax.semilogx(C_range, cv_errors, label='CV error')ax.semilogx(C_range, train_errors, label='Train error')plot_number += 1ax.set_ylim([0.2,1])ax.legend(bbox_to_anchor=(1.05, 0), loc='lower left', borderaxespad=0.)fig.text(0.5, 0.03, 'C value', ha='center',fontsize=14)fig.text(0.04, 0.5, 'Classification Accuracy', va='center', rotation='vertical', fontsize=14)

image-20240416221039797

3.8 交叉验证

clf = SVC(C=10, gamma=1)        
clf.fit(X_train, y_train)cv_conf = confusion_matrix(y_test, clf.predict(X_test))print('Optimized facies classification accuracy = %.2f' % accuracy(cv_conf))
print(f'准确率{accuracy(cv_conf)}')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/821936.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenHarmony南向开发实例:【游戏手柄】

介绍 基于TS扩展的声明式开发范式编程语言,以及OpenHarmony的分布式能力实现的一个手柄游戏。 完成本篇Codelab需要两台开发板,一台开发板作为游戏端,一台开发板作为手柄端,实现如下功能: 游戏端呈现飞机移动、发射…

Windows 安装 Node.js 开发环境

一、简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,主要功能是编写像 web 服务器一样的网络应用。它使用事件驱动、非阻塞式 I/O 模型,可以优化应用程序的传输量和规模,非常适合在分布式设备上运行数据密集型的实时应用。 …

【C++】适配器· 优先级队列 仿函数 反向迭代器

目录 适配器:适配器的应用:1. 优先级队列:仿函数:更深入的了解仿函数:一个关于不容易被注意的知识点: 2. 反向迭代器:(list为例) 适配器: 我们先来谈来一下容…

【网络编程】如何创建一个自己的并发服务器?

hello !大家好呀! 欢迎大家来到我的网络编程系列之如何创建一个自己的并发服务器,在这篇文章中,你将会学习到在Linux内核中如何创建一个自己的并发服务器,并且我会给出源码进行剖析,以及手绘UML图来帮助大家…

基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于HMM隐马尔可夫模型的金融数据预测算法.程序实现HMM模型的训练,使用训练后的模型进行预测。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运…

吃透2000-2024年600道真题和解析,科学高效通过2025年AMC8竞赛

为帮助孩子科学、有效备考AMC8竞赛,我整理了2000-2004年的全部AMC8真题(完整版共600道,且修正了官方发布的原试卷中的少量bug),并且独家制作成多种在线练习,利用碎片化时间,8个多月的时间足以通…

Django中的实时通信:WebSockets与异步视图的结合【第167篇—实时通信】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在现代Web应用程序中,实时通信已经成为了必不可少的功能之一。无论是在线聊天、…

爆肝3k字!掌握Spring与Redis的高效交互:从Jedis到Spring Data Redis

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

Spring Boot 多环境配置:YML 文件的三种高效方法

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

Linux内核之WRITE_ONCE用法实例(四十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

单链表实现通讯录-三万字

声明 这一篇文章我会从单链表的概念,单链表的原理,一直到通讯录项目单链表的实现,再把单链表的专用题型系统的讲解一下(文章较长)。同时建议学习单链表之前可以学习一下顺序表,作为知识铺垫顺序表&#xf…

【Java】@RequestMapping注解在类上使用

RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一。这个注解会将 HTTP 请求映射到控制器(controller类)的处理方法上。 Request Mapping 基础用法 在 Spring MVC 应用程序中,RequestDispatcher (在 Front Controller 之下) 这…

【HCIP学习】OSPF协议基础

一、OSPF基础 1、技术背景(RIP中存在的问题) RIP中存在最大跳数为15的限制,不能适应大规模组网 周期性发送全部路由信息,占用大量的带宽资源 路由收敛速度慢 以跳数作为度量值 存在路由环路可能性 每隔30秒更新 2、OSPF协议…

Spark-机器学习(2)特征工程之特征提取

在之前的文章中,我们了解我们的机器学习,了解我们spark机器学习中的MLIib算法库,知道它大概的模型,熟悉并认识它。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错&a…

【ARFoundation自学01】搭建AR框架,检测平面点击位置克隆物体

Unity开发ARFoundation相关应用首先安装ARFoundation包 然后设置XR 1.基础AR场景框架搭建 2.一个基本的点击克隆物体到识别的平面脚本 挂在XROrigin上 脚本AppController 脚本说明书 ## 业务逻辑 AppController 脚本旨在实现一个基本的 AR 应用程序功能:用户通过…

R语言使用installr包对R包进行整体迁移

今天分享一个R语言的实用小技巧,如果咱们重新安装了电脑(我重装了电脑)或者因为需要卸载旧版本的R软件,安装新版本的R,那么必然会造成R包的库缺失,需要重新下载,有些还不是官方的R包&#xff0c…

12.模板进阶(模板的全特化,偏特化,声明与定义分离)

1. 非类型模板参数 模板参数分类: 类型形参 与 非类型形参 类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。 非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当…

爬取东方财富股票代码

我们打开东方财富网站&#xff1a;http://quote.eastmoney.com/stocklist.html 假如懒得爬&#xff0c;也可以用现成的股票数据源&#xff1a;https://stockapi.com.cn 这展示了所有股票信息&#xff0c;不过需要我们分页去爬取 我们可以查询具体的html代码&#xff1a; <…

服装连锁收银软件哪个好用

竞争激烈的服装连锁行业&#xff0c;选择一款高效可靠的收银软件至关重要。商淘云连锁收银软件作为业内领先的解决方案之一&#xff0c;备受关注和好评。本文将介绍商淘云连锁收银软件&#xff0c;并分享其在提升服装连锁店效率和客户体验方面的优势。 1. 商淘云连锁收银软件的…

异地组网如何安装?

【天联】是一款强大的异地组网安装工具&#xff0c;可以帮助企业实现远程设备的统一管理和协同办公。以下是【天联】可以应用的一些场景&#xff1a; 零售、收银软件应用统一管理&#xff1a;【天联】可以结合医药、餐饮、商超等零售业的收银软件&#xff0c;实现异地统一管理。…