计算类算法使用数据数据一步一步计算,最能形象化理解算法,也容易掌握。如果不懂基尼指数定义,可以百度。
下面以常用的贷款申请样本数据表为样本集,通过数学计算来讲解基尼指数的计算方法和过程。
样本集简介:
样本集有15个example样本
每个样本有4个特征(年龄age,是否工作work,是否有房子house,信用情况credit),1个分类结果refuse或者agree
age取值集合 ={youth, mid, elder}
work取值集合 ={no, yes}
house取值集合 = {no, yes}
credit取值集合 = {common, good, excellent}
class取值集合 = 申请贷款结果集合 = {refuse, agree}
ID | age | work | house | credit | class |
1 | youth | no | no | common | refuse |
2 | youth | no | no | good | refuse |
3 | youth |
yes | no | good | agree |
4 | youth |
yes | yes | common | agree |
5 | youth | no | no | common | refuse |
6 | mid | no | no | common | refuse |
7 | mid | no | no | good | refuse |
8 | mid |
yes | yes | good | agree |
9 | mid |
no | yes | excellent |
agree |
10 | mid |
no | yes | excellent |
agree |
11 | elder |
no | yes | excellent |
agree |
12 | elder |
no | yes | good | agree |
13 | elder |
yes | no | good | agree |
14 | elder |
yes | no | excellent |
agree |
15 | elder | no | no | common | refuse |
下面开始求每个特征的基尼指数
样本变量 | agree | refuse | |
样本数量 | a_cnt = 9 | r_cnt = 6 | |
概率质量 | 9/15 | 6/15 |
python计算结果如下所示:
Gini(D, age=youth)
5*1.0/15*(2*2*1.0/5*(1-2*1.0/5)) + 10/15*(2*7*1.0/10*(1-7*1.0/10))
Out[3]: 0.44
Gini(D, age=mid)
5*1.0/15*(2*3*1.0/5*(1-3*1.0/5)) + 10/15*(2*6*1.0/10*(1-6*1.0/10))
Out[4]: 0.4799999999999999
Gini(D, age=elder)
5*1.0/15*(2*4*1.0/5*(1-4*1.0/5)) + 10/15*(2*5*1.0/10*(1-5*1.0/10))
Out[5]: 0.43999999999999995
根据求特征age的基尼指数的道理,可以求得work的基尼指数:
Gini(D, work=yes) = 0.32
Gini(D, house=yes)=0.27
Gini(D, credit=common)=0.32
Gini(D, credit=good)=0.47
Gini(D, credit=excellent)=0.36
Step1:首先按照Gini的数值大小,从小到大依次排序:
Gini(D, house=yes)=0.27
Gini(D, credit=common)=0.32
Gini(D, work=yes) = 0.32
Gini(D, credit=excellent)=0.36
Gini(D, age=elder)=0.43999
Gini(D, age=youth)=0.44
Gini(D, credit=good)=0.47
Gini(D, age=mid)=0.47999
Step2:选最优特征
Gini数值最小,则对应的特征被选为当前数据集的最优特征,就是决策树的根节点
这里Gini(D, house=yes)=0.27最小,选择特征house最优特征,且选择house=yes是最优切分点
即:选择特征house为根节点,house=yes为根节点的最优切分点,所以根节点生成两个子节点,一个是叶节点,而另一个叶节点继续使用以上方法在age, work, credit中选择最优特征和他的最优切点。
提醒:选取house为根节点后,后面从age,work,credit中选取最优特征和最优切分点时,计算每个特征的gini数值和这次的数值会不相同,因为使用的数据集变化了(需要将house特征值以及对应的house=yes行数据从原数据集中裁剪掉),要注意~
循环计算知道最后得到的所有子节点都是叶节点,就得到最后的目标决策树。
上面步骤就是CART算法,上面最后求出的决策树就是用CART算法生成的决策树。
化繁为简,一生二,二生三,最后就是简单的任务了。
enjoy it~
(end)