一个完整详细的二维SVR案例分析过程

2023-11-06

文章目录

案例介绍 #

首先,此次案例是以油气开发为背景,选取加粗样式其中重要的两个参数含油饱和度孔隙度分别作为此次案例的自变量和因变量进行试验。按照正常的案例分析步骤进行操作,此次为了凸显程序效果会加上许多绘图效果。

数据预处理 #

导入Python库与所需数据集:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
data = pd.read_excel(r"xxx\xx\x.xlsx")

查看数据集:

data

在这里插入图片描述
提取目标数据并删除空值行:

targetCol = data.loc[:, ['含油饱和度','孔隙度']];#提取目标的列
dealTargetCol = targetCol.dropna(axis=0, how='any')#删除空值行

查看目标数据:

dealTargetCol

在这里插入图片描述

函数拟合仿真 #

查看目标数据集的分布状态:

#解决中文乱码
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
#查看目标数据的分布情况
plt.figure(figsize=(12,4))
plt.subplot(121)
sns.distplot(dealTargetCol['含油饱和度'])
plt.subplot(122)
sns.distplot(dealTargetCol['孔隙度'])
plt.show()

在这里插入图片描述
有图可见,孔隙度数据呈近似正态分布而含油饱和度数据有轻微的偏态分布,此处对于含油饱和度数据应该再给与一定的数值处理使其分布较为平衡一些,此处为了简便我就没处理。
绘制目标数据之间的散点图:

plt.plot(dealTargetCol['含油饱和度'],dealTargetCol['孔隙度'],'ro',label=len(dealTargetCol['含油饱和度']))
plt.xlabel('含油饱和度')
plt.ylabel('孔隙度')
plt.legend()
plt.show()

在这里插入图片描述

进行函数拟合:
在这里插入图片描述

SVR建模 #

划分数据集:

#划分数据集X和Y
X=dealTargetCol.iloc[:,:-1]
Y=dealTargetCol.iloc[:,-1]

分割测试集与训练集:

from sklearn.model_selection import train_test_split
#分割数据集的函数,test_siz用于决定训练集与测试集的分割比例,random_state表示按指定的数值来获取指定的随机分配
Xtrain, Xtest, Ytrain, Ytest = train_test_split(X,Y,test_size=0.2,random_state=42)
#恢复分割后的索引
for i in [Xtrain, Xtest, Ytrain, Ytest]:
    i.index = range(i.shape[0])

定义绘制建模曲线函数:

#绘制建模曲线
def svr_results(y_test, X_test, fitted_svr_model):
    print("C: {}".format(fitted_svr_model.C))
    print("gamma: {}".format(fitted_svr_model.gamma))
    print("Epsilon: {}".format(fitted_svr_model.epsilon))
    perc_within_eps = 100*np.sum(y_test - fitted_svr_model.predict(X_test) < eps) / len(y_test)
    print("Percentage within Epsilon = {:,.2f}%".format(perc_within_eps))
    plt.figure(figsize=(10,7))
    plt.scatter(x=dealTargetCol['含油饱和度'], y=dealTargetCol['孔隙度'],label="非支持向量")
    plt.plot(Xtrain.take(fitted_svr_model.support_,axis = 0),Ytrain.take(fitted_svr_model.support_,axis = 0),'ro',label="支持向量")
    plt.plot(X_test, fitted_svr_model.predict(X_test), color='red',label="预测函数")
    plt.plot(X_test, fitted_svr_model.predict(X_test)+eps, color='black',label="预测边界函数")
    plt.plot(X_test, fitted_svr_model.predict(X_test)-eps, color='black')
    plt.xlabel('含油饱和度')
    plt.ylabel('孔隙度')
    plt.title('SVR Prediction')
    plt.legend()
    plt.show()

SVR建模:

from sklearn.svm import SVR
kernels = ['linear','poly','rbf','sigmoid']
eps = 3
for kernel in kernels:
    svr = SVR(kernel=kernel,epsilon=eps, C=1.0,gamma=0.1).fit(Xtrain,Ytrain)
    Ypredict = svr.predict(Xtest)
    print("kernel: {}".format(kernel))
    svr_results(Ytest, Xtest, svr)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其实这里的有些绘制图形应该用三维图形来展示视觉效果应该会更好,这里我也略过,有兴趣的伙伴可以自己尝试着玩玩。

