基于CART的AIOPS智能化告警分析系统

本文详细介绍使用CART树算法构建决策树的过程,通过计算基尼指数选择最优特征进行分类,展示具体的数据分类实例。
目的

生成一颗决策树,输入X(各种特征条件)输出Y(该样本分类结果)。

如何分类?

那么要按照哪种特征分类呢?

  • CART树根据基尼指数选择特征。
  • 基尼指数可以通过如下公式计算:
    Gini(p)=∑i=1Kpi(1−pi)=1−∑i=1Kpi2Gini(p)=\sum_{i=1}^Kp_i(1-p_i)=1-\sum_{i=1}^K{p_i}^2Gini(p)=i=1Kpi(1pi)=1i=1Kpi2
  • 在选择节点属性时,计算每一种属性分类后的基尼指数GiniGiniGini,选择GiniGiniGini最小的那种属性作为该节点的分类依据。
选取数据:
alert_msg0.0.2.0.0.0.0.20.0.2.0.0.0.0.10.0.2.0.0.0.00.0.7.0.0.0.0.20.0.7.0.0.0.0.10.0.7.0.0.0.0result
Slow_queries770863854530141951965
Slow_queries204235210111801775
Slow_queries1901951852339718115
Slow_queries1391211571717145
Slow_queries1851971911617185
Threads_connected14216315310101009101025
Threads_connected186196189101009100925
Threads_connected212194186161165729
Slow_queries1861921121165710185
时序数据图编码结果:
alert_msg0.0.2.0.0.0.0(soket_timewait)0.0.7.0.0.0.0(soket_estab)result
Slow_queriesccbaaa5
Slow_queriesaaaaaa5
Slow_queriesaaaacc5
Slow_queriesaaaaaa5
Slow_queriesaaaaaa5
Threads_connectedaaaccc25
Threads_connectedaaaacc25
Threads_connectedaaaaab29
Slow_queriesaaaabd5

result类别比例:5:25:29 = 6:2:1(分别表示慢sql引发1:dbproxy未释放引发:慢sql引发2)

第一个节点分类有如下情况:
1.按照alert_msg==Threads_connected?
ture
false
alert_msg==Threads_connected?
5:25:29 = 0:2:1
5:25:29 = 6:0:0

Gture=1−(23)2−(13)2=0.444G_{ture}=1-(\frac{2}{3}){^2} - (\frac{1}{3}){^2} = 0.444Gture=1(32)2(31)2=0.444
Gfalse=0G_{false}=0Gfalse=0
G1=39∗Gture+69∗Gfalse=0.148G_1 = \frac{3}{9}*G_{ture}+ \frac{6}{9}*G_{false}= 0.148G1=93Gture+96Gfalse=0.148
(左右两边的加权值)

2.按照soket_timewait==ccb?
ture
false
soket_timewait==ccb?
5:25:29 = 1:0:0
5:25:29 = 5:2:1

Gture=0G_{ture}=0Gture=0
Gfalse=1−(58)2−(28)2−(18)2=0.531G_{false}=1-(\frac{5}{8}){^2} - (\frac{2}{8}){^2} - (\frac{1}{8}){^2} = 0.531Gfalse=1(85)2(82)2(81)2=0.531
G2=19∗Gture+89∗Gfalse=0.472G_2 = \frac{1}{9}*G_{ture}+ \frac{8}{9}*G_{false}= 0.472G2=91Gture+98Gfalse=0.472
(左右两边的加权值)

3.按照soket_estab==aaa?
ture
false
soket_estab==aaa?
5:25:29 = 4:0:0
5:25:29 = 2:2:1

Gture=0G_{ture}=0Gture=0
Gfalse=1−(25)2−(25)2−(15)2=0.640G_{false}=1-(\frac{2}{5}){^2} - (\frac{2}{5}){^2} - (\frac{1}{5}){^2} = 0.640Gfalse=1(52)2(52)2(51)2=0.640
G3=49∗Gture+59∗Gfalse=0.356G_3 = \frac{4}{9}*G_{ture}+ \frac{5}{9}*G_{false}= 0.356G3=94Gture+95Gfalse=0.356
(左右两边的加权值)

4.按照soket_estab==acc?
ture
false
soket_estab==acc?
5:25:29 = 1:1:0
5:25:29 = 5:1:1

Gture=1−(12)2−(12)2=0.5G_{ture}=1-(\frac{1}{2}){^2}-(\frac{1}{2}){^2}=0.5Gture=1(21)2(21)2=0.5
Gfalse=1−(57)2−(17)2−(17)2=0.449G_{false}=1-(\frac{5}{7}){^2} - (\frac{1}{7}){^2} - (\frac{1}{7}){^2} = 0.449Gfalse=1(75)2(71)2(71)2=0.449
G4=29∗Gture+79∗Gfalse=0.349G_4 = \frac{2}{9}*G_{ture}+ \frac{7}{9}*G_{false}= 0.349G4=92Gture+97Gfalse=0.349
(左右两边的加权值)

5.按照soket_estab==ccc,aab,abd

计算机会都计算,但由于ture分支都是一个样本,划分性不好,这里就不赘述了。

6.选择基尼指数最小的分类

所以这个节点选择G1=0.148G_1 = 0.148G1=0.148
即按照alert_msg==Threads_connected?分类

ture
false
alert_msg==Threads_connected?
5:25:29 = 0:2:1
5:25:29 = 6:0:0

false分支不需要分类了,现在对true分支分类,样本如下:

alert_msg0.0.2.0.0.0.0(soket_timewait)0.0.7.0.0.0.0(soket_estab)result
Threads_connectedaaaccc25
Threads_connectedaaaacc25
Threads_connectedaaaaab29
第二个节点分类

计算机会重复上面步骤,这里不再赘述,从表格可以看出
选择soket_estab==aab?
可以直接分类完成

ture
false
true
false
alert_msg==Threads_connected?
soket_estab==aab?
5:25:29 = 6:0:0
5:25:29 = 0:0:1
5:25:29 = 0:2:0

以上,对样本分类完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值