【视频】R语言支持向量回归SVR预测水位实例讲解|附代码数据

简介: 【视频】R语言支持向量回归SVR预测水位实例讲解|附代码数据


当我们面对样本需要建立相应模型时,使用传统统计方法建立模型需要大量的样本数据,只有在样本量足够大时,该模型才具有一定的可靠性,而实际实验中,不一定每次实验都拥有足够大的样本,甚至是小样本,这时使用传统统计方法来建立出的模型,在可靠性方面就存在一定的局限,难以达到理想的效果点击文末“阅读原文”获取完整代码数据

实例视频

image.png

本文将通过视频讲解,展示如何在R语言中应用SVR模型进行水位预测,并结合一个R语言支持向量回归SVR模型预测商店销量时间序列可视化实例的代码数据,为读者提供一套完整的实践数据分析流程。

支持向量机是由Vapnik等人在1964年提出的,用来解决线性以及非线性数据集的一种分类方法,支持向量回归则是支持向量机在回归问题中的应用。其模型的建立只基于数据集中少部分的支持向量,因此适用于在基于小样本数据上建立模型,被认为是目前所有统计学习方法中针对小样本分类问题的最佳方法,并且,支持向量回归理论基础十分扎实,推导求解过程精密细致,拥有大量的实践基础,具有较高的可行性。目前由于支持向量机自身的优越性,在世界各国研究者开展了大量有关支持向量机的研究,在人工智能领域已经成功实践。

最大划分超平面与支持向量

两条虚线中间的实线就是最大划分超平面在虚线上的样本点就是支持向量,分为正例和负例。两条虚线之间的间隔就是最大间隔:

e6737f7cee5d0fcb8c5e887227cc5954.png


支持向量回归

支持向量回归(SVR)是支持向量机(SVM)处理回归问题的一种模型。正常情况下,传统的回归模型是根据模型的输出值与真实值之间的离差来计算损失的,只有输出值与真实值完全相同,损失才为0。而支持向量回归不同,我们能够允许的输出值与真实值之间有s,于是以E为中心,构造了一个宽度为2s的间隔带,样本点落入间隔带,则认为预测是正确的。

f84be92b13f4c21a9015ec8207aba0ba.png

核技巧

核技巧就是选择合适的核函数将输入空间的样本数据映射到更高维的特征空间中,从而完成非线性变换。常见的核函数有:

71cf941724bb4dc8298ef11392cdb3dc.png

模型建立

A建模的思路

建立支持尚量回归模型实质上是核函数的选择和参数优化的过程,本文是根据大汾水流域一个站点的水位数据,利用其历史资料来建立测试集和训练集,通过选择核函数和参数调优来建立模型,用均方差和相关系数作为评价指标,通过评价指标来判断模型是否为最优模型,利用最终筛选得到的最优模型对已准备好的测试集进行测试,以此来评价最终模型的预测效果。

B构造样本

本文以75%的样本数据作为训练集,其余的样本做为测试集。按照R软件包e1071对数据的要求来构建样本数据,文件类型为*.cSv。

样本

f0c75a8cea9deebb2b8ddf657e24ae71.png

样本数据对比

853a5e4ecc011071d3dea39a57873f95.png af9f852be369e5cf256404d2c82a83ab.png

选择核函数

根据表我们可知,sigmoid的均方差相较于其他两种核函数建立的模型较大,而相关系数却较小,这就表明相关性不明显,所l以sigmoid核函数不合适。

79a4489aea829b584711654e45acba76.png


同时,多项式核函数建立的模型虽然均方差较小,但其相关系数和sigmoid核函数相差不大,表现出的相关性不强烈。所以多项式核函数也不能选用。径向基核函数的均方差和相关系数都表现出很好的性能,综合上述考虑,我们选用高斯核函数来构建大汾水流域的水位预报回归模型。




Miaoqiao Wang

拓端分析师


参数选优

00ba10f8fbf5b61d167fb80e0f33da9c.png

9e9a17ea214b8048237551f94dc423ba.png

