前几天我看到一篇去年的论文,叫:一种基于综合调优的数据库性能趋势预测方法
点击下载
点击上面的链接还可以下载,开始看到这个论文,光是名字就觉得很拉风,于是打算下载下来看一下。
结果论文的内容和把大象装进冰箱一样简单,唉,世风日下,真的是什么都能写论文了,作者提到:
1 结果表明 AutoPA4DB 模型在磁盘使用量、内存使用率、CPU 使用率等部分性能指标趋势性预测中的预测准确度 较高,且预测准确度高于优化前模型和其他对比模 型。 但在 TPS(每秒处理的事物数)及数据库连接 数等指标中,预测效果并不理想。
这,这,这,这。。。
总结一下论文内容:
以 1 分钟,30 分钟,60 分钟等时间周期对数据采样,然后做数据清洗,清洗包括异常检测与处理,缺失值处理,平滑等操作。
建模,基于 Prophet 模型和 ARIMA 模型进行建模。
动态调参优化,基于贝叶斯优化 的 Hyperopt 调参技术。
模型评估,采用加权的时序预测准确 性作为预测模型的预测准确性度量标准。
预测模型优化,基于贝叶斯的自动调参 Hyper 模式与 人工自定义调参 Auto 模式进行融合。
总结下来就是,打开冰箱,放进大象,关门。
整个论文的核心实现依托的fb的prophet,prophet可以完成:
Saturating Forecasts
Trend Changepoints
Seasonality, Holidays Effects
Multiplicative Seasonality
Uncertainty Intervals
Outliers
Non-Daily Data
Diagnostics
下面实例中使用的是 佩顿 · 曼宁的维基百科主页 每日访问量的时间序列数据(2007/12/10 - 2016/01/20)。我们使用 R 中的 Wikipediatrend 包获取该数据集。这个数据集具有多季节周期性、不断变化的增长率和可以拟合特定日期(例如佩顿 · 曼宁的决赛和超级碗)的情况等 Prophet 适用的性质,因此可以作为一个不错的例子。(注:佩顿 · 曼宁为前美式橄榄球四分卫)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 # Python import pandas as pd from fbprophet import Prophet # 读入数据集 df = pd.read_csv('examples/example_wp_log_peyton_manning.csv') df.head() # 拟合模型 m = Prophet() m.fit(df) # 构建待预测日期数据框,periods = 365 代表除历史数据的日期外再往后推 365 天 future = m.make_future_dataframe(periods=365) future.tail() # 预测数据集 forecast = m.predict(future) forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail() # 展示预测结果 m.plot(forecast); # 预测的成分分析绘图,展示预测中的趋势、周效应和年度效应 m.plot_components(forecast); print(forecast.columns) Index(['ds', 'trend', 'trend_lower', 'trend_upper', 'yhat_lower', 'yhat_upper', 'additive_terms', 'additive_terms_lower', 'additive_terms_upper', 'multiplicative_terms', 'multiplicative_terms_lower', 'multiplicative_terms_upper', 'weekly', 'weekly_lower', 'weekly_upper', 'yearly', 'yearly_lower', 'yearly_upper', 'yhat'], dtype='object')
Prophet 遵循 sklearn 库建模的应用程序接口。
预测饱和增长 默认情况下, Prophet 使用线性模型进行预测。当预测增长情况时,通常会存在可到达的最大极限值,例如:总市场规模、总人口数等等。这被称做承载能力(carrying capacity),那么预测时就应当在接近该值时趋于饱和。
Prophet 可使用 logistic 增长 趋势模型进行预测,同时指定承载能力。下面使用 R 语言的维基百科主页 访问量(取对数)的实例来进行说明。
1 2 3 4 5 6 7 8 9 10 11 12 13 import pandas as pd from fbprophet import Prophet df = pd.read_csv('examples/example_wp_log_R.csv') # 新建一列 cap 来指定承载能力的大小。本实例中假设取某个特定的值,通常情况下这个值应当通过市场规模的数据或专业知识来决定。 df['cap'] = 8.5 # 值得注意的是数据框的每行都必须指定 cap 的值,但并非需要是恒定值。如果市场规模在不断地增长,那么 cap 也可以是不断增长的序列。 m = Prophet(growth='logistic') m.fit(df) future = m.make_future_dataframe(periods=1826) future['cap'] = 8.5 fcst = m.predict(future) fig = m.plot(fcst)
预测饱和减少 logistic增长模型还可以处理饱和最小值,方法与指定最大值的列的方式相同:
1 2 3 4 5 6 7 8 9 10 # Python df['y'] = 10 - df['y'] df['cap'] = 6 df['floor'] = 1.5 future['cap'] = 6 future['floor'] = 1.5 m = Prophet(growth='logistic') m.fit(df) fcst = m.predict(future) fig = m.plot(fcst)
参考:https://blog.csdn.net/anshuai_aw1/article/details/83412058
扫码手机观看或分享: