----分类树(非参数有监督学习方法)
- 决策树是一种应用广泛的归纳推理算法,在分类问题中,决策树算法基于特征样本进行分类构成一棵包含一系列if-then规则的树
数学上,解释为:定义在特征空间与类空间上的条件概率分布。 - 优点:分类速度快、健壮性好、模型具有可读性
- 应用:医疗诊断,贷款风险评估等领域
非参数:不用太多处理数据
有监督:需要输入标签
例子:
一个人出去打球与否和天气的特征关系:
-
构成:
- Node and Directed Edge
- Node: Internal Node(for一些特征) and Leaf Node(for 一些分类标记)
-
执行:
- 从树根开始递归执行
- 为内部节点 -> 移动到当前节点的某个子节点
- 为内部节点 -> 返回叶节点所表示的分类标记
- 结束过程
- 从树根开始递归执行
这就像是一系列if - else语句的算法,这个算法是根据训练样本自动生成的。
生成决策树
-
本质:从训练集中归纳出一组分类规则,与训练数据不矛盾的决策树可能有多个,也可能没有。目标就是找到一棵与训练数据矛盾比较少的。具有较强泛化能力的决策树
-
构造算法:
-
输入:D( Dataset ), A( Featureset )
-
输出:决策树
-
构造算法:递归
-
流程:
-
①如果当前D中所有样本属于同一类->创建叶子节点,节点的值为唯一的类标记
②如果当前特征集A为空集 ->创建叶节点,节点的值为数据集D中出现最多的类标记
③
- 否则,创建内部节点,值为数据集D中出现最多的类标记.
- 从特征集合中以某种规则(特征选择)抽取一个特征ai, 再根据该特征的值切分当前数据集D,得到数据子集D1,D2,D3,…,Dk.
- 使用k个数据子集D1,…, Dk以及特征子集A-{ai}递归调用决策树构造算法,创建k个子树
- 将当前内部节点作为k个子树的父节点
-
-
-
切分特征的选择
有助于分类的特征:按这个特征进行切分数据集,能使得各个数据子集样本尽可能属于同一类别(提高数据子集的Purity,降低不确定性)。
在使用一个特征切分数据集后,用Information Gain or Information Gain Ratio来量化分类不确定性降低程度。
信息熵(Information Gain):
设X是一个可取有限个值{x1,x2,x3,…,xn}的离散随机变量,概率分布是 p i = P ( X = x i ) p_i = P(X = x_i) pi=P(X=xi)
则,
信息熵: H ( x ) = − ∑ i = 1 n p i log 2 p i ( b i t ) ( 底 数 为 e 时 , 单 位 为 : n a t ) H(x) = -\sum^{n}_{i=1}p_i\log_2 p_i\ (bit) (底数为e时,单位为:nat) H(x)=−∑i=1npilog2pi (bit)(底数为e时,单位为:nat)
当p_i == 0
,定义 :0log0==0。
信息熵值越大,表示不确定性越强。
举例:抛硬币:
X 的 信 息 熵 : H ( X ) = − p log 2 p − ( 1 − p ) log 2 ( 1 − p ) X的信息熵:H(X)=-p \log_2p-(1-p)\log_2(1-p) X的信息熵:H(X)=−plog2p−(1−p)log2(1−p)
很明显,0.5时不确定性最大。
条件信息熵
是指在给定某个数(某个变量为某个值)的情况下,另一个变量的熵是多少(变量的不确定性是多少)
假设X概率分布: p i = P X ( X = x i ) p_i = P_X(X=x_i) pi=PX(X=xi)
Y在X条件下的条件概率分布: P j ∣ i = P Y ∣ X ( y j ∣ x i ) P_{j|i}=P_{Y|X}(y_j|x_i) Pj∣i=PY∣X(yj∣xi)
条件熵: H(Y|X)定义为:$H(Y|X) = \sum_{i=1}{n}P_x(X=x_i)H(Y|X=x_i)=\ \sum_{i=1}{n}(-p_i\sum_{j=1}^{m}P_{j|i}\log p_{j|i}) $
条件熵中X是一个变量,意思是在一个变量X的条件下(变量X的每个值都会取),另一个变量Y熵对X的期望。
那么:以特征A对D进行分割,得到n个数据子集{D1,D2, …}(个人理解为多个特征列向量),Di数据分为k各类别{C1, C2,…}(个人理解为,每个特征中对应的标签),以A为条件的D的条件熵H(D|A)
定义为:
H
(
D
∣
A
)
=
−
∑
i
=
1
n
(
∣
D
i
∣
∣
D
∣
∑
j
=
1
k
C
i
j
D
i
log
∣
C
i
j
∣
∣
D
i
∣
)
∣
.
∣
表
示
数
据
集
容
量
H(D|A)=-\sum_{i=1}^{n}(\frac{|D_i|}{|D|}\sum^{k}_{j=1}\frac{C_{ij}}{D_i}\log\frac{|C_{ij}|}{|D_i|})\\|.|表示数据集容量
H(D∣A)=−i=1∑n(∣D∣∣Di∣j=1∑kDiCijlog∣Di∣∣Cij∣)∣.∣表示数据集容量
信息增益(父节点的信息熵减去子节点的信息熵的差值)
在使用一个特征切分数据集后,来量化分类不确定性降低程度。
信息增益定义为 g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D, A)=H(D)-H(D|A) g(D,A)=H(D)−H(D∣A)
这里的差值越大,表示A克服不确定性越大,具有更强的分类能力。
划分特征时选用此作为指标:计算每个特征的信息增益,选择信息增益最大的特征作为切分特征。
- 先计算出信息熵
- 在计算各特征下的条件熵
- 在计算出信息增益
- 比较取最大值
信息增益比
如果一个特征的可取值比较多,那么通常信息增益比较大,会被优先选择。有失公平。
信息增益比就是在信息增益的基础上对可取值比较多的特征做出一定的“惩罚”。
数据集D,特征A,根据特征A的n个可取值将D切分为{D1,D2,D3…}
以特征A的值为分类标记计算熵
H
A
(
D
)
=
−
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
log
2
∣
D
i
∣
∣
D
∣
g
r
a
t
i
o
(
D
,
A
)
=
g
(
D
,
A
)
H
A
(
D
)
H_A(D)=-\sum^{n}_{i=1}\frac{|D_i|}{|D|}\log_2\frac{|D_i|}{|D|}\\g_{ratio}(D,A)=\frac{g(D,A)}{H_A(D)}
HA(D)=−i=1∑n∣D∣∣Di∣log2∣D∣∣Di∣gratio(D,A)=HA(D)g(D,A)
实现方法简述:
实现方法有ID3,C4.5,前者依据信息增益,后者依据增益比。
缺点:ID3实例各特征取值必须是离散值,而不是能连续实数值(气温只能取‘高’‘中’‘低’);预测目标值只能为离散值,不能为连续实数值。只能作为分类,不能作为回归
而CART算法解决了这个问题,既能分类还有能回归。