文章目录

  Holt-Winters方法是一种时间序列分析和预报方法。该方法对含有线性趋势和周期波动的非平稳序列适用,利用指数平滑法(EMA)让模型参数不断适应非平稳序列的变化,并对未来趋势进行短期预报。现实场景中如国家GDP历年数据,机器cpu利用率,内存数据等都是时间序列。对未来时间的观测值进行预测是有意义的工作,提前预知未来的数据的走势,可以提前做出行动,如预测cpu使用率,如果cpu飙高,可以及早进行调整,避免机器负载过高而宕机,这个在AIOPS是很常见的一个应用场景。
代码示例

# import needed packages
#-----------------------import math
import numpy  as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn        import linear_model
from scipy.optimize import fmin_l_bfgs_bsdata = open('data.csv')
tsA = sdata.read().split('\n')
tsA.remove("")
tsA = list(map(int, tsA))
source_len = len(tsA)def holtWinters(ts, p, sp, ahead, mtype, alpha = None, beta = None, gamma = None):a, b, s = _initValues(mtype, ts, p, sp)if alpha == None or beta == None or gamma == None:ituning   = [0.1, 0.1, 0.1]ibounds   = [(0,1), (0,1), (0,1)]optimized = fmin_l_bfgs_b(_MSD, ituning, args = (mtype, ts, p, a, b, s[:]), bounds = ibounds, approx_grad = True)alpha, beta, gamma = optimized[0]MSD, params, smoothed = _expSmooth(mtype, ts, p, a, b, s[:], alpha, beta, gamma)predicted = _predictValues(mtype, p, ahead, params)return {'alpha': alpha, 'beta': beta, 'gamma': gamma, 'MSD': MSD, 'params': params, 'smoothed': smoothed, 'predicted': predicted}def _initValues(mtype, ts, p, sp):initSeries = pd.Series(ts[:p*sp])if mtype == 'additive':rawSeason = initSeries - initSeries.rolling(window=p, min_periods=p, center=True).mean()initSeason = [np.nanmean(rawSeason[i::p]) for i in range(p)]initSeason = pd.Series(initSeason) - np.mean(initSeason)deSeasoned = [initSeries[v] - initSeason[v % p] for v in range(len(initSeries))]else:rawSeason  = initSeries / initSeries.rolling(window = p, min_periods = p, center = True).mean()initSeason = [np.nanmean(rawSeason[i::p]) for i in range(p)]initSeason = pd.Series(initSeason) / math.pow(np.prod(np.array(initSeason)), 1/p)deSeasoned = [initSeries[v] / initSeason[v % p] for v in range(len(initSeries))]lm = linear_model.LinearRegression()lm.fit(pd.DataFrame({'time': [t+1 for t in range(len(initSeries))]}), pd.Series(deSeasoned))return float(lm.intercept_), float(lm.coef_), list(initSeason)def _MSD(tuning, *args):predicted = []mtype     = args[0]ts, p     = args[1:3]Lt1, Tt1  = args[3:5]St1       = args[5][:]alpha, beta, gamma = tuning[:]for t in range(len(ts)):if mtype == 'additive':Lt = alpha * (ts[t] - St1[t % p]) + (1 - alpha) * (Lt1 + Tt1)Tt = beta  * (Lt - Lt1)           + (1 - beta)  * (Tt1)St = gamma * (ts[t] - Lt)         + (1 - gamma) * (St1[t % p])predicted.append(Lt1 + Tt1 + St1[t % p])else:Lt = alpha * (ts[t] / St1[t % p]) + (1 - alpha) * (Lt1 + Tt1)Tt = beta  * (Lt - Lt1)           + (1 - beta)  * (Tt1)St = gamma * (ts[t] / Lt)         + (1 - gamma) * (St1[t % p])predicted.append((Lt1 + Tt1) * St1[t % p])Lt1, Tt1, St1[t % p] = Lt, Tt, Streturn sum([(ts[t] - predicted[t])**2 for t in range(len(predicted))])/len(predicted)def _expSmooth(mtype, ts, p, a, b, s, alpha, beta, gamma):smoothed = []Lt1, Tt1, St1 = a, b, s[:]for t in range(len(ts)):if mtype == 'additive':Lt = alpha * (ts[t] - St1[t % p]) + (1 - alpha) * (Lt1 + Tt1)Tt = beta  * (Lt - Lt1)           + (1 - beta)  * (Tt1)St = gamma * (ts[t] - Lt)         + (1 - gamma) * (St1[t % p])smoothed.append(Lt1 + Tt1 + St1[t % p])else:Lt = alpha * (ts[t] / St1[t % p]) + (1 - alpha) * (Lt1 + Tt1)Tt = beta  * (Lt - Lt1)           + (1 - beta)  * (Tt1)St = gamma * (ts[t] / Lt)         + (1 - gamma) * (St1[t % p])smoothed.append((Lt1 + Tt1) * St1[t % p])Lt1, Tt1, St1[t % p] = Lt, Tt, StMSD = sum([(ts[t] - smoothed[t])**2 for t in range(len(smoothed))])/len(smoothed)return MSD, (Lt1, Tt1, St1), smootheddef _predictValues(mtype, p, ahead, params):'''subroutine to generate predicted values @ahead periods into the future'''Lt, Tt, St = paramsif mtype == 'additive':return [Lt + (t+1)*Tt + St[t % p] for t in range(ahead)]else:return [(Lt + (t+1)*Tt) * St[t % p] for t in range(ahead)]results = holtWinters(tsA, 12, 4, 24, mtype = 'additive')
results = holtWinters(tsA, 12, 4, 24, mtype = 'multiplicative')print("TUNING: ", results['alpha'], results['beta'], results['gamma'], results['MSD'])
print("FINAL PARAMETERS: ", results['params'])
print("PREDICTED VALUES: ", results['predicted'])
last_len =len(results['predicted'])
x1 = range(0, source_len)
x2 = range(source_len, source_len + last_len)
y1 = tsA
y2 = results['predicted']
fig = plt.figure()
plt.plot(x1, y1, marker=r'', color=u'blue', linestyle='-', label='Initial value')
plt.plot(x2, y2, marker=r'', color=u'red', linestyle='-', label='Estimate value')
plt.xlabel('time')
plt.ylabel('value')
plt.legend(loc='best')
plt.savefig('line_plot.png', dpi=400, bbox_inches='tight')
plt.show()

