前言
引入决策树分类的例子来理解决策树(假设你已经知道了什么是分类问题)
例如现在拥有数据如下:根据数据特征(房产、婚姻、年收入)判断会不会拖欠贷款(label)。
ID | 房产 | 婚姻 | 年收入 | 拖欠贷款 |
---|---|---|---|---|
1 | 是 | 单身 | 125k | 否 |
2 | 否 | 已婚 | 100k | 否 |
3 | 否 | 单身 | 70k | 否 |
4 | 是 | 已婚 | 120k | 否 |
5 | 否 | 离异 | 95k | 是 |
6 | 否 | 已婚 | 60k | 否 |
7 | 是 | 离异 | 220k | 否 |
8 | 否 | 单身 | 85k | 是 |
9 | 否 | 已婚 | 75k | 否 |
10 | 否 | 单身 | 90k | 是 |
根据数据构建决策树 ,而不是常识。
假设这里有一条新的数据
ID | 房产 | 婚姻 | 年收入 | 拖欠贷款 |
---|---|---|---|---|
1 | 否 | 单身 | 70k | ? |
构建决策树时先选择哪个属性呢?属性的选择用什么度量呢?
答案是:用熵和基尼系数来度量
熵: p(i)表示label等于i的概率,n表示类别
E
N
T
(
D
)
=
−
∑
j
=
0
n
−
1
P
(
i
)
l
o
g
2
p
(
i
)
ENT(D)=-\sum_{j=0} ^{n-1} P(i)log^{p(i)}_2
ENT(D)=−j=0∑n−1P(i)log2p(i)
基尼系数
G
i
n
i
(
D
)
=
1
−
∑
i
=
0
n
−
1
p
(
i
)
2
Gini(D)=1-\sum_{i=0}^{n-1}p(i)^2
Gini(D)=1−i=0∑n−1p(i)2
基尼系数计算示例:
- label=0示例有5个,label=1的示例有5个。P(0)=0.5 P(1)=0.5
Gini = 1-p(0)2 -p(1)2 =1-0.52 -0.52=0.5 ENT(D)=1- label=0示例有2个,label=1的 示例有8个。P(0)=0.2 P(1)=0.8
Gini = 1-p(0)2 -p(1)2 =1-0.22 -0.82=0.32 ENT(D)=0.72
基尼系数和熵越小,纯度越高,即可选择最优属性.
根据之前的表格计算不同属性的基尼系数
决策树优缺点
优点:
- 可解释性:叶子结点是什么啊,做的决策是什么啊;模型大量用在银行业保险业,为什么放贷款啊等问题。
- 处理数值类特征(数值大于哪个)和类别特征(结点是不是等于那个值)
缺点:
- 不稳定:数据有噪(解决办法:集成学习)
- 树复杂引起过拟合(解决办法:在训练是看太复杂就停下来或者剪掉结点)
- 树并行会 难一些,线上部署的时候性能可能没那么好
决策树优化
优化:后续可继续学习
随机森林
GBDT:提升决策树=决策树+集成学习