怎么用机器学习模型做时间序列预测

2024-05-21 15:10

1. 怎么用机器学习模型做时间序列预测

SVM理论是在统计学习理论的基础上发展起来的,由于统计学习理论和SVM方法对有限样本情况下模式识别中的一些根本性的问题进行了系统的理论研究,很大程度上解决了以往的机器学习中模型的选择与过学习问题、非线性和维数灾难、局部极小点问题等。应用SVM进行回归预测的步骤具体如下:
1)实验规模的选取,决定训练集的数量、测试集的数量,以及两者的比例;2)预测参数的选取;3)对实验数据进行规范化处理;4)核函数的确定;5)核函数参数的确定。其中参数的选择对SVM的性能来说是十分重要的,对于本文的核函数使用RBF核函数,对于RBF核函数,SVM参数包括折衷参数C、核宽度C和不敏感参数E。目前SVM方法的参数、核函数的参数选择,在国际上都还没有形成统一的模式,也就是说最优SVM算法参数选择还只能是凭借经验、实验对比、大范围的搜寻和交叉检验等进行寻优。实际应用中经常为了方便,主观设定一个较小的正数作为E的取值,本文首先在C和C的一定范围内取多个值来训练,定下各个参数取值的大概范围,然后利用留一法来具体选定参数值
股价时间序列的SVM模型最高阶确定
股价数据是一个时间序列,从时间序列的特征分析得知,股价具有时滞、后效性,当天的股价不仅还与当天各种特征有关,还与前几天的股价及特征相关,所以有必要把前几天的股价和特征作为自变量来考虑。最高阶确定基本原理是从低阶开始对系统建模,然后逐步增加模型的阶数,并用F检验对这些模型进行判别来确定最高阶n,这样才能更客观反映股票价格的时滞特性。具体操作步骤如下:假定一多输入单输出回归模型有N个样本、一个因变量(股价)、m- 1个自变量(特征),由低阶到高阶递推地采用SVM模型去拟合系统(这儿的拓阶就是把昨天股价当做自变量,对特征同时拓阶),并依次对相邻两个SVM模型采用F检验的方法判断模型阶次增加是否合适[ 7]。对相邻两模型SVM ( n)和SVM ( n+ 1)而言,有统计量Fi为:Fi=QSVR (n)- QSVR( n+1)QSVR (n)1N - m n - (m -1)mi =1,2,,, n(1)它服从自由度分别为m和(N - m n - (m -1) )的F分布,其中QSVR (n)和QSVR( n+1)分别为SVR ( n)和QSVR( n+1)的剩余离差平方和,若Fi< F(?,m, N-m n- (m-1) ),则SVM (n )模型是合适的;反之,继续拓展阶数。
前向浮动特征筛选
经过上述模型最高阶数的确定后,虽然确定了阶数为n的SVM模型,即n个特征,但其中某些特征对模型的预测精度有不利影响,本文采用基于SVM和留一法的前向浮动特征特征筛选算法选择对提高预测精度有利影响的特征。令B= {xj: j=1,2,,, k}表示特征全集, Am表示由B中的m个特征组成的特征子集,评价函数MSE (Am)和MSE (Ai) i =1,2,,, m -1的值都已知。本文采用的前向浮动特征筛选算法如下[9]:1)设置m =0, A0为空集,利用前向特征筛选方法寻找两个特征组成特征子集Am(m =2);2)使用前向特征筛选方法从未选择的特征子集(B -Am)中选择特征xm +1,得到子集Am+1;3)如果迭代次数达到预设值则退出,否则执行4);4)选择特征子集Am+1中最不重要的特征。如果xm+1是最不重要的特征即对任意jXm +1, J (Am +1- xm+1)FJ(Am +1- xj)成立,那么令m = m +1,返回2) (由于xm+1是最不重要的特征,所以无需从Am中排除原有的特征);如果最不重要的特征是xr( r =1,2,,, m )且MSE (Am+1- xr) < MSE (Am)成立,排除xr,令A'm= Am+1- xr;如果m =2,设置Am= A'm,J (Am) = J (A'm), ,返回2),否则转向步骤5);5)在特征子集A'm中寻找最不重要的特征xs,如果MSE (A'm- xs)EM SE (Am-1),那么设置Am= A'm, MSE (Am)= MSE (A'm),返回2);如果M SE (A'm- xs) < M SE (Am -1),那么A'm从中排除xs,得到A'm-1= Am- xs,令m = m -1;如果m =2,设置Am= A'm, MSE (Am) = MSE (A'm)返回2),否则转向5)。最后选择的特征用于后续建模预测。
预测评价指标及参比模型
训练结果评估阶段是对训练得出的模型推广能力进行验证,所谓推广能力是指经训练后的模型对未在训练集中出现的样本做出正确反应的能力。为了评价本文模型的优劣,选择BPANN、多变量自回归时间序列模型( CAR)和没有进行拓阶和特征筛选的SVM作为参比模型。采用均方误差(mean squared error, MSE)和平均绝对误差百分率(mean ab-solute percentage error, MAPE)作为评价指标。MSE和MAP定义如下:M SE=E(yi- y^i)2n( 2)MAPE=E| yi- y^i| /yin( 3)其中yi为真值, y^i为预测值, n为预测样本数。如果得出M SE, MAPE结果较小,则说明该评估模型的推广能力强,或泛化能力强,否则就说明其推广能力较差

