机器学习算法完整版见fenghaootong-github
决策树(Decision Trees)
构建决策树三个步骤:
- 特征选择
- 决策数生成
- 决策数剪枝
特征选择
熵(entropy)
熵是表示随机变量不确定性的度量。设X是一个取有限个值的离散随机变量,其概率分布为
P(X=xi)=pi,i=1,2,3,...,n P ( X = x i ) = p i , i = 1 , 2 , 3 , . . . , n
随机变量的熵定义为:
H(X)=−∑ni=1pilog(pi) H ( X ) = − ∑ i = 1 n p i l o g ( p i )
熵越大,随机变量的不确定性就越大
条件熵(conditional entropy)
设有随机变量(X,Y),联合概率分布为:
P(X=xi,Y=yi)=pij,i=1,2,3,...,n;j=1,2,3,...,n P ( X = x i , Y = y i ) = p i j , i = 1 , 2 , 3 , . . . , n ; j = 1 , 2 , 3 , . . . , n
条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性。随机变量X给定的条件下随机变量Y的条件熵H(Y|X),定义为X给定条件下Y的条件概率分布的熵对X的数学期望:
H(Y|X)=∑ni=1piH(Y|X=xi) H ( Y | X ) = ∑ i = 1 n p i H ( Y | X = x i )
信息增益(information gain)(ID3算法)
信息增益 = entroy(前) - entroy(后)
信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即
g(D,A)=H(D)−H(D|A) g ( D , A ) = H ( D ) − H ( D | A )
根据信息增益准则的特征选择方法是:对训练数据集(或子集)计算其每个特征的信息增益,选择信息增益最大的特征。
计算信息增益的算法如下:
- 输入:训练数据集D和特征A;
- 输出:特征A对训练数据集D的信息增益g(D,A).
1)计算数据集D的经验熵H(D)
H(D)=−∑Kk=1|Ck|Dlog2|Ck|D H ( D ) = − ∑ k = 1 K | C k | D l o g 2 | C k | D
2)计算特征A对数据集D的经验条件熵H(D|A)
H(D|A)=∑ni=1|Di|DH(Di)=−∑ni=1|Di|D∑Kk=1|Dik|Dilog2|Dik|Di H ( D | A ) = ∑ i = 1 n | D i | D H ( D i ) = − ∑ i = 1 n | D i | D ∑ k = 1 K | D i k | D i l o g 2 | D i k | D i
3)计算信息增益
g(D,A)=H(D)−H(D|A) g ( D , A ) = H ( D ) − H ( D | A )
信息增益比(information gain ratio)(C4.5)
特征A对训练数据集D的信息增益比 gR(D,A) g R ( D , A ) 定义为其信息增益g(D,A)与训练数据集D关于特征A的值的熵 HA(D) H A ( D ) 之比,即
信息增益比 = 惩罚参数 * 信息增益
gR(D,A)=g(D,A)HA(D)
g
R
(
D
,
A
)
=
g
(
D
,
A
)
H
A
(
D
)
HA(D)=−∑ni=1|Di|Dlog2|Di|D
H
A
(
D
)
=
−
∑
i
=
1
n
|
D
i
|
D
l
o
g
2
|
D
i
|
D
基尼指数(CART)
基尼指数(基尼不纯度)= 样本被选中的概率 * 样本被分错的概率
Gini(D)=∑Kk=1Dk(1−Dk)=1−∑Kk=1D2k G i n i ( D ) = ∑ k = 1 K D k ( 1 − D k ) = 1 − ∑ k = 1 K D k 2
Dk D k 表示选中的样本属于k类别的概率
决策树生成
两种决策树学习的生成算法:ID3、C4.5和CART
CART和C4.5的主要区别:
- C4.5采用信息增益率来作为分支特征的选择标准,而CART则采用Gini系数;
- C4.5不一定是二叉树,但CART一定是二叉树。
决策树算法:
G(x)=∑Cc=1[[b(x)=c]]⋅Gc(x) G ( x ) = ∑ c = 1 C [ [ b ( x ) = c ] ] ⋅ G c ( x )
G(x) G ( x ) :为完整的树
b(x) b ( x ) : 每个分支的条件
Gc(x) G c ( x ) : 表示第c个分支下的子树
决策数剪枝
训练出得决策树存在过度拟合现象——决策树过于针对训练的数据,专门针对训练集创建出来的分支,其熵值可能会比真实情况有所降低。
如何剪枝
人工设置一个信息增益的阀值,自下而上遍历决策树,将信息增益低于该阀值的拆分进行合并
决策树的剪枝往往通过极小化决策树整体的损失函数或代价函数来实现。
设树T的叶结点个数为 |Tf| | T f | ,t是树T的叶结点,该叶结点有 Dt D t 个样本点,其中k类样本点有 Dtk D t k 个,k=1,2,…,K, H(T) H ( T ) 为叶结点t上的经验熵,α≥0为参数,则决策树学习的损失函数可以定义为:
Cα(T)=∑|Tf|t=1NtH(t)+α|Tf|H(t)=−∑Kk=1DtkDtlog2DtkDt C α ( T ) = ∑ t = 1 | T f | N t H ( t ) + α | T f | H ( t ) = − ∑ k = 1 K D t k D t l o g 2 D t k D t
令:
C(T)=∑|Tf|t=1NtH(t)=−∑|Tf|t=1∑Kk=1Dtklog2DtkDt C ( T ) = ∑ t = 1 | T f | N t H ( t ) = − ∑ t = 1 | T f | ∑ k = 1 K D t k l o g 2 D t k D t
则 Cα(T)=C(T)+α|Tf| C α ( T ) = C ( T ) + α | T f |
决策树应用实例