模型调参 #

由上图不难看出在同等参数的情况下,核函数rbf的表现最为优异,所以我们将以rbf为核函数内核进行进一步模型调参来寻找最优的参数C和参数gamma。
注:我的上述理论没有严格的正确性,所以为了确保数据的绝对可靠性,可以再把另外三个核函数的最优参数的情况也一律寻找出来。
寻找最优参数C:

import math
# C_range = np.logspace(-1,0,100)
C_range = np.linspace(0.01,100,1000)
max_perc = 0.8
predicts = []
for c in C_range:
    svr = SVR(kernel='rbf',epsilon=3,gamma=0.1,C=c).fit(Xtrain,Ytrain)#gramma无影响
    perc_within_eps = 100*np.sum(Ytest - svr.predict(Xtest) < 3) / len(Ytest)
    max_perc = max(max_perc,perc_within_eps)
    predicts.append(perc_within_eps)
print("Max percentage within Epsilon = {:,.2f}%".format(max_perc))
plt.figure()
plt.plot(C_range,predicts,c="blue")
plt.xlabel('c')
plt.ylabel('predict')
plt.show()

在这里插入图片描述
由上图不难看出20就是其中的一个最优参数C值。
寻找最优参数gamma:

# gamma_range = np.logspace(-2,0,1000)
gamma_range = np.linspace(0.01,10,1000)
max_perc = 0.8
predicts = []
for gamma in gamma_range:
    svr = SVR(kernel='rbf',epsilon=3,gamma=gamma,C=20).fit(Xtrain,Ytrain)
    perc_within_eps = 100*np.sum(Ytest - svr.predict(Xtest) < 3) / len(Ytest)
    max_perc = max(max_perc,perc_within_eps)
    predicts.append(perc_within_eps)
print("Max percentage within Epsilon = {:,.2f}%".format(max_perc))
plt.figure()
plt.plot(gamma_range,predicts,c="red")
plt.xlabel('gamma')
plt.ylabel('predict')
plt.show()

在这里插入图片描述
由图可见,最优的gamma值就是最初的默认gamma值–0.1。
到此,此次SVR案例就完整结束,此实验的操作还是很粗糙有很多细节可以优化,希望我所列出的部分能对大家会有所帮助吧。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一个完整详细的二维SVR案例分析过程 的相关文章

