目的
生成一颗决策树,输入X(各种特征条件)输出Y(该样本分类结果)。
如何分类?
那么要按照哪种特征分类呢?
- CART树根据基尼指数选择特征。
- 基尼指数可以通过如下公式计算:
G i n i ( p ) = ∑ i = 1 K p i ( 1 − p i ) = 1 − ∑ i = 1 K p i 2 Gini(p)=\sum_{i=1}^Kp_i(1-p_i)=1-\sum_{i=1}^K{p_i}^2 Gini(p)=i=1∑Kpi(1−pi)=1−i=1∑Kpi2 - 在选择节点属性时,计算每一种属性分类后的基尼指数 G i n i Gini Gini,选择 G i n i Gini Gini最小的那种属性作为该节点的分类依据。
选取数据:
alert_msg | 0.0.2.0.0.0.0.2 | 0.0.2.0.0.0.0.1 | 0.0.2.0.0.0.0 | 0.0.7.0.0.0.0.2 | 0.0.7.0.0.0.0.1 | 0.0.7.0.0.0.0 | result |
---|---|---|---|---|---|---|---|
Slow_queries | 7708 | 6385 | 4530 | 14 | 195 | 196 | 5 |
Slow_queries | 204 | 235 | 210 | 11 | 180 | 177 | 5 |
Slow_queries | 190 | 195 | 185 | 233 | 971 | 811 | 5 |
Slow_queries | 139 | 121 | 157 | 17 | 17 | 14 | 5 |
Slow_queries | 185 | 197 | 191 | 16 | 17 | 18 | 5 |
Threads_connected | 142 | 163 | 153 | 1010 | 1009 | 1010 | 25 |
Threads_connected | 186 | 196 | 189 | 10 | 1009 | 1009 | 25 |
Threads_connected | 212 | 194 | 186 | 16 | 11 | 657 | 29 |
Slow_queries | 186 | 192 | 112 | 11 | 657 | 1018 | 5 |
时序数据图编码结果:
alert_msg | 0.0.2.0.0.0.0(soket_timewait) | 0.0.7.0.0.0.0(soket_estab) | result |
---|---|---|---|
Slow_queries | ccb | aaa | 5 |
Slow_queries | aaa | aaa | 5 |
Slow_queries | aaa | acc | 5 |
Slow_queries | aaa | aaa | 5 |
Slow_queries | aaa | aaa | 5 |
Threads_connected | aaa | ccc | 25 |
Threads_connected | aaa | acc | 25 |
Threads_connected | aaa | aab | 29 |
Slow_queries | aaa | abd | 5 |
result类别比例:5:25:29 = 6:2:1(分别表示慢sql引发1:dbproxy未释放引发:慢sql引发2)
第一个节点分类有如下情况:
1.按照alert_msg==Threads_connected?
G
t
u
r
e
=
1
−
(
2
3
)
2
−
(
1
3
)
2
=
0.444
G_{ture}=1-(\frac{2}{3}){^2} - (\frac{1}{3}){^2} = 0.444
Gture=1−(32)2−(31)2=0.444
G
f
a
l
s
e
=
0
G_{false}=0
Gfalse=0
G
1
=
3
9
∗
G
t
u
r
e
+
6
9
∗
G
f
a
l
s
e
=
0.148
G_1 = \frac{3}{9}*G_{ture}+ \frac{6}{9}*G_{false}= 0.148
G1=93∗Gture+96∗Gfalse=0.148
(左右两边的加权值)
2.按照soket_timewait==ccb?
G
t
u
r
e
=
0
G_{ture}=0
Gture=0
G
f
a
l
s
e
=
1
−
(
5
8
)
2
−
(
2
8
)
2
−
(
1
8
)
2
=
0.531
G_{false}=1-(\frac{5}{8}){^2} - (\frac{2}{8}){^2} - (\frac{1}{8}){^2} = 0.531
Gfalse=1−(85)2−(82)2−(81)2=0.531
G
2
=
1
9
∗
G
t
u
r
e
+
8
9
∗
G
f
a
l
s
e
=
0.472
G_2 = \frac{1}{9}*G_{ture}+ \frac{8}{9}*G_{false}= 0.472
G2=91∗Gture+98∗Gfalse=0.472
(左右两边的加权值)
3.按照soket_estab==aaa?
G
t
u
r
e
=
0
G_{ture}=0
Gture=0
G
f
a
l
s
e
=
1
−
(
2
5
)
2
−
(
2
5
)
2
−
(
1
5
)
2
=
0.640
G_{false}=1-(\frac{2}{5}){^2} - (\frac{2}{5}){^2} - (\frac{1}{5}){^2} = 0.640
Gfalse=1−(52)2−(52)2−(51)2=0.640
G
3
=
4
9
∗
G
t
u
r
e
+
5
9
∗
G
f
a
l
s
e
=
0.356
G_3 = \frac{4}{9}*G_{ture}+ \frac{5}{9}*G_{false}= 0.356
G3=94∗Gture+95∗Gfalse=0.356
(左右两边的加权值)
4.按照soket_estab==acc?
G
t
u
r
e
=
1
−
(
1
2
)
2
−
(
1
2
)
2
=
0.5
G_{ture}=1-(\frac{1}{2}){^2}-(\frac{1}{2}){^2}=0.5
Gture=1−(21)2−(21)2=0.5
G
f
a
l
s
e
=
1
−
(
5
7
)
2
−
(
1
7
)
2
−
(
1
7
)
2
=
0.449
G_{false}=1-(\frac{5}{7}){^2} - (\frac{1}{7}){^2} - (\frac{1}{7}){^2} = 0.449
Gfalse=1−(75)2−(71)2−(71)2=0.449
G
4
=
2
9
∗
G
t
u
r
e
+
7
9
∗
G
f
a
l
s
e
=
0.349
G_4 = \frac{2}{9}*G_{ture}+ \frac{7}{9}*G_{false}= 0.349
G4=92∗Gture+97∗Gfalse=0.349
(左右两边的加权值)
5.按照soket_estab==ccc,aab,abd
计算机会都计算,但由于ture分支都是一个样本,划分性不好,这里就不赘述了。
6.选择基尼指数最小的分类
所以这个节点选择
G
1
=
0.148
G_1 = 0.148
G1=0.148
即按照alert_msg==Threads_connected?分类
false分支不需要分类了,现在对true分支分类,样本如下:
alert_msg | 0.0.2.0.0.0.0(soket_timewait) | 0.0.7.0.0.0.0(soket_estab) | result |
---|---|---|---|
Threads_connected | aaa | ccc | 25 |
Threads_connected | aaa | acc | 25 |
Threads_connected | aaa | aab | 29 |
第二个节点分类
计算机会重复上面步骤,这里不再赘述,从表格可以看出
选择soket_estab==aab?
可以直接分类完成
以上,对样本分类完成。