根据表可以看出,根据支持向量个数,惩罚函数C和损失函数e,我们将不同参数模型进行对比,不难发现当C=1,=0.1时,模型的效果最好,此时模型是根据1006个支持向量进行建立,具有较高的代表性,并且对训练集以及测试集都表现出良好的泛化能力,相关系数都大于0.995,均方差都小于0.0001。并且回报效果和预测效果比较接近,这说明了该模型具有较好的稳定性。

模型效果

在上述小节中我们通过选择核函数与参数优选建立了相应的水位模型,之后我们需要检验模型的预测效果,衡量模型的可靠性,判断其是否能够应用于实践。

本文使用的是2020年1月至2月的大汾水流域水位数据,于是我们利用后面十天以及一个月的数据来于模型预测值进行比较,来检验模型效果。

1113fbe5608b9c87e1879c73b213658d.png

54f37fa67812bf5492a1df0403790730.png


R语言独立成分分析fastICA、谱聚类、支持向量回归SVR模型预测商店销量时间序列可视化

本文利用R语言的独立成分分析(ICA)、谱聚类(CS)和支持向量回归 SVR 模型帮助客户对商店销量进行预测。

首先,分别对商店销量的历史数据进行了独立成分分析,得到了多个独立成分;其次,利用谱聚类方法将商店销量划分成了若干类,并将每个类的特征进行了提取;最后,利用 SVR模型对所有的商店销量进行预测。实验结果表明,利用 FastICA、 CS和 SVR模型能够准确预测商店销量。

读取数据

d635a1203297a68245384c46ff1bb44b.png

read.csv("train_final.csv")
head(data)

421fc828adece93fef6d54b75fdd4a5b.png

4d1a0e83ce4cce245863df1d0b63b180.png

独立成分分析方法(fastICA)

首先对于d维的随机变量 x∈Rd×1 ,我们假设他的产生过程是由相互独立的源 s∈Rd×1 ,通过 A∈Rd×d 线性组合产生的x=As

如果s的服从高斯分布的,那么故事结束,我们不能恢复出唯一的s,因为不管哪个方向都是等价的。而如果s是非高斯的,那么我们希望找到w从而 s=wTx ,使得 s 之间的相互独立就可以恢复出s了,我将在后面指出,这等价于最大化每个 s 的非高斯性。

采用独立成分分析方法(fastICA),得到矩阵W,A和ICs等独立成分结果(是否需要pca降维?)。