随机推荐

  • [HFCTF2020]EasyLogin

    知识点 jwt伪造 jwt 全称 Json Web Token 是一种令牌格式 可以用来区分各个用户 形式是下面这样 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 eyJzZWNyZXRpZCI6MSwidXNl
  • GitHub C 和 C++ 开源库的清单(含示例代码)

    内容包括 标准库 Web应用框架 人工智能 数据库 图片处理 机器学习 日志 代码分析等 标准库 C 标准库 包括了STL容器 算法和函数等 C Standard Library 是一系列类和函数的集合 使用核心语言编写 也是C ISO自身
  • PintOS lab2 User Programs 实验记录

    Background 大体流程如下图所示 显然这时候start process无法被调度到 然后start process 里面load out文件 o文件就是对象文件 是可重定向文件的一种 通常以ELF格式保存 里面包含了对各个函数的入口
  • 教你手机如何查看真实的IP地址

    有朋友不会查询自己手机的IP地址 很多时候我们需要使用vpn切换手机当前的IP 如何判断我们切换IP成功了呢 今天站长就教你手机如何查看目前真实的IP地址 1 打开手机浏览器 2 在搜索框里输入 ip 然后点击搜索 在搜索结果页面就会显示你
  • ESP32 上快捷部署 Tensorflow lite 机器学习(TinyML)

    在这篇文章中 我将向您展示使用 Arduino IDE 将 TensorFlow Lite 模型部署到 ESP32 的最简单方法 无需任何编译内容 Arduino 库 这个 Arduino 库是为了简化使用 Arduino IDE 将用于微
  • 4.8xml于json

    HTTP 协议 HyperText Transfer Protocol 超文本传输协议 是 TCP IP 协议集中的协议 是一个简单的请求 响应协议 指 定了客户端发送给服务器的消息以及服务器的响应 所有的 WWW 文件都必须遵守这个标准
  • matplotlib绘制饼状图

    源自http blog csdn net skyli114 article details 77508430 ticket ST 41707 PzNbUDGt6R5KYl3TkWDg passport csdn net pyplot使用pl
  • 接口测试基础

    目录 一 接口及接口测试概念 1 接口 接口的类型 2 接口测试 二 HTTP协议 1 HTTP协议的特点 2 URL格式 3 HTTP请求 4 HTTP响应 三 接口规范 1 传统风格接口 2 RESTful风格接口 四 接口测试流程 1
  • Python 11. OpenCV 透视变换

    import cv2 import numpy as np from matplotlib import pyplot as plt img cv2 imread pic4 PNG rows cols img shape 2 cv2 ims
  • 支持图文转换!PSD文档处理工具Aspose全新升级

    Aspose PSD是高级PSD和入门级AI文件格式操作API 允许创建和编辑Photoshop文件 并提供更新图层属性 添加水印 执行图形操作或将一种文件格式转换为另一种文件的功能 没有任何Adobe Photoshop或Adobe Il
  • [系统

    系统环境说明 系统 Deepin V20 平台 amd64 参考文献 asdf maven asdf document asdf plugins asdf vm安装 见多版本管理命令行工具asdf vm安装及使用 asdf vm安装Mave
  • 「C++学习笔记」面向.Net Core的(C++)CLR类库非专业入门(+使用Opencv)

    关键词 C CLR Net Core Net Famework Opencv C 目录 什么是CLR类库 本文说明 创建Demo程序 调用dll 通过项目引用 通过dll文件引用 其他还没完全清楚的坑 有关C CLI这块的资料真的很少而且都
  • 如何看待ChatGPT

    如何看待ChatGPT 如何看待ChatGPT 语言学家乔姆斯基说 这是一个抄袭的机器 欺骗性机器 ChatGPT使用大量文本数据进行训练 然后以一种令人信服的修饰语句展现 这使得它和人的互动能力更加契合 但是仍然不是一个充满创造力的智能机
  • 微信小程序之拨打电话

    微信小程序拨打电话功能的实现是采用wx makePhoneCall 具体方法如下 wxml lt view gt 电话 15888888888 lt view data ph 15888888888 bindtap callPhone gt
  • 【Android 12 AOSP学习】Android 12源码下载编译

    一 搭建环境 liunx系统 Ubuntu20 04 Android系统 12 1 安装 Repo 下载Repo前先安装 curl 库 sudo apt get install curl 下载好 curl 库后 设置清华源下载 Repo 然
  • 前端 JavaScript 提取 JSON 数据

    原文地址 假如我们从后端接收到了以下 JSON 数据 id 1 name Xu Albter age 18 使用 JSON parse 方法处理以上数据 将其转换为 JavaScript 对象 var obj JSON parse id 1
  • select函数缺陷分析

    与poll和epoll不同 select函数是事件为单位组织文件描述符 监视的行为较为单一 函数原型 int select int nfds fd set readfds fd set writefds fd set exceptfds s
  • 链表应用:两数相加

    关于链表 链表是一种极其重要的数据结构 因为对指针和抽象思维的要求较高 一度成为身边同学最痛恨的对象 我在将这里演示如何使用链表制作一个可以按位储存数字的容器 鉴于本人亦初学者 有错误请各位在评论区指正 这里还是以介绍链表为主 算法部分苦于
  • SpringCloud和微服务介绍

    SpringCloud介绍 微服务架构是什么 微服务实例的开发 服务的注册与发现 负载均衡 服务容错 API网关 分布式配置中心 调试 部署 持续集成 SpringCloud介绍 SpringCloud是在SpringBoot的基础上构建的
  • 一个完整详细的二维SVR案例分析过程

    文章目录 案例介绍 数据预处理 函数拟合仿真 SVR建模 模型调参 案例介绍 首先 此次案例是以油气开发为背景 选取加粗样式其中重要的两个参数含油饱和度和孔隙度分别作为此次案例的自变量和因变量进行试验 按照正常的案例分析步骤进行操作 此次为