精华内容
下载资源
问答
  • python STL分解

    2021-09-08 22:47:01
    分解就是将时序数据分离成不同的成分,分解有:长期趋势Trend、季节性seasonality和随机残差residuals 返回包含三个部分 trend(趋势部分) , seasonal(季节性部分) 和residual (残留部分) 传入:一个序列,可以...


    一、原理

    分解函数成三部分:趋势、周期、和剩余部分(一般指噪声,均值为0)
    分解就是将时序数据分离成不同的成分,分解有:长期趋势Trend、季节性seasonality和随机残差residuals
    返回包含三个部分 trend(趋势部分) , seasonal(季节性部分) 和residual (残留部分)
    传入:一个序列,可以是时间序列
    输出:趋势、周期、和剩余部分 三部分

    函数详解链接:详解

    二、代码示例

    import statsmodels.api as sm
    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    x=np.arange(0,100,1)
    
    data=1+10*np.sin(2*x)+10*x+5*np.sin(x)
    rd = sm.tsa.seasonal_decompose(data,freq=2)#该时间序列周期为2
    
    rd.plot()
    plt.show()
    #得到趋势、周期性、随机变量的数据输出
    #print(rd.trend)
    #print(rd.seasonal)
    #print(rd.resid)
    print(rd.trend+rd.seasonal)
    plt.plot(data)
    plt.plot(rd.trend+rd.seasonal)
    plt.show()
    
    

    freq=2 ,则表示趋势+季节性 里面有2个空值,首末各一个

    在这里插入图片描述
    作者:电气-余登武

    展开全文
  • STL分解 Python实现

    千次阅读 2020-07-21 20:20:52
    1990 [ https://www.wessa.net/download/stl.pdf ] 2. https://github.com/jrmontag/STLDecompose """ import numpy as np import pandas as pd import matplotlib.pyplot as plt import sys sys.path.append('../...
    """
    Issues:
    "ImportError: cannot import name '_maybe_get_pandas_wrapper_freq' from 'statsmodels.tsa.filters._utils' "
    install an old version of statsmodel works  "pip install statsmodels==0.10.2"
    
    Conference:
    1. Cleveland et al. 1990 [ https://www.wessa.net/download/stl.pdf ]
    2. https://github.com/jrmontag/STLDecompose
    """
    
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import sys
    sys.path.append('../lib')
    import statsmodels.api as sm
    from stldecompose.stl import decompose, forecast
    from stldecompose.forecast_funcs import (naive,drift,mean,seasonal_naive)
    
    
    
    np.random.seed(42)
    x = np.arange(0, 300)
    idx = pd.date_range('2018-01-01', periods = len(x))
    season = pd.Series(((x % 7) - 3) * 1.5, idx)
    trend = pd.Series(x * 0.15, idx) - pd.Series(np.power(x * 0.022, 2), idx)
    error = pd.Series(np.random.random(len(x))*7, idx)
    obs = season + trend + error
    
    print("len(obs):", len(obs))
    
    decomp = decompose(obs, period= 30)
    
    decomp.plot()
    plt.show()
    
    short_obs = obs[ : int(len(obs) // 3 * 2)]
    print("len(short_obs):", len(short_obs))
    
    # apply the decomp to the truncated observation
    short_decomp = decompose(short_obs, period=30)
    
    fcast = forecast(short_decomp, steps=100, fc_func=drift)
    
    plt.figure(figsize=(12, 6))
    plt.plot(obs, '--', label='truth')
    plt.plot(short_obs, '--', label='obs')
    plt.plot(short_decomp.trend, ':', label='decomp.trend')
    plt.plot(fcast, '-', label=fcast.columns[0])
    # plt.xlim('1970','2004')
    # plt.ylim(330,380)
    plt.legend()
    plt.show()
    
    plt.figure(figsize=(12,6))
    fcast = forecast(short_decomp, steps=100, fc_func=drift, seasonal=True)
    plt.plot(obs, '--', label='truth')
    plt.plot(short_obs, '--', label='obs')
    plt.plot(short_decomp.trend, ':', label='decomp.trend')
    plt.plot(fcast, '-', label=fcast.columns[0])
    # plt.xlim('1970','2004')
    # plt.ylim(330,380)
    plt.legend()
    plt.show()
    


    题主本硕机械专业,自学转互联网 算法岗成功,获得阿里、字节、美团、华为等 15+ offer
    后续会在公众号 「苏学算法」分享各类学习笔记、面试经验,感兴趣的可以关注一波 😊 😊 😊~

    在这里插入图片描述

    展开全文
  • 时间序列分解-STL分解

    千次阅读 2018-10-16 17:09:28
     STL(’Seasonal and Trend decomposition using Loess‘ )是以鲁棒局部加权回归作为平滑方法的时间序列分解方法。  其中Loess(locally weighted scatterplot smoothing,LOWESS or LOESS)为局部多项式回归拟合,...

     

           STL(’Seasonal and Trend decomposition using Loess‘ )是以鲁棒局部加权回归作为平滑方法的时间序列分解方法。

           其中Loess(locally weighted scatterplot smoothing,LOWESS or LOESS)为局部多项式回归拟合,是对两维散点图

    进行平滑的常用方法,它结合了传统线性回归的简洁性和非线性回归的灵活性。当要估计某个响应变量值时,先从其预

    测变量附近取一个数据子集,然后对该子集进行线性回归或二次回归,回归时采用加权最小二乘法,即越靠近估计点的

    值其权重越大,最后利用得到的局部回归模型来估计响应变量的值。用这种方法进行逐点运算得到整条拟合曲线。

        Robust Loess 为鲁棒局部加权回归,具体算法可以参看之前的博文 鲁棒局部加权回归 。

        STL对异常点具有健壮性,仅能处理加法模式的分解,对于乘法模式需要先转换为加法模式处理最后在逆变换回去。

         鲁棒局部加权回归法方法的LOESS 过程和鲁棒性过程分别在STL 的内部环 和外部环中嵌套实现.

     

          用R做时间序列的STL分解:

            stl(x, s.window, s.degree = 0,
                 t.window = NULL, t.degree = 1,
                 robust = FALSE,
                 na.action = na.fail)
            s.window----提取季节性时的loess算法时间窗口宽度,须为奇数

             s.degree -----提取季节性时局部拟合多项式的阶数,须为0或1

            t.window----提取趋势性时的loess算法时间窗口宽度,须为奇数

             t.degree-----提取趋势性时局部拟合多项式的阶数,须为0或1

            robust -----在loess过程中是否使用鲁棒拟合

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    library(quantmod)<br>###时间序列STL分解法######

    ##STL是’Seasonal and Trend decomposition using Loess‘ 的以鲁棒局部加权回归作为平滑方

    #法的时间序列分解方法。其中Loess(locally weighted scatterplot smoothing,

    #LOWESS or LOESS)为局部多项式回归拟合。

    getSymbols('^IXIC',src='yahoo',from='2008-1-1',to='2015-10-1')

    sdata.month=to.monthly(IXIC)

    sdata.close=sdata.month$IXIC.Close

    head(sdata.close)

    sdata=ts(as.double(sdata.close),frequency=12,start=c(2008,1))

    #as.double(sdata.close)为避免出现‘只允许单变量序列’的报错

    fit=stl(sdata,t.window=13,s.window='periodic',robust=T)

    #时间序列的STL分解是以鲁棒局部加权回归作为平滑方法的时间序列分解方法

    #故应使robust=T,s.window='periodic'指使用均值平滑季节性子序列

    plot(fit)

                                   

                     (上图4个板块的最右侧的高度不等的灰色柱条对应各板块数值大小的一个可视化度量,它们对应的数值大小是一样的)

    展开全文
  • 谈R软件中的STL分解

    千次阅读 2015-08-22 17:16:36
    STL分解基于Loess,即局部加权回归散点平滑法,是1990年由密歇根大学的R. B. Cleveland教授以及AT&T Bell实验室的W. S. Cleveland等人提出来的一种对时间序列进行分解的方法。STL分解将时间序列分解成季节项、趋势项...

    STL分解基于Loess,即局部加权回归散点平滑法,是1990年由密歇根大学的R. B. Cleveland教授以及AT&T Bell实验室的W. S. Cleveland等人提出来的一种对时间序列进行分解的方法。STL分解将时间序列分解成季节项、趋势项及残余项。

        为了研究这种方法,我花了一天的时间仔细研读这篇论文,完成了17页的翻译稿(原文31页,不含讨论comment部分),基本对这种方法的原理有了大致的了解。本质上讲,这种方法是基于Loess,由内循环和外循环组成。其中,内循环包含了①去趋势、②周期子序列平滑、③对平滑后的周期子序列的低通滤波处理等6个步骤;而外循环主要作用则是引入了一个稳健性权重项,以控制数据中异常值产生的影响,这一项将会考虑到下一阶段内循环的临近权重中去。实际上,趋势分量和季节分量都是在内循环中得到的。循环完后,季节项将出现一定程度的毛刺现象,因为在内循环中平滑时是在每一个截口中进行的,因此,在按照时间序列重排后,就无法保证相邻时段的平滑了,为此,还需要进行季节项的后平滑,后平滑基于局部二次拟合,并且不再需要在loess中进行稳健性迭代。

        R软件以及S-PLUS软件均提供了STL分解函数,但两个软件之间存在一些微小区别。具体可参考stl函数帮助。

        下面直接给出对R软件中的co2数据进行STL分解的结果。图中最上端是原始的co2浓度随时间的变化,从1959年1月~1997年12月,共468个数据。下面依次为季节项、趋势项和残余项。从结果来看,分解的效果还是不错的。除了给出分解图,R还给出一些统计特征量,通过summary即可得到。

     

    Time.series components:

        seasonal                 trend            remainder         

     Min.   :-3.265996e+00   Min.   :315.1541   Min.   :-0.98368572 

     1st Qu.:-1.462496e+00   1st Qu.:323.3135   1st Qu.:-0.16954989 

     Median : 2.932741e-01   Median :335.3495   Median : 0.01276959 

     Mean   :-2.899070e-09   Mean   :337.0412   Mean   : 0.01230954 

     3rd Qu.: 1.614786e+00   3rd Qu.:350.6615   3rd Qu.: 0.15367962 

     Max.   : 3.000911e+00   Max.   :364.2825   Max.   : 1.05926138 

     IQR:

         STL.seasonal STL.trend STL.remainder data  

          3.0773      27.3481    0.3232       26.7250

       %  11.5        102.3       1.2         100.0 

     

     Weights:

         Min.   1st Qu.    Median      Mean   3rd Qu.      Max.

    0.0000000 0.8331992 0.9452152 0.8708025 0.9870979 0.9999976

     

    [原创]谈R软件中的STL分解


    展开全文
  • 时间序列分解-STL分解法 STL——以鲁棒局部加权回归作为平滑方法的时间序列分解方法 STL时序分解: 将时序分解为趋势项、季节项(周、月等)、余项。利用Lowess局部加权回归技术进行平滑;通过外循环设计体现鲁棒性...
  • python时间序列分解STL

    千次阅读 2020-01-03 17:40:22
    参考链接:参考链接1,参考链接2. 输入数据 代码: import statsmodels.api as sm import matplotlib.pyplot as plt import pandas as pd #from dateutil import get_gran, format_timestamp ...
  • 时间序列分解算法:STL

    万次阅读 2017-08-19 10:28:42
    STL (Seasonal-Trend decomposition procedure based on Loess) [1] 为时序分解中一种常见的算法,基于LOESS将某时刻的数据\(Y_v\)分解为趋势分量(trend component)、周期分量(seasonal component)和余项...
  • R语言——STL时间序列分解

    千次阅读 2019-12-12 22:31:49
    stl(x, s.window, s.degree=0, t.window=NULL, t.degree=1, robust=FALSE, na.action=na.fail) s.window————提取季节性时的loess算法 时间窗口的宽度,需要是奇数; s.degree————提取季节性时局部拟合...
  • 有很多博客和文章叙述了STL分解的原理,例如博客 时间序列分解算法:STL。其中也有原论文的链接,看原论文也较容易理解。 2.MSTL分解算法 MSTL可以理解成multiple-STL。它和STL的区别是:STL分解的...
  • STL是一种把时间序列分解为趋势项(trend component)、季节项(seasonal component)和余项(remainder component)的过滤过程。 STL有一个简单的设计,它包含了loess平滑法的一系列应用;这个简单的设计允许对过程...
  • Seasonal-Trend-Loess(STL)算法将时间序列分解为季节,趋势和残差成分。 该算法使用( 为原始论文)来平滑循环子序列(例如,下例中所示的CO 2数据中的所有January值)。 从信号中去除季节性之后,对余数进行平滑...
  • STL数值算法源码

    2018-06-14 18:35:18
    参考自侯捷先生的《STL源码剖析》,C++ STL 的数值算法(Numeric algorithms)是一组对容器元素进行数值计算的模板函数,包括容器元素求和 accumulate 、两序列元素的内积 inner_product 、容器元素的一系列部分元素和...
  • 我们将对一种叫做STL的算法进行研究,STL是 "使用LOESS(局部加权回归)的季节-趋势分解 "的缩写,以及如何将其应用于异常检测。 其基本思想是,如果你有一个有规律的时间序列,你可以通过STL算法运行该序列,并分离...
  • 用Python进行时间序列分解和预测

    千次阅读 2020-12-30 20:18:05
    Datawhale推荐作者:Mohit Sharma,来源:数据派THU本文约4100字,建议阅读10+分钟本文介绍了用Python进行时间序列分解的不同方法,以及如何在Python...
  • 小波去噪的原程序.包括分解和重构往往往往往往
  • STL之类型异常处理

    2019-07-10 17:42:42
    ​ 简述: 了解STL之异常处理、类型转换、书写一个简单地例子。 文章目录本博文的简述or解决问题?c/c++异常的基本语法:大纲如图:知识点讲解:运行演示:大纲如图:知识点讲解: 编程环境: win10 x64 专业版 ...
  • d0 ( "2014-01-01 00:00:00", format="%Y-%m-%d %H:%M:%S", tz="America/New_York") ## dWeek ( from=0, to=(3600*167), by=3600 ) ## ...fit <- stl(x.ts,s.window="periodic") plot(fit)
  • 目录 1、相关概念 2 、常见的时间序列 3、时间序列分解 3.1 方法介绍 3.2 经典方法 3.3 Holt Winter 指数平滑 3.4 STL分解 4 、异常准则 5、 异常检测算法 1、相关概念 1.1 异常 时序异常检测通常形式化为根据某种...
  • 1. LOWESS(Locally Weighted Scatterplot Smoothing,局部加权回归) 0x1:lowess算法主要解决什么问题 1. 非线性回归拟合问题 LOWESS 通过取一定比例的局部数据,在这部分子集中拟合多项式回归曲线,这样我们便...
  • 后来针对简单方法的不足,提出了X11分解法和SEATS分解法,以及STL分解法,下面分别介绍。 X11 X11分解法的特点我们引用6.4 X11 decomposition | Forecasting: Principles and Practice中的原话:“In particular, ...
  • STL的缺点

    2015-05-06 20:57:36
    说几个STL的缺点吧,虽然都是在比较极端的情况下出现,但是对于一些大项目还是会遇到的 1. 代码膨胀问题 每一个实例化过的模板类,都会膨胀出一份独立的代码,比如 std::vector, std::vector,编译后会产生两份...
  • 从多年时间序列中删除每日平均值。 时间序列 t 和 y 必须是等长的向量,并且 t 必须是 datenum 格式的每日值。 y_deseasoned = deseason(t,y); 返回淡化的 y 信号。 [y_ds,y_s] = deseason(t,y);...
  • 文章目录论文及代码模型代码model...将时间序列分解成周期项和非周期项 g(t)g(t)g(t): x(t)=∑k=1N(ak⋅sin⁡(wkt+ϕk))+g(t). x(t) = \sum _{k = 1}^{N}{( a_{k} \cdot \sin ( w_{k} t + \phi _{k} )) } + g(t). x(t)
  • STL的优点

    千次阅读 2017-05-10 11:23:25
    STL的优点: 1.实现数据结构和算法的分离,使得STL非常通用。 2.STL具有高可重用性,高性能,高移植性,夸平台的优点。 --高可重用性:STL中几乎所有的代码都采用了模板类和模板函数的方式实现,代码重用性高。 ...
  • stlwrite(matlab程序)

    2019-02-25 23:07:54
    把点云数据输入matlab,利用此算法,生成三维模型,并输出stl文件

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,731
精华内容 3,092
关键字:

stl分解