现代机器学习断层识别实战——SVM(附程序)

SVM是支持向量机(Support Vector Machine)的简称,对于解决小样本、非线性、高维的模式识别问题有很多特有的优势。

SVM分类算法的实质就是在样本的特征空间中找到一个最优的超平面,使这个超平面离所有类样本的距离最大化。

下面来讲解一下SVM在地震断层中的应用。

01 SVM断层识别算法原理

SVM要解决的问题可以用一个经典的二分类问题加以描述。如图所示,红色和蓝色的二维数据点显然是可以被一条直线分开的,在模式识别领域称为线性可分问题。然而将两类数据点分开的直线显然不止一条。图1(b)和(c)分别给出了A、B两种不同的分类方案,其中黑色实线为分界线,术语称为“决策面”。每个决策面对应了一个线性分类器。虽然在目前的数据上看,这两个分类器的分类结果是一样的,但如果考虑潜在的其他数据,则两者的分类性能是有差别的。

SVM算法认为图1中的分类器A在性能上优于分类器B(见图b、c),其依据是A的分类间隔比B要大。这里涉及到第一个SVM独有的概念“分类间隔”。在保证决策面方向不变且不会出现错分样本的情况下移动决策面,会在原来的决策面两侧找到两个极限位置(越过该位置就会产生错分现象),如虚线所示。虚线的位置由决策面的方向和距离原决策面最近的几个样本的位置决定。而这两条平行虚线正中间的分界线就是在保持当前决策面方向不变的前提下的最优决策面。两条虚线之间的垂直距离就是这个最优决策面对应的分类间隔。显然每一个可能把数据集正确分开的方向都有一个最优决策面(有些方向无论如何移动决策面的位置也不可能将两类样本完全分开),而不同方向的最优决策面的分类间隔通常是不同的,那个具有“最大间隔”的决策面就是SVM要寻找的最优解。而这个真正的最优解对应的两侧虚线所穿过的样本点,就是SVM中的支持样本点,称为“支持向量”。对于图中的数据,A决策面就是SVM寻找的最优解,而相应的三个位于虚线上的样本点在坐标系中对应的向量就叫做支持向量。

SVM的推导公式比较复杂,这里就不展开讲解了。大家可以通过封装好的库文件直接调用SVM函数。

SVM在解决小样本、非线性及高维模式识别中表现出特有优势,具有优良的泛化能力并且对解决分类问题和回归问题具有鲁棒性。接下来就通过程序实战操作给大家讲解一个案例。

02 实战操作案例

这里给大家带来一个使用Python代码编写的SVM识别断层的demo版程序。

我们的训练数据都已经提前转换为了数值文件。

比如训练的数据是这样的:

整个程序的运行流程包括了以下几步。

第一,加载训练数据。

这里加载断层和非断层的原始训练数据后,还需要先通过一个简单模型提取原始数据的特征,并将识别的特征作为SVM的训练输入。

为了保证后续训练和验证,要将所有数据分为训练数据和验证数据。

第二,使用SVM进行模型训练。

这里使用Keras调用封装好的SVM函数进行模型训练。

第三,验证模型预测效果。

程序编写了metrics模块计算训练结果的量化效果。

初步结果是这样的:

可以看到准确率不算太高。

如果进行交叉测试验证,结果是这样的:

效果也没有明显的提升。

不过整体训练时间33秒,相比深度学习来说非常快了。这里没有进行参数调优,还有一定的提升空间。不过SVM还是线性的分类方法,对于比较复杂的分类问题局限性比较大。

以上给大家简介介绍了一个使用SVM进行断层识别的完整案例。这个程序的数据训练和结果展示效果都不太成熟,主要是让大家先体验一下机器学习的运行流程。后续会在深度学习案例里面进行更完整和详细地讲解。今天的课程就到这里,如果大家对程序感兴趣,请与我联系,再见。

扩展阅读:

怎样轻松入门地震勘探研究:先从地震数据处理开始

深度学习地震去噪入门(附程序)

你可能感兴趣的:(现代机器学习断层识别实战——SVM(附程序))