基于Tensorflow的测井岩性分类预测方法-Facies_Classification - 1

   日期:2020-07-18     浏览:1333    评论:0    
核心提示:简单的实现下:用一个神经网络分类器,对测井数据进行岩性分类。我们有很多种形式的数据,现实中纯数字或文本的数据比较多。当然之前也做过images 的就是dry 和oil 的tensorflow 的CNN 的binary classification。本测井数据由university of Kansas 的Hugoton and Panoma 的gasfield 提供。数据下载地址为:http://www.people.ku.edu/~gbohling/EECS833/ 该数据在6 月18日,2018_基于t

简单的实现下:用一个神经网络分类器,对测井数据进行岩性分类。我们有很多种形式的数据,现实中纯数字或文本的数据比较多。本测井数据由university of Kansas 的Hugoton and Panoma 的gasfield 提供。数据下载地址为:http://www.people.ku.edu/~gbohling/EECS833/
该数据在6 月18日,2018 有过更新。本数据最初用来在SKlearn 的环境里,通过SVM 支持向量机做过详细的研究报告。可以作为一个tutorial 来看。论文发表于2016 年10 月份。论文名称为Facies classification using machine learning. 但是SVM 并不是神经网络,而且SVM 有个很明显的问题,就是瘸子里拔将军。理论上,无论多么没有规律和特征的数据,都是可以训练到100% 正确。
了解此次用到的测井数据的岩性分类情况:
这里忽略后面的adjacent facies 分类,一共有9 种岩性分类。开始读取数据:

%matplotlib inline
import tensorflow as tf
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pandas import set_option
set_option("display.max_rows", 10)
filename = 'facies_vectors.csv'
train_data = pd.read_csv(filename)
train_data

test_data = train_data[train_data['Well Name'] == 'SHANKLE']
train_data = train_data[train_data['Well Name'] != 'SHANKLE']

test_data.describe()

train_data['Well Name'] = train_data['Well Name'].astype('category')
train_data['Formation'] = train_data['Formation'].astype('category')
train_data['Well Name'].unique()

可以查看数据的类型。

facies_labels = ['SS', 'CSiS', 'FSiS', 'SiSh', 'MS',
'WS', 'D','PS', 'BS']

def label_facies(row, labels):
	return labels[ row['Facies'] -1]
	
training_data.loc[:,'FaciesLabels'] = training_data.apply(lambda row: label_facies(row, facies_labels), axis=1)
facies_train_data.describe()


从上面我们可以看到因为数据量不统一,其中PE 只有2783 个有效值,而其他的都是3700,因为神经网络训练的时候要求数据必须是同维度的,所以我们下面把数据的维度统一成2783。

PE_val = train_data['PE'].notna().values
train_data = train_data[PE_val]
train_data.describe()

下面显示已经将数据的维度统一了。

facies_counts = train_data['Facies'].value_counts().sort_index()
facies_counts.index = facies_labels


这里我们可以发现数据有imbalance 的情况,就是每个样本数数量相差比较大,这个目前先没有考虑。作为后期的提高处理。

train_data = train_data.drop(['Formation', 'Well Name', 'Depth', 'Facies', 'NM_M', 'RELPOS'],
axis = 1)

test_data = test_data.drop(['Formation', 'Well Name', 'Depth', 'Facies', 'NM_M', 'RELPOS'],
axis = 1)

train_data

test_data

def convert2onehot(data):
	return pd.get_dummies(data)
new_train_data = convert2onehot(train_data)

new_train_data


有点困…意识有点模糊。下章接着记录。

------未完待续------

欢迎大家订阅我的微信公众号,您的关注将是我创作的源泉和动力:

-------我是分割线------------

This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服