利用上篇运维指令不用记,会用SQL就可以,可对CPU信息进行采集并结合机器学习算法对CPU的利用率进行预测,从而让运维人员及时了解CPU未来运转情况,从容应对突发问题。
一、预测方法简述
预测算法属于监督式机器学习领域,因为他需要对历史数据进行训练并建立基于时间序列的回归模型。
一般情况下时间序列主要分为:趋势、季节、周期三个方面。
- 趋势:为变化的长期方向,不受相对较小波动和扰动影响;
- 季节:与数据性质密切相关,如:昼夜,春、夏、秋、冬等;
- 周期:数据中有相似模式但周期性不同的一般变化,如股市的周期(股票上涨下跌的一个循环)、房价周期等。
预测是执行异常检测的有效方法,特别是其时间序列相对稳定,相对两种算法,ARIMA可以可靠地进行预测。LSTM网络对于更复杂的时间序列数据有更好的包容性。预测不适合离群点检测。
ARIMA:自回归模型是一种统计模型,其输出结果线性依赖与先前值,是一种强大灵活的时间序列预测方法。
LSTM:递归神经网络的变体,特别适合学习基于时间序列的分类和预测。
如果时间序列不稳定,没有遵循任何可观察的趋势,或者波动幅度变化很大,那么预测效果将不会表现良好,预测对一维数据效果最好,如果需要预测多维数据,最好使用其他检测方法。
二、代码解读
基础环境
本文基于python实现,所以读者需要具备python环境。
具体使用类。如下图:
项目使用类
语料集信息共分为测试集(cpu-test-a.csv)、训练集(cpu-train-a.csv)、全部集(cpu-full-a.csv)三个方面。测试集主要用户CPU利用率预测验证,训练集用户CPU利用率训练,全部集=测试集+训练集。具体语料内容如下图:
CPU语料集
读取信息
通过分析结构化数据的工具集pandas获取全部集、训练集与测试集的文件内容。
读取语料信息
训练数据图形化输出
通过matplotlib.pyplot将训练集内容输出,输出代码如下:
图形化输出-代码
其中第一行为定义图形化的高度与宽度;第二行为定义制作图形,X轴为日期,Y轴为CPU,颜色为黑色;第三行显示Y轴的lable信息。第四行显示图形化的title信息。输出效果如下:
图形化输出-效果
建立简单的ARIMAX模型
ARIMA模型
第一行为定义模型。已经稳定的序列具有0阶差分;向上或向下稳定趋势(恒定平稳)应具有1阶差分,最高为2阶。差分其主要为让序列平稳化。第二行为使用Metropolis-Hastings算法进行推理。第三行为绘制ARIMA模型的拟合图。
通过绘制后的模拟拟合图,我们可直观了解在基于训练集的模型拟合效果不错。
拟合图
测试集样本预测
我们选择60个预测值及其置信区间来绘制最近100个观测点。
预测
输出效果如下(颜色越深代表置信度越高):
测试集-ARIMA预测
测试集样输出
将整体数据集输出,在测试数据中加入背景方便与图“测试集-ARIMA预测”进行数值比对。
测试样本输出
输出效果如下(全部集样本输出,背景灰色为测试集数据。):
样本输出
通过“样本输出”图片与“测试集-ARIMA预测”图比较,两者数据基本是准确的。
本章有很多待完善地方,希望自己可继续改进。另外在选择算法之前需要优先考量数据质量,数据如果污染则严重影响检测方法。