最近我们被客户要求撰写关于SVM的研究报告,包括一些图形和统计输出。

什么是支持向量机 (SVM)?

我们将从简单的理解 SVM 开始。

【视频】支持向量机SVM、支持向量回归SVR和R语言网格搜索超参数优化实例

支持向量机SVM、支持向量回归SVR和R语言网格搜索超参数优化实例

,时长07:24

假设我们有两个标签类的图,如下图所示:

你能决定分隔线是什么吗?你可能想出了这个:

这条线将类完全分开。这就是 SVM 本质上所做的——简单的类分离。

现在,数据是这样的:

在这里,我们没有一条简单的线来分隔这两个类。所以我们将扩展我们的维度并沿 z 轴引入一个新维度。

我们现在可以将这两个类分开:

这正是 SVM 所做的!它试图找到分隔这两个类的线/超平面(在多维空间中)。然后根据要预测的类别,根据它是位于超平面的正面还是负面,对新点进行分类。

支持向量机 (SVM) 算法的超参数

在继续之前,您应该了解 SVM 的一些重要参数:

  • 核:核帮助我们在更高维空间中找到超平面,而不会增加计算成本。通常,如果数据的维度增加,计算成本会增加。当我们无法在给定维度中找到分离超平面并且需要在更高维度中移动时,需要增加维度:

  • 超平面:这基本上是 SVM 中两个数据类之间的分隔线。但在支持向量回归中,这条线将用于预测连续输出

  • 决策边界:决策边界可以被认为是一条分界线(为简化起见),其一侧是正例,另一侧是负例。在这条线上,这些例子可以分为正面或负面。SVM 的相同概念也将应用于支持向量回归

支持向量回归 (SVR) 简介

支持向量回归 (SVR) 使用与 SVM 相同的原理,但用于回归问题。让我们花几分钟时间了解 SVR 背后的想法。

支持向量回归背后的想法

回归的问题是在训练样本的基础上找到一个近似映射从输入域到实数的函数。因此,现在让我们深入了解 SVR 的实际工作原理。

将这两条绿线视为决策边界,将蓝线视为超平面。当我们继续使用 SVR 时,我们的目标是基本上考虑决策边界线内的点。我们的最佳拟合线是具有最大点数的超平面。

我们首先要了解的是什么是决策边界。将这些线视为距超平面的任何距离,例如“a”。因此,这些是我们在距超平面“+a”和“-a”距离处绘制的线。文中的这个'a'基本上被称为epsilon。

假设超平面的方程如下:

Y = wx+b(超平面方程)

则决策边界方程变为:

wx+b=+a

wx+b= -a

因此,任何满足我们的 SVR 的超平面都应该满足:

-a < Y- wx+b < +a

我们的主要目标是在距原始超平面“a”距离处确定决策边界,以便最接近超平面的数据点或支持向量位于该边界线内。

因此,我们将只选取那些在决策边界内且错误率最低的点,或者在公差范围内的点。这给了我们一个更好的拟合模型。

接下来,我们将展示如何使用R语言来进行支持向量回归SVR。

R语言进行支持向量机回归SVR和网格搜索超参数优化

我们将首先做一个简单的线性回归,然后转向支持向量回归,这样你就可以看到两者在相同数据下的表现。

一个简单的数据集

首先,我们将使用这个简单的数据集。

正如你所看到的,在我们的两个变量X和Y之间似乎存在某种关系,看起来我们可以拟合出一条在每个点附近通过的直线。

我们用R语言来做吧!

第1步:在R中进行简单的线性回归

下面是CSV格式的相同数据,我把它保存在regression.csv文件中。

我们现在可以用R来显示数据并拟合直线。

# 从csv文件中加载数据dataDirectory <- "D:/" #把你自己的文件夹放在这里data <- read.csv(paste(dataDirectory, 'data.csv', sep=""), header = TRUE)# 绘制数据plot(data, pch=16)# 创建一个线性回归模型model <- lm(Y ~ X, data)# 添加拟合线abline(model)

上面的代码显示以下图表:

第2步:我们的回归效果怎么样?

为了能够比较线性回归和支持向量回归,我们首先需要一种方法来衡量它的效果。

为了做到这一点,我们改变一下代码,使模型做出每一个预测可视化

# 对每个X做一个预测pred <- predict(model, data)# 显示预测结果points(X, pred)

产生了以下图表。

对于每个数据点Xi,模型都会做出预测Y^i,在图上显示为一个红色的十字。与之前的图表唯一不同的是,这些点没有相互连接。

为了衡量我们的模型效果,我们计算它的误差有多大。

我们可以将每个Yi值与相关的预测值Y^i进行比较,看看它们之间有多大的差异。

请注意,表达式Y^i-Yi是误差,如果我们做出一个完美的预测,Y^i将等于Yi,误差为零。

如果我们对每个数据点都这样做,并将误差相加,我们将得到误差之和,如果我们取平均值,我们将得到平均平方误差(MSE)。

在机器学习中,衡量误差的一个常见方法是使用均方根误差(RMSE),所以我们将使用它来代替。

为了计算RMSE,我们取其平方根,我们得到RMSE

使用R,我们可以得到以下代码来计算RMSE

rmse <- function(error){sqrt(mean(error^2))}

我们现在知道,我们的线性回归模型的RMSE是5.70。让我们尝试用SVR来改善它吧!

第3步:支持向量回归

用R创建一个SVR模型。

下面是用支持向量回归进行预测的代码。

model <- svm(Y ~ X , data)

如你所见,它看起来很像线性回归的代码。请注意,我们调用了svm函数(而不是svr!),这是因为这个函数也可以用来用支持向量机进行分类。如果该函数检测到数据是分类的(如果变量是R中的一个因子),它将自动选择SVM。

代码画出了下面的图。

这一次的预测结果更接近于真实的数值 ! 让我们计算一下支持向量回归模型的RMSE。

# 这次svrModel$residuals与data$Y - predictedY不一样。#所以我们这样计算误差svrPredictionRMSE

正如预期的那样,RMSE更好了,现在是3.15,而之前是5.70。

但我们能做得更好吗?

第四步:调整你的支持向量回归模型

为了提高支持向量回归的性能,我们将需要为模型选择最佳参数。

在我们之前的例子中,我们进行了ε-回归,我们没有为ε(ϵ)设置任何值,但它的默认值是0.1。 还有一个成本参数,我们可以改变它以避免过度拟合。

选择这些参数的过程被称为超参数优化,或模型选择。

标准的方法是进行网格搜索。这意味着我们将为ϵ和成本的不同组合训练大量的模型,并选择最好的一个。

# 进行网格搜索tuneResultranges = list(epsilon = seq(0,1,0.1), cost = 2^(2:9))# 绘制调参图plot(Result)

