数据挖掘模型算法是一种从大量数据中寻找有用信息的方法。这些算法包括分类、聚类、关联规则、序列模式和预测等多种类型。它们可以帮助我们理解数据的内在结构和模式,从而为决策提供有价值的洞察。数据挖掘模型算法在许多领域都有应用,包括金融、生物信息学、电子商务和社交媒体等。通过使用这些算法,我们可以解决各种实际问题,如客户分层、商品推荐、欺诈检测和市场细分等。
树类模型
树类模型是一种常见的数据挖掘算法。它们主要包括决策树和随机森林等算法。这些算法以树形结构表示数据的决策逻辑,使得结果易于理解。树类模型可以处理分类和回归两种类型的问题,适用于各种场景。
1. 决策树
决策树是一种基于树结构进行决策的流程模型,每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种决策结果。构建决策树的主要步骤包括:选择最优属性、根据最优属性的值划分数据集、创建决策节点、递归生成树。在实际操作中,如何确定划分的属性以及划分的标准,通常是根据某种度量方法,如信息增益、增益率或基尼指数等。至于分裂,决策树在每个非叶子节点都会进行分裂,根据属性的不同值,将数据集分裂为几个更小的数据集,然后在这些更小的数据集上递归地生成子树。
(1)衡量标准(最优属性选取方法)
- 信息熵
决策树模型是一种if-else型的模型,通过对数据集的学习,生成树模型的内部节点,内部节点表示对一个属性的判断。
从定义上讲,信息熵用来衡量不确定性,不确定性越强,则信息熵越大,不确定性越弱,则信息熵越小。其公式如下所示。
H ( X ) = − ∑ i = 1 n P ( X = i ) l o g 2 P ( X = i ) H(X)=-\sum_{i=1}^nP(X=i)log_2P(X=i) H(X)=−i=1∑nP(X=i)log2P(X=i)
条件熵,定义是在给定随机变量Y的条件下,随机变量X的不确定性。用通俗的话讲就是,施加一个条件后(如
r
<
0.5
r<0.5
r<0.5),在这一条件下的信息熵。
H
(
X
∣
Y
=
v
)
=
−
∑
i
=
1
n
P
(
X
=
i
∣
Y
=
v
)
l
o
g
2
P
(
X
=
i
∣
Y
=
v
)
H(X|Y=v)=-\sum_{i=1}^nP(X=i|Y=v)log_2P(X=i|Y=v)
H(X∣Y=v)=−i=1∑nP(X=i∣Y=v)log2P(X=i∣Y=v)
- 信息增益(代表例子ID3树)
信息增益,信息增益则是用于衡量给定条件后,信息的不确定性减少了多少。即加了个条件后,信息熵的变化。
I
(
X
,
Y
)
=
H
(
X
)
−
H
(
X
∣
Y
)
I(X,Y)=H(X)-H(X|Y)
I(X,Y)=H(X)−H(X∣Y)
G
a
i
n
(
D
K
,
D
V
)
=
−
p
(
k
)
l
o
g
(
p
(
k
)
)
+
∑
v
V
∑
k
K
p
(
v
,
k
)
l
o
g
(
p
(
k
∣
v
)
)
Gain(D^K, D^V)=-p(k)log(p(k))+\sum^V_v\sum^K_kp(v,k)log(p(k|v))
Gain(DK,DV)=−p(k)log(p(k))+v∑Vk∑Kp(v,k)log(p(k∣v))
-
信息增益率(代表例子C4.5树)
Gain_ratio ( D K , D V ) = Gain ( D K , D V ) Ent ( D V ) \text{Gain\_ratio}\left(D^K, D^V\right) = \frac{\text{Gain}\left(D^K, D^V\right)}{\text{Ent}\left(D^V\right)} Gain_ratio(DK,DV)=Ent(DV)Gain(DK,DV) -
GINI系数(代表例子CART树)
基尼值与熵一样,基尼系数表征的也是事件的不确定性,将熵定义式中的
−
l
o
g
p
i
-logp_i
−logpi替换为
1
−
p
i
1-p_i
1−pi就是基尼值。
Gini
(
D
K
)
=
∑
k
p
k
(
1
−
p
k
)
=
∑
k
p
k
−
∑
k
p
k
2
=
1
−
∑
k
p
k
2
\text{Gini}(D^K) = \sum_{k} p_k(1 - p_k) = \sum_{k} p_k - \sum_{k} p_k^2 = 1 - \sum_{k} p_k^2
Gini(DK)=k∑pk(1−pk)=k∑pk−k∑pk2=1−k∑pk2
(2)决策树算法
- ID3算法
现在开始选择第一个特征,如果第一个特征选色泽,则根据前面介绍的方法,计算出的信息增益为0.109,即Gain(D,色泽)=0.109。同理,如果选择其他特征,则信息增益如下
Gain ( D , 根茎 ) = 0.143 ; Gain ( D , 敲声 ) = 0.141 ; Gain ( D , 纹理 ) = 0.381 ; Gain ( D , 肿部 ) = 0.289 ; Gain ( D , 触感 ) = 0.006. \text{Gain}(D, \text{根茎}) = 0.143; \quad \text{Gain}(D, \text{敲声}) = 0.141; \\ \text{Gain}(D, \text{纹理}) = 0.381; \quad \text{Gain}(D, \text{肿部}) = 0.289; \\ \text{Gain}(D, \text{触感}) = 0.006. Gain(D,根茎)=0.143;Gain(D,敲声)=0.141;Gain(D,纹理)=0.381;Gain(D,肿部)=0.289;Gain(D,触感)=0.006.
而该算法的逻辑是每次进行特征选择时,选取最大信息增益的特征。而根据计算结果,纹理是信息增益最大的特征。
而该算法的逻辑是每次进行特征选择时,选取最大信息增益的特征。而根据计算结果,纹理是信息增益最大的特征。因此该决策树的第一层就构建完成了,其结构见下图
用纹理这一特征将树的第一层构建完成之后,继续递归寻找除了纹理之外的特征的信息增益最大的特征。分别对纹理分类后的三个子节点计算增益,以纹理清晰这一子节点为例。继续计算各个特征带来的信息增益,得到如下计算结果。
Gain
(
D
1
,
色泽
)
=
0.043
;
Gain
(
D
1
,
根茎
)
=
0.458
;
Gain
(
D
1
,
敲声
)
=
0.331
;
Gain
(
D
1
,
肿部
)
=
0.458
;
Gain
(
D
1
,
触感
)
=
0.458.
\text{Gain}(D^1, \text{色泽}) = 0.043; \quad \text{Gain}(D^1, \text{根茎}) = 0.458; \\ \text{Gain}(D^1, \text{敲声}) = 0.331; \quad \text{Gain}(D^1, \text{肿部}) = 0.458; \\ \text{Gain}(D^1, \text{触感}) = 0.458.
Gain(D1,色泽)=0.043;Gain(D1,根茎)=0.458;Gain(D1,敲声)=0.331;Gain(D1,肿部)=0.458;Gain(D1,触感)=0.458.
发现触感、根蒂、脐部的信息增益最大,三则任选其一即可。对这一层递归完成后,得到下图的树结构。
- ID3算法流程
在这里总结一下,ID3的决策树算法的流程为:
1.寻找最优特征,即计算信息增益
2.将最优特征的特征值作为有向边,判断子数据集
若子数据集均为同一类,则输出叶子节点;反之,若子数据集中仍有特征,重复1,2过程,若没有更多特征,则将最多的一类输出为叶子节点
3.叶子节点全部输出或无数据集可遍历即结束。
- 优缺点
(1)只适用于计算特征是离散的
(2)倾向于选择大量值的属性(即特征值多的)
(3)过拟合: ID3容易产生过拟合,特别是在有许多属性时。
- C4.5树
为了解决特征值数量问题对信息增益计算的影响。该算法使用信息增益率替代信息增益作为寻找最优特征的判据。其计算公式就是信息增益除以子节点的熵。
G a i n R a t i o ( D , A ) = G a i n ( D , A ) − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g 2 ( ∣ D i ∣ ∣ D ∣ ) GainRatio(D,A)=Gain(D,A)−\sum_{i=1}^n\frac{|D_i|}{|D|}log2(\frac{|D_i|}{|D|}) GainRatio(D,A)=Gain(D,A)−i=1∑n∣D∣∣Di∣log2(∣D∣∣Di∣)
针对ID3算法不能处理连续特征的问题,该算法使用二分法做离散化处理,先将连续特征从小到大排序,对N个连续数据进行N-1个二分划分,遍历N-1个划分点,分别计算这些子节点的信息增益,选择信息增益最大的二分结果作为该连续特征的最佳划分点。
- 优缺点
(1)遍历所有连续值,计算复杂度高
(2)尽管有剪枝步骤,但在某些情况下模型仍然可能过拟合。
- CART3树
CART3算法针对分类数,引入了基尼不纯度(又称基尼指数)这一概念,这一概念表示样本集合中在一个随机选中的样本被分错的概率。该指数越小表示该集合的纯度越高,所有样本为同一类时,基尼指数为0。
分类依据和前两种算法不同,其他都大体相似
2. Boosting提升树
在梯度提升树(Gradient Boosting Trees,GBT)中,每一棵树确实是串联的。串联的意思是每一棵树的训练和预测都依赖于前一棵树的输出,具体来说:
串联结构详解
-
初始化模型:
- 首先,使用一个简单的模型(通常是常数值)初始化预测。对于回归问题,通常使用目标变量的均值作为初始预测值。
-
计算残差:
- 对于每一棵新树,计算当前模型的残差,即实际值与当前模型预测值之间的差异。这些差表示当前模型尚未捕捉到的误差。
-
拟合残差:
- 新树的训练目标是拟合这些残差。新树试图预测当前模型的误差,从而在现有模型的基础上进行改进。
-
更新模型:
-
新树的预测结果乘以一个学习率(通常是小于1的常数),然后加到当前模型的预测值上。这个学习率控制每一棵树对最终模型的贡献,防止模型过拟合。
-
公式表示为:其中, y i ( m ) y^i(m) yi(m)是第m次迭代后的预测值, y i ( m − 1 ) y^i(m−1) yi(m−1)是前一次迭代后的预测值, η η η是学习率, h m ( x i ) hm(x_i) hm(xi)是第m棵树的预测值。
y i ( m ) = y i ( m − 1 ) + η ⋅ h m ( x i ) y^i(m)=y^i(m−1)+η⋅hm(x_i) yi(m)=yi(m−1)+η⋅hm(xi)
-
-
迭代训练:
- 重复步骤2到4,训练多棵树。每棵新树都是在前面所有树的基础上进行改进的。
-
最终模型:
- 最终的模型是所有树的加权和。通过逐步减少残差,最终模型的预测性能不断提高。
串联结构示意
假设有三棵树 T1, T2, T3:
-
第一棵树 T1:
-
初始化模型 F0(x) 用目标变量的均值。
F 1 ( x ) = F 0 ( x ) + η ⋅ T 1 ( x ) F1(x)=F0(x)+η⋅T1(x) F1(x)=F0(x)+η⋅T1(x)
-
-
第二棵树 T2:
-
计算残差 r i = y i − F 1 ( x i ) r_i=y_i−F1(x_i) ri=yi−F1(xi)
F 2 ( x ) = F 1 ( x ) + η ⋅ T 2 ( x ) F2(x)=F1(x)+η⋅T2(x) F2(x)=F1(x)+η⋅T2(x)
-
-
第三棵树 T3:
-
计算残差 r i = y i − F 2 ( x i ) r_i=y_i−F2(x_i) ri=yi−F2(xi)
F 3 ( x ) = F 2 ( x ) + η ⋅ T 3 ( x ) F3(x)=F2(x)+η⋅T3(x) F3(x)=F2(x)+η⋅T3(x)
-
最终模型 F(x) 是所有树的加权和:
F ( x ) = F 0 ( x ) + η ⋅ T 1 ( x ) + η ⋅ T 2 ( x ) + η ⋅ T 3 ( x ) F(x)=F0(x)+η⋅T1(x)+η⋅T2(x)+η⋅T3(x) F(x)=F0(x)+η⋅T1(x)+η⋅T2(x)+η⋅T3(x)
优点和影响
- 优势:
- 通过串联每棵树,梯度提升树可以逐步减少预测误差,提高模型的预测性能。
- 学习率可以控制每棵树的贡献,防止过拟合。
- 影响:
- 每棵树的训练依赖于前一棵树的结果,因此训练过程是串行的,不像袋装(Bagging)方法中的并行训练。
- 这种依赖关系使得梯度提升的训练过程较慢,但可以通过优化算法(如XGBoost的并行计算)来加速。