本文共 6608 字,大约阅读时间需要 22 分钟。
1. 使用默认的arma(p=3, q=1)模型进行预测ts_predicate_simple(unixtime, val, nPred, samplePeriod, sampleMethod)2. 使用ar(p)模型进行预测ts_predicate_ar(unixtime, val, p, nPred, samplePeriod, sampleMethod)3. 使用arma(p, q)模型进行预测ts_predicate_arma(unixtime, val, p, q, nPred, samplePeriod, sampleMethod)4. 使用arima(p, d, q)模型进行预测ts_predicate_arima(unixtime, val, p, d, q, nPred, samplePeriod, sampleMethod)
1. 不对数据做任何处理,直接使用GBRT模型进行预测ts_regression_predict(unixtime, val, nPred, 'origin', samplePeriod, sampleMethod)2. 对数据做时序分解,对分解出来的序列分别做预测,在进行整合ts_regression_predict(unixtime, val, nPred, 'forest', samplePeriod, sampleMethod)3. 不对数据做任何处理,使用线性模型进行预测ts_regression_predict(unixtime, val, nPred, 'linear', samplePeriod, sampleMethod)4. 使用auto参数,算法尽可能根据时序自身的特征,进行学习预测ts_regression_predict(unixtime, val, nPred, 'auto', samplePeriod, sampleMethod)
传送门在这里:
针对小波变换,聊深了就会涉及到大量的问题定义、性质分析、定理证明等。仅仅想明白下为什么用小波而不选择大家熟悉的傅立叶变换,就要写上几篇文章,且需要在不通的问题中去对比分析。作者非数学系出身,非信号出身,对于冗长的证明就是看看就好,重在了解小波的特点而解决相应的问题。
傅立叶变换主要给大家提供了一种在不通空间进行信号表达的桥梁,但是该桥梁是一个独木桥(仅仅有一个维度:时间或者频率)。针对平稳时间信号而言,频率相对稳定(随时间变化较小),这种信号可以使用傅立叶变换去解决,很好的分析相应的频域特征;
现实中信号大都是非平稳信号,在计算机系统中的各个指标都会不同,当想去提取有用的信息时,最初往往是通过加窗口的傅立叶变换的方法在不通窗口将频域的相关信息进行展开。其中涉及到窗口的选择和相应的变换基(就是作用函数,这里我们就先这么称呼哈),复杂度较高。因此,各路大神,将尺度信息和位置信息整合在一起(是按照一定的函数关系互相联动),在很多约束下(能量守恒、正交性等)设计出不通性质的小波函数(也叫小波基),可以更直观的分析在高维空间中的特性,从而更好的解决问题。
可视化一些小波基函数
$$ X = D_1 + D_2 + ... + D_N + A_N $$
其中,$D_1, D_2, D_3, ..., D_N$分别为第一层、第二层到第N层分解得到的高频信号,$A_N$为第N层分解得到的低频信号。对$D_1, D_2, D_3, ..., D_N$分别进行预测,然后进行小波重构实现对源信号的预测:
其中步骤2中的时序模型,可以为ARMA模型,Forest模型,神经网络模型,SVR模型等。
PS:拿到各个分解出来的序列信号,还能做些什么?
举个例子,看看Mallat分解算法对于信号的处理能力
图中各个区域的含义:
图中各个区域的含义:
WaveShrink方法来对未知信号进行降噪,此方法的原理是将小波系数趋向零收缩,从而达到降噪目的。一般而言,信号经小波变换后,得到一系列的小波系数。一般情况下,较大系数代表信号,较小系数代表噪声,将小系数剔除后,在进行小波逆变换,重构信号中的噪声含量便降低了。
WaveShrink降噪分为以下三步:
基于Stein's Unbiased Risk Estimate原理(SURE)产生阈值
$$ \lambda = \sigma * 2 * \sqrt(log(n) / n), \sigma = MAD / 0.6745 $$
MAD为最佳尺度上小波系数轨迹的绝对均值,因子0.6745是高斯分布矫正选择的。
图中,蓝色的曲线是原始的机柜电量的示意图,橙色曲线是经过小波收缩后的结果示意图,可以很好的滤掉序列中的高频噪声,而对低频信号的保留相对较好,相比于在时序进行各种简单平滑操作得到的效果好处显而易见。
经过上述各种时域和频域的变换操作后,我们拿到一些数据预处理之后的结果,针对该结果,进行更好的时序预测。这时要们要使用机器学习中的相关算法进行建模,得到最合理的时序预测结果。
现在模型学习和模型验证思路大多是:
回归就是使用若干已知的样本对公式参数的估计。$Y=F(X_1,X_2,X_3)$,这里的回归函数$F(...)$可以是任意函数,其中线性回归的模型如下所示:
$$ Y = F(X_1,X_2,X_3) = a*X_1 + b*X_2 + c*X_3 + d $$
其中,$X_1,X_2,X_3$是训练样本集合中样本的各个维度,$a,b,c,d$是模型中的未知参数。
通过对线性模型的训练,可以较好的得到模型中各个变量之间的关系。常用的线性模型
按照最小均方误差函数进行操作,得到的优化目标函数如下:
$$ f(x_i) = \sum_{m=1}^{p} w_m * x_{im} + w_0 = w^{T} * x_i $$
使用各种优化方法,求解$w$向量,得到线性模型中的相关参数,在使用逐点预测的方式,得到相应的预测结果。
在之前的文章中介绍过时序统计学模型(AR、ARMA、ARIMA)模型,建模的思路源于针对当前观测点的最近P个点和最近Q个点的误差值进行建模,结构如下:$Y_t = \sum_{j=1}^{P}\phi_j * Y_{t-j} - \sum_{k=i}^{Q} \theta_k * \epsilon_{t-k} + \epsilon_t$。在利用相应的数学工具进行求解,具体的原理文章,请见
这里,我们介绍下机器学习算法中,如何进行时序预测~~~
现实背景中,很多数据并不是严格按照线性关系刻画的,算法工程师为了兼顾模型的可解释性,将非线性的数据进行各种变换(幂函数变换、倒数变换、指数变换、对数变换、Box-Cax等)将一个非线性问题转换成一个呈现线性关系的问题,再利用相应的模型进行解决。
机器学习算法可以进行回归预测的模型如下
特性 | 神经网络 | SVM | 树 | MARS | K-NN核 |
---|---|---|---|---|---|
混合类型数据的自然处理 | 差 | 差 | 好 | 好 | 中等 |
遗漏值的处理 | 差 | 差 | 好 | 好 | 好 |
对输入空间中孤立点的健壮性 | 差 | 差 | 好 | 差 | 好 |
对输入的单调转换的不敏感性 | 差 | 差 | 好 | 差 | 差 |
计算的可伸缩性 | 差 | 差 | 好 | 好 | 差 |
处理不相关输入的能力 | 差 | 差 | 好 | 好 | 差 |
提取特征的线性组合的能力 | 好 | 好 | 差 | 差 | 中等 |
可解释性 | 差 | 差 | 中等 | 好 | 差 |
预测能力 | 好 | 好 | 差 | 中等 | 好 |
在数据挖掘应用中,包含在分析中的大量预测例子变量仅有一小部分与预测是实际相关联的。同时,与模式识别等诸多应用不同,这里很少有可靠的领域知识帮助建立特别相关的特征或者过滤掉不相关的特征,其结果是严重降低了许多方法的性能。
对速度、可解释性的要求和数据凌乱的特性严重限制了大量学习过程,使之无法作为数据挖掘的“现货方法”。“现货”方法是一种可以直接应用于数据,而不需要花费太多时间进行数据预处理或对学习过程小心进行调整的方法。
PS:上述表格出自《统计机器学习基础:数据挖掘、推理与预测》第10章。
本平台使用GBRT算法进行时间序列的预测,下面具体介绍下GBRT算法的基本流程和本平台的建模流程!
数据组织如下,P个输入和一个响应,以及N个观测:即$(x_i, y_i)$,其中$i=1,2,3,...,N$,$x_i = (x_{i1}, x_{i2}, ..., x_{ip})$。算法需要自动确定分裂变量和分裂点,以及树应该有什么样的拓扑结构。
假设已经将空间划分成M个区域$R_1, R_2, ..., R_M$,并且在每个区域内用常量$c_m$对响应建模。
$$ f(x) = \sum_{m=1}^{M}c_m * I(x \in R_m) $$
优化的目标函数采用误差平方和$\sum (y_i - f(x_i))^2$极小华作为我们的准则,则推导得到最佳的$\hat{c}_m$恰好是$y_i$在区域$R_m$的平均值
$$ \hat{c}_m = avg(y_i | x_i \in R_m) $$
从所有的数据开始,考虑一个分裂变量j和分裂点s,并定义一对半平面:
$$ R_1(j, s) = \{X|X_j \leq s\} , R_2(j, s) = \{X | X_j > s\} $$
然后搜索分裂变量j和分裂点s,它求解:
$$ min_{j,s} = [min_{c_1} \sum_{x_i \in R_1(j, s)}(y_i - c_1)^2 + min_{c_2} \sum_{x_i \in R_2(j, s)}(y_i - c_2)^2] $$
对于任意的j和s,内部极小化可以用下式求解:
$$ \hat{c}_1 = avg(y_i|x_i \in R_1(j, s)), \hat{c}_2 = avg(y_i|x_i \in R_2(j, s)) $$
找到最好的分裂,我们把数据划分成两个结果区域,并对每个区域重复分裂过程。然后对素偶偶的结果区域重复这一过程。
PS:这仅仅是回归算法的简单描述,并没有详细说明其中越到的各种坑。
拿到一条时间序列,我们能从中构造哪些特征???
给定一个窗口,从中挖掘相应的特征,同时也方便后续进行滚动预测。
具体如何使用相关算法的说明和实例在这篇文章中有详细的描述,大家如果在使用过程中遇到什么BadCase可以告知我们。
阿里云日志服务针对日志提供了完整的解决方案,以下相关功能是日志进阶的必备良药:
更多日志进阶内容可以参考:。
纠错或者帮助文档以及最佳实践贡献,请联系:悟冥
问题咨询请加钉钉群:转载地址:http://vwwno.baihongyu.com/