reeplot(prcomp(

8f154b1c9671d10714c159164fce905f.png 50ae3f886a62d038e4e5d3c727362282.png

谱聚类

谱聚类(spectral cluster),这里的谱指的是某个矩阵的特征值,该矩阵是什么,什么得来的,以及在聚类中的作用将会在下文解一一道来。谱聚类的思想来源于图论,它把待聚类的数据集中的每一个样本看做是图中一个顶点,这些顶点连接在一起,连接的这些边上有权重,权重的大小表示这些样本之间的相似程度。同一类的顶点它们的相似程度很高,在图论中体现为同一类的顶点中连接它们的边的权重很大,不在同一类的顶点连接它们的边的权重很小。于是谱聚类的最终目标就是找到一种切割图的方法,使得切割之后的各个子图内的权重很大,子图之间的权重很小。

采用谱聚类方式对所有矩阵的列进行聚类,得到两到三种不同的聚类结果(如何)。

谱聚类聚成2个类别

sc <- spec

f0a7fce40193932468a41c1f1f20df53.png

934624f87a8e470bcc5b2cac25eb7d64.png

聚成3个类别

689d844ae9ecf7825810bb26d857c23a.png


SVR模型

SVR是支持向量机(SVM)的重要应用分支。通过SVR算法,可以找到一个回归平面并使得一个集合中的所有数据距离该平面的距离最短。

使用场景

SVR是一个回归模型,主要是用于拟合数值,一般应用于特征较为稀疏且特征数较少的场景。

例如,可以使用SVR回归模型来预测某个城市的温度。输入特征有很多,例如这个城市某个时期的平均温度、绿化程度、湖泊数量以及日期等。训练数据可以是一段时间内的城市温度。

对所有数据采用log标准化处理,然后对不同的类的训练集分别采用SVR模型训练,再用测试集得到测试结果

所需结果:

k个不同模式时间序列图(分属不同类的某个部门时间序列),表征不同类之间的差异与同类之内的相似.

pre=SVRModel

不同类测试集所采用SVR模型的不同参数(C,ε,σ)。

97a2c9b225da2081f2534d3998bc7458.png

不同类测试集所采用SVR模型之后的预测结果(RMSE,MAD,MAPE,MPE),

RMSE(test,yHat)
## [1] 0.1354805
MAE(test,yHat)
## [1] 0.1109939
MAPE(test,yHat)
## [1] 1.099158
#MPE  
   
ftsa::error(forecast =yHat, true = test, method = "mpe")
## [1] 1.099158

预测模型

预测模型加入时间序列向前1周,2周,3周,4周时的数据作为输入变量,采用不同聚类方式所得预测结果。

向前2周

c84dfff6e6ba29c4180f3dabe5559605.png

不同类测试集所采用SVR模型之后的预测结果(RMSE,MAD,MAPE,MPE)

RMSE(test,yHat)
## [1] 0.09735726
MAE(test,yHat)
## [1] 0.0655883
MAPE(test,yHat)
## [1] 0.6538239
#MPE  
  
ftsa::error(forecast =yHat, true = test, method = "mpe")
## [1] 0.467259

相关文章
|
3月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
4月前
|
存储 数据采集 数据处理
R语言数据变换:使用tidyr包进行高效数据整形的探索
【8月更文挑战第29天】`tidyr`包为R语言的数据整形提供了强大的工具。通过`pivot_longer()`、`pivot_wider()`、`separate()`和`unite()`等函数,我们可以轻松地将数据从一种格式转换为另一种格式,以满足不同的分析需求。掌握这些函数的使用,将大大提高我们处理和分析数据的效率。
|
3月前
R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图
【9月更文挑战第9天】在R语言中,利用`ggplot2`包可绘制多系列柱状图与直方图。首先读取数据文件`data.csv`,加载`ggplot2`包后,使用`ggplot`函数指定轴与填充颜色,并通过`geom_bar`或`geom_histogram`绘图。参数如`stat`, `position`, `alpha`等可根据需要调整,实现不同系列的图表展示。
|
3月前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
|
4月前
|
数据采集 机器学习/深度学习 数据挖掘
R语言数据清洗:高效处理缺失值与重复数据的策略
【8月更文挑战第29天】处理缺失值和重复数据是数据清洗中的基础而重要的步骤。在R语言中,我们拥有多种工具和方法来有效地应对这些问题。通过识别、删除或插补缺失值,以及删除重复数据,我们可以提高数据集的质量和可靠性,为后续的数据分析和建模工作打下坚实的基础。 需要注意的是,处理缺失值和重复数据时,我们应根据实际情况和数据特性选择合适的方法,并在处理过程中保持谨慎,以避免引入新的偏差或错误。
|
4月前
|
数据采集 存储 数据可视化
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。
|
4月前
|
数据处理
R语言数据合并:掌握`merge`与`dplyr`中`join`的巧妙技巧
【8月更文挑战第29天】如果你已经在使用`dplyr`进行数据处理,那么推荐使用`dplyr::join`进行数据合并,因为它与`dplyr`的其他函数(如`filter()`、`select()`、`mutate()`等)无缝集成,能够提供更加流畅和一致的数据处理体验。如果你的代码中尚未使用`dplyr`,但想要尝试,那么`dplyr::join`将是一个很好的起点。
|
7月前
|
BI 索引
R语言数据结构-----向量
R语言数据结构-----向量
34 4
|
7月前
|
图形学
R语言其他相关函数(各函数解析含实例,可供查询)
R语言其他相关函数(各函数解析含实例,可供查询)
214 0
|
7月前
R语言绘图相关函数(含实例)
R语言绘图相关函数(含实例)
64 0