基于Holt-Winters方法对资源进行预测相关推荐

  1. 基于APMSSGA-LSTM的容器云资源预测

    基于APMSSGA-LSTM的容器云资源预测 谢晓兰1,2, 张征征1, 郑强清1, 陈超泉1 1 桂林理工大学信息科学与工程学院,广西 桂林 541004 2 广西嵌入式技术与智能系统重点实验室,广 ...

  2. MDIPA:基于非负矩阵分解的MicroRNA-药物相互作用预测方法

    MDIPA:基于非负矩阵分解的MicroRNA-药物相互作用预测方法 摘要 一.简介 二.方法 2.1 数据集 2.2 鉴定-药物相互作用 2.3 microRNA与药物的邻域信息 2.4 非负矩阵分 ...

  3. 基于多任务学习的快件送达时间预测方法

    1.文章信息 文章题目为<基于多任务学习的快件送达时间预测方法>,发表在计算机工程期刊上的一篇有关多任务学习预测的文章. 2.摘要 快件送达时间预测是物流领域中一项至关重要的服务.准确地预 ...

  4. 基于保守性和规则性的预测方法SIFT和PolyPhen

    有什么特征可以帮助我们来区分导致功能和表型变化的变异和其他变异,然后我们如何综合特征来做出一个预测模型? 表型或功能的改变(phenotypical/functional effect) a,个体表型 ...

  5. 【寿命预测】基于DLSTM网络的机械剩余使用寿命预测方法

    数据驱动的RUL 之前方法的不足: 1.没有充分考虑各传感器采集的信息与机械剩余寿命之间的相关性 2.由于复杂系统运行过程中产生的信号噪声大.过维数多.非线性强,深度学习算法剩余有用寿命预测精度较低 ...

  6. matlab血糖预测,一种基于VMD-PACF-BP模型的动态血糖在线预测方法与流程

    本发明属于血糖预测技术领域,尤其涉及一种基于VMD-PACF-BP模型的动态血糖在线预测方法. 背景技术: 目前,中国患有糖尿病人数已成为在世界上拥有糖尿病患者最多的国家.为了降低糖尿病患者长期处于高 ...

  7. 径向基函数神经网络_基于RBF神经网络的网络安全态势感知预测研究

    点击上方"网络空间安全学术期刊"关注我们 基于RBF神经网络的网络安全态势 感知预测研究 钱建, 李思宇 摘要 针对网络安全态势的感知问题,结合巨龙山和者磨山风电场的运行情况,文章 ...

  8. 数据挖掘机器学习[七]---2021研究生数学建模B题空气质量预报二次建模求解过程:基于Stacking机器学习混合模型的空气质量预测{含码源+pdf文章}

    相关文章: 特征工程详解及实战项目[参考] 数据挖掘---汽车车交易价格预测[一](测评指标:EDA) 数据挖掘机器学习---汽车交易价格预测详细版本[二]{EDA-数据探索性分析} 数据挖掘机器学习 ...

  9. Nature综述:宏基因组测序研究耐药基因的方法和资源

    本文转自红皇后学术,链接 https://mp.weixin.qq.com/s/2QMrq6hwr4mIPSpe_rfXJg 论文信息 论文题目:Sequencing-based methods an ...

