Trends Filtering,趋势滤波

HP趋势滤波:
\min \frac{1}{2}\|y-x\|_{2}^{2}+\lambda\|D x\|_{2}^{2}
其中,y是真实的时间序列,x是估计的时间序列,D矩阵表示如下:

D矩阵

L1趋势滤波:
\min \frac{1}{2}\|y-x\|_{2}^{2}+\lambda\|D x\|_{1}
区别在于第二项,从二范数改成了一范数。
代码实现,利用cvxpy包:

solver = cvxpy.CVXOPT
reg_norm = 2
x = cvxpy.Variable(shape=n) 
# x is the filtered trend that we initialize
objective = cvxpy.Minimize(0.5 * cvxpy.sum_squares(y-x) 
              + lambda_value * cvxpy.norm(D@x, reg_norm))
# Note: D@x is syntax for matrix multiplication
problem = cvxpy.Problem(objective)
problem.solve(solver=solver, verbose=False)

HP趋势滤波

L1趋势滤波

对比可以发现,L1趋势滤波更能保持原有数据的极值点。
【参考资料】Introduction to Trend Filtering with Applications in Python

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容