目的
生成一颗决策树,输入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=1∑Kpi(1−pi)=1−i=1∑Kpi2 - 在选择节点属性时,计算每一种属性分类后的基尼指数GiniGiniGini,选择GiniGiniGini最小的那种属性作为该节点的分类依据。
选取数据:
| 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?
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=93∗Gture+96∗Gfalse=0.148
(左右两边的加权值)
2.按照soket_timewait==ccb?
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=91∗Gture+98∗Gfalse=0.472
(左右两边的加权值)
3.按照soket_estab==aaa?
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=94∗Gture+95∗Gfalse=0.356
(左右两边的加权值)
4.按照soket_estab==acc?
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=92∗Gture+97∗Gfalse=0.349
(左右两边的加权值)
5.按照soket_estab==ccc,aab,abd
计算机会都计算,但由于ture分支都是一个样本,划分性不好,这里就不赘述了。
6.选择基尼指数最小的分类
所以这个节点选择G1=0.148G_1 = 0.148G1=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?
可以直接分类完成
以上,对样本分类完成。

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

被折叠的 条评论
为什么被折叠?



