智汇华云 | AIOps之动态阈值—XGBoost模型详解

来源:华云公众号 更新时间:2019-08-23
AIOps作为一个全新的技术发展和应用方向,受到了行业内的一致关注,甚至有人认为其能够替代传统解决方案,使应用复杂的下一代技术成为可能。本期“智汇华云”专栏为您带来“AIOps之动态阈值“的系列文章“AIOps之动态阈值—XGBoost模型详解”。

/upload/image/20190823/793fe01b610cae170d6f74b7d65c08ed.jpg

在以大数据、云计算、人工智能为代表的新一代信息技术的推动下, IT技术架构悄然变迁, 从传统“IOE架构”走向“互联网架构”。互联网架构所涉及的网元数、技术栈、服务数等元素成倍剧增,使得运维压力越来越大。这样的趋势下,运维管理模式从ITIL向DevOps演化,运维管理工具也发生了从ITOM、ITOA到AIOps的颠覆性变革

AIOps作为一个全新的技术发展和应用方向,受到了行业内的一致关注,甚至有人认为其能够替代传统解决方案,使应用复杂的下一代技术成为可能

本期“智汇华云”专栏为您带来“AIOps之动态阈值“的系列文章“AIOps之动态阈值—XGBoost模型详解”。


本期讲解人


/upload/image/20190823/18425d33f39e01fe7df110a9ba8f28d1.png

张歆纬

华云数据运维开发组研发工程师


上一期我们讲解了动态阈值中用到的SARIMA模型,用于预测指标动态阈值,从而检测异常。这一期给大家讲解动态阈值中用到的另一个算法——XGBoost

人人彩票 Objective Function

对于一个模型,我们需要定义一个目标函数来衡量模型的性能。目标函数会包含两个部分:训练损失(Training Loss)和正则项(Regularization Term)

1.png

其中L代表训练损失,代表正则项。训练损失是衡量我们的模型对于训练数据的预测性的,一般L会选取均方误差(MSE):

2.png

正则项控制了模型的复杂度,可以帮助我们避免过拟合

决策树 Decision Tree

要理解XGBoost,首先要了解一下决策树,下图就是一个典型的决策树模型。

/upload/image/20190823/21d37b46464a0fc824c48d98c78e6a00.png

对于一个电脑游戏X,我们要预测这五人中哪些可能喜欢它,哪些可能不喜欢它。我们输入的特征有这五人的年龄、性别、职业等等。比如,针对年龄特征,我们觉得年龄小于20的人会喜欢这个电脑游戏X,于是我们可以根据年龄特征将五人分为两类。CART(Classification And Regression Trees)比普通的决策树更复杂些,在叶节点上,CART会给出一个具体的分数。一般来说,单个树不足以在实际中使用,我们会使用集成模型,集成模型会把多棵树的预测结果进行集成。

集成学习 Ensemble Learning

如果你随机向几千个人询问一个复杂的问题,然后汇总他们的回答,你往往会发现,这个汇总的回答比专家的答案要好,这被称为群体智慧。同样的,如果你聚合一组预测器的预测结果,得到的预测结果也比最好的单个预测器要好

/upload/image/20190823/c1e8830274e291b9da3a6f85b3dbe462.png

这是一个两棵树集成的例子,每棵树的预测分数加起来得到一个最后的结果,这个例子里,一个重要的事实就是两棵树试图互补。我们可以把这个模型写成:

5.png

K是树的数量,f是函数空间F中的一个函数,F是所有可能的CART的集合。优化的目标函数可以写成:

6.png

人人彩票 Additive Training

对于训练树的参数,一次性学习所有树是很棘手的。我们可以使用附加策略:优化我们已经学习的树,然后每次加一个新的树。我们可以把在步骤t的预测值写成24.png,我们得到:

7.png

哪棵树是我们在每一步想要的呢?很自然的,我们加上可以最优化目标函数的那一棵:

/upload/image/20190823/ec15274c2fee849eb1565c9dd44b1043.png

如果我们使用MSE作为我们的损失函数,那么目标函数就变为:

/upload/image/20190823/4d4fb84e1152b2553e566adef8d1db56.png

我们将它泰勒展开到二阶

/upload/image/20190823/212adec12cff7e0a85e6d7cea60ed70d.png

g和h被定义为:

11.png

移除所有常数之后,在步骤t时的目标函数变为:

12.png

这就是我们新的树的优化目标了,这样的优点是它只依赖于g和h。


模型复杂度


我们还需要定义树的复杂度,首先,我们把树的定义改进为:

/upload/image/20190823/f0ef829a4490fb400d1dc59284da0d96.png

w是叶节点的分数向量,q是将每个数据点分配到叶子的函数,T是树的数量。在XGBoost中,我们定义复杂度为:

14.png
结构分数


我们可以把目标函数写成:

/upload/image/20190823/a011bc9a588301ce89d6a68584ee5032.png


其中16.png是被分配到第j个叶子的数据点的索引集合。在第二行,我们改变了求和公式的索引,因为在同一个叶子上的所有数据都有相同的分数。我们再定义17.png18.png,压缩式子为:

19.png

求得最小值:


20.png


/upload/image/20190823/d9f0521b17379699718eaef6e606cc0c.png

我们看一下这张图理解一下,给定一个树,我们把g和h放到他们所属的叶子上,用公式算出这个树有多好。这个分数有点像决策树中的不纯度,不仅如此,它还把模型复杂度考虑进去了

人人彩票构

理论上,我们把所有可能的树都算出来,然后选择最好的那一个。实际上这很棘手,所以我们尝试在树的每一层都优化一次。我们把一个叶子分为两个叶子时,它得到的分数是:

/upload/image/20190823/83a6d687c154ddf6041e3c91a64e32aa.png

这个式子可以分解为1)新的左子叶的分数2)新的右子叶的分数3)原来叶子的分数4)新增叶子的正则系数。在这里很重要的是:如果增加的分数小于正则项,我们就不再分裂。这就是树模型中常用的剪枝技术。

梯度提升 Gradient Boosting

首先,在训练集拟合一个树,针对第一个预测期与真实值的残差,训练第二个树。然后针对第二个树的残差,训练第三个树,以此类推,集成所有树的预测,这就被称为梯度提升

/upload/image/20190823/47d407f238b6663623b0a70796f49108.png


XGBoost (Extreme Gradient Boosting)

XGBoost就是这样一种超级快速、可扩展、支持分布式的梯度提升库。

通常有两种方法可以调整参数来控制XGBoost中的过拟合:

1. 第一个方法是直接控制模型的复杂度

- 包括max_depth,min_child_weight和gamma

2. 第二个方法就是增加随机性,使训练对于噪声的鲁棒性好

- 包括subsample, colsample_bytree

- 也可以减小学习率eta,当这么做的时候需要增加num_round

参考资料

1. https://xgboost.readthedocs.io/en/latest/

2. Hands-On Machine Learning with Scikit-Learn and TensorFlow Concepts, Tools, and Techniques to Build Intelligent Systems by Aurélien Géron

人人彩票
400-808-4000
免费试用