在上面的代码中有两个重要的点。

  • 我们使用tune方法训练模型,ϵ=0,0.1,0.2,...,1和cost=22,23,24,...,29这意味着它将训练88个模型(这可能需要很长一段时间

  • tuneResult返回MSE,别忘了在与我们之前的模型进行比较之前将其转换为RMSE。

最后一行绘制了网格搜索的结果。

在这张图上,我们可以看到,区域颜色越深,我们的模型就越好(因为RMSE在深色区域更接近于零)。

这意味着我们可以在更窄的范围内尝试另一个网格搜索,我们将尝试在0和0.2之间的ϵ值。目前看来,成本值并没有产生影响,所以我们将保持原样,看看是否有变化。

rangelist(epsilo = seq(0,0.2,0.01), cost = 2^(2:9))

我们用这一小段代码训练了不同的168模型。

当我们放大暗区域时,我们可以看到有几个较暗的斑块。

从图中可以看出,C在200到300之间,ϵ在0.08到0.09之间的模型误差较小。

希望对我们来说,我们不必用眼睛去选择最好的模型,R让我们非常容易地得到它,并用来进行预测。

# 这个值在你的电脑上可能是不同的# 因为调参方法会随机调整数据tunedModelRMSE <- rmse(error)

我们再次提高了支持向量回归模型的RMSE !

我们可以把我们的两个模型都可视化。在下图中,第一个SVR模型是红色的,而调整后的SVR模型是蓝色的。

我希望你喜欢这个关于用R支持向量回归的介绍。你可以查看原文得到本教程的源代码。


【视频】支持向量机SVM、支持向量回归SVR和R语言网格搜索超参数优化实例相关推荐

  1. Python集成机器学习:用AdaBoost、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化

    最近我们被客户要求撰写关于集成机器的研究报告,包括一些图形和统计输出. Boosting 是一类集成机器学习算法,涉及结合许多弱学习器的预测. 视频:从决策树到随机森林:R语言信用卡违约分析信贷数据实 ...

  2. 支持向量机与支持向量回归(support vector machine and support vector regression)

    支持向量机和支持向量回归是目前机器学习领域用得较多的方法,不管是人脸识别,字符识别,行为识别,姿态识别等,都可以看到它们的影子.在我的工作中,经常用到支持向量机和支持向量回归,然而,作为基本的理论,却 ...

  3. 基于DDTBOX,使用线性支持向量回归(SVR)从ERP数据中解码连续变量

    导读 事件相关电位(ERP)数据的多变量分类分析是预测认知变量的强大工具.然而,分类通常仅限于分类变量,并未充分利用连续数据,如反应时间.反应力或主观评分.另一种方法是支持向量回归(SVR),它使用单 ...

  4. 机器学习——支持向量回归(SVR)

    机器学习--支持向量回归(SVR) educoder平台练习题 如果博客中图片加载失败可点击链接跳转至实训详情 https://www.educoder.net/shixuns/b6yi97f2/ch ...

  5. [翻译] 支持向量回归SVR的介绍

    X. Introduction 本文先翻译一下: http://www.saedsayad.com/support_vector_machine_reg.htm Support Vector Mach ...

  6. ❤️解决非线性回归问题的机器学习方法总结:多项式线性模型、广义线性(GAM)模型、回归树模型、支持向量回归(SVR)模型

    文章目录 前言 多项式回归模型 概念解释: sklearn实现多项式回归模型: 广义线性可加(GAM)模型 概念解释: pygam实现广义线性可加模型: GAM模型的优点与不足: 回归树模型 概念解释 ...

  7. 使用最大离散重叠小波变换MODWT和支持向量回归 SVR的金融时间序列预测

    本例使用的数据链接如下:https://www.histdata.com/download-free-forex-historical-data/?/ascii/tick-data-quotes/AU ...

  8. 机器学习西瓜书笔记:软间隔和支持向量回归SVR

    1.首先由SVM问题(最大间隔超平面模型):所有样本都可以正确分类的最优化问题,引入软间隔SVM(允许分类错误)的最优化问题,即需要添加损失函数(样本不满足约束的程度,或者说分类错误的程度),然后最优 ...

  9. 【机器学习系列】之支持向量回归SVR

    作者:張張張張 github地址:https://github.com/zhanghekai [转载请注明出处,谢谢!] [机器学习系列]之SVM硬间隔和软间隔 [机器学习系列]之SVM核函数和SMO ...

最新文章

  1. 使用 markdown-it 解析 markdown 代码(读 VuePress 三)
  2. C语言训练题-铺草坪简易版
  3. android 代理 wifi热点,android wifi热点默认网关
  4. 受众定向_我如何了解社区与受众之间的差异
  5. modal组件 vue_开发一个简单的 Vue 弹窗组件
  6. 数据库性能监控之联合索引使用
  7. IOS开发之数据库FMDB的使用
  8. 三星香港 android8.0,三星A8 Star官方港版安卓8.0固件刷机包:TGY-G8850ZHS3ASD1
  9. 完全平方数的几种判定方法与算法用时
  10. mysql查询之左连接查询与右连接查询
  11. 超级详细配置SSM (Intellij idea + Maven + Spring + SpringMVC + MyBatis + c3p0 )
  12. 数学小课堂:数学思维(从逻辑出发想问题)
  13. Native Instruments Guitar Rig 5 Player WiN-MAC 免费的电吉他效果器
  14. 企业自动化运维ansible
  15. java爬虫实战——实现简单的爬取网页数据
  16. 决策边界绘制函数plot_decision_boundary()和plt.contourf函数详解
  17. 深入理解设计模式-抽象工厂模式
  18. 电脑桌面图标都变成lnk后缀的三种解决办法
  19. python3格式化输出
  20. 十三:python知识总结(更新中)

热门文章

  1. Word文字添加内容覆盖后续内容解决办法
  2. 【Realtek sdk-4.4.1】RTL8198D升级uboot和固件操作方法
  3. java 获取温度_Java利用RXTX串口通信工具类获取DS18B20温度传感器的温度值
  4. 怎么压缩图片不影响清晰度
  5. 2022杭电多校第二场
  6. python安装拒绝访问解决方法_使用pip安装时遇到文件拒绝访问和版本升级的问题及解决方法...
  7. 【100个 Unity实用技能】☀️ | C#中 Add 和 AddRange 的区别 及 使用示例
  8. H55/H57主板全面解析
  9. Javascript的5种基本数据类型总结
  10. H5引入阿里矢量图标(Symbol)