怎么用机器学习模型做时间序列预测

2. 如何对时间序列预测建模

数据的录入与保存:
       创建Workfile:点击File/New/Workfile,输入起止日期。

        建立object输入数据:点击object/new object,定义数据文件名ex4_2并输入数据。
         将Workfile保存:点击File/save,而store只存储对象object。


模型定阶:点击Quick/Estimate equation输入类似Y AR(1) AR(2) 
AR(3)形式的各种不同模型,利用AIC准则或F检验选择最合适的模
型。
先拟合AR(3)模型:得知,参数不显著,且AIC=2.8352,SC=2.9169,SSE=86.95。


再拟合AR(2)模型:AIC=2.8329,SC=2.8870,SSE=89.64

再拟合AR(1)模型:SSE=91.32,AIC=2.8194,SC=2.8463。
F检验:F=2.77<3.92,说明AR(3)与AR(2)模型没有显著性差异,故可判定适应模型为AR(2) 。



模型预测:用AR(2)模型作预测

3. 用libsvm做时间序列预测,为什么训练数据越少越准确

对于重新描述的问题:
看样子lz在做数模比赛之类的东西。
我想说的是,对于序列数据,如果仅从序列本身,只利用前N天去预测后一天的情况(注意是“只”),这个问题几乎是不可解的,即建模p(x_t)=f(x_{t-1},...,x_{t-N}).
没有实际生活中的什么序列满足这种数学模型。
需要建立的模型其实是p(x_t)=f(x_{t-1},...,x_{t-N},z_t,...,z_{t-N}).

比如x表示天气情况,第一天下雨了,第二天是晴天还是下雨?没法预测,即使知道了已经下了100天的雨了,也不好预测第101天是下雨还是晴天。

你需要的是z,比如每天的气压,气流之类的,这我就不懂了。

对于金融产品的价格预估,你说的的每日行情是指当天的价格(只用了x),还是有更多的信息呢(用了z)。如果是指前者,能预测对才是件怪事

用libsvm做时间序列预测,为什么训练数据越少越准确

4. Matlab中libsvm回归怎么做时间序列的单步和多步预测

您好,很高兴为您解答。

a(1)=0;for i=2:220  a(i)=0.6*a(i-1)+randn;endtrain_t = 1:200;train = a(train_t);train_t = train_t';train = train';test_t = 1:203;test=a(test_t);test_t = test_t';test = test';[bestmse,bestc,bestg] = SVMcgForRegress(train,train_t,-3,11,-7,1,3,0.5,0.5,0.1);cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg),' -p 0.01 -s 3'];model = svmtrain(train,train_t,cmd);[trainpre,trainmse] = svmpredict(train,train_t,model);figure;hold on;plot(train);plot(trainpre,'r');title('原来的训练数据的拟合1-200');legend('原来的训练数据','训练数据预测拟合数据');hold off[testpre,testmse] = svmpredict(test,test_t,model);figure;hold on;plot(test);plot(testpre,'r');title('测试数据的预测1-203');legend('测试数据','测试数据预测拟合数据');hold off如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】希望我的回答对您有所帮助,望采纳!                                                                                                                             ~ O(∩_∩)O~

5. Matlab中libsvm回归怎么做时间序列的单步和多步预测

title('测试数据的预测1-203');
legend('测试数据','测试数据预测拟合数据');
hold off

Matlab中libsvm回归怎么做时间序列的单步和多步预测

6. libsvm支持向量机时间序列预测 训练数据输出效果很好,为什么测试数据输出几乎是一条直线呢?

把所有的数据和程序都交出来吧

7. 用libsvm做时间序列预测,为什么训练数据越少越准确

对于重新描述的问题:
看样子lz在做数模比赛之类的东西。
我想说的是,对于序列数据,如果仅从序列本身,只利用前N天去预测后一天的情况(注意是“只”),这个问题几乎是不可解的,即建模p(x_t)=f(x_{t-1},...,x_{t-N}).
没有实际生活中的什么序列满足这种数学模型。
需要建立的模型其实是p(x_t)=f(x_{t-1},...,x_{t-N},z_t,...,z_{t-N}).

比如x表示天气情况,第一天下雨了,第二天是晴天还是下雨?没法预测,即使知道了已经下了100天的雨了,也不好预测第101天是下雨还是晴天。

你需要的是z,比如每天的气压,气流之类的,这我就不懂了。

对于金融产品的价格预估,你说的的每日行情是指当天的价格(只用了x),还是有更多的信息呢(用了z)。如果是指前者,能预测对才是件怪事

用libsvm做时间序列预测,为什么训练数据越少越准确

最新文章
热门文章
推荐阅读