最新文章

  1. 关于全连接层梯度的链式法则
  2. Hibernate 入门小案例
  3. PCL:Ubuntu下安装配置PCL
  4. 关于 SAP 电商云 Spartacus UI 路由 routes 配置的数据源问题
  5. 最小生成树——Prim(普利姆)算法
  6. 何晓飞首次披露飞步自动驾驶方案:无人货运起步,自研AI芯片
  7. cygwin图文安装教程
  8. Bugku-Web-Cookies欺骗
  9. 爬虫可视化点选配置工具之chrome插件简介
  10. 学MySQL,这篇万字总结,真的够用了
  11. aspectjweaver.jar 下载地址
  12. Springboot如何实现自定义错误页面(错误处理机制详解)
  13. 学生版计算机隐藏游戏,玩了近15年的QQ,才发现这3个隐藏功能,学生党看完炸锅了!...
  14. 生日那天,我失恋了!!
  15. 认识和使用热插拔的正确姿势-续
  16. 手机拍照打卡活动制作方案,通过拍照不聚集活动,函数参数(Function parameters)是在函数定义中所列的名称。
  17. 字节LastDay,告别十个月的实习生活,流水账与一些思考
  18. web开发课程培训,前端开发开发培训
  19. 索引的数据结构与优缺点
  20. 辩证唯物主义 历史唯物主义 第一章绪论 一 唯物主义和唯心主义

热门文章

  1. Spring-Session 基础知识点 和 源码分析(下)
  2. 官宣!比利时国脚登贝莱加盟广州富力 签约3年
  3. php 文件 byte数组,php实现java的byte数组转换
  4. 重磅来袭!阿里6名大佬共同编写的“Java面试指南”,内容全面精细,你确定不看看吗?
  5. Egg.js上传图片到对象存储COS并按照日期存储图片
  6. Android mk 引用 jar 包、so 库、aar 包,系统签名
  7. 微软育碧服务器,传育碧订阅服务Ubisoft+将加入微软XGP
  8. Linux管理员root密码忘记了怎么办?
  9. 模拟农场 Farming Simulator 2019 for Mac
  10. 谢谢你,勾引我老公!这文章看得心酸