编程语言
首页 > 编程语言> > 决策树算法梳理

决策树算法梳理

作者:互联网

1.信息论基础

熵 联合熵 条件熵 信息增益 基尼不纯度

:(entropy)是表示随机变量不确定性的度量,如果一件事有nnn种可能结果,每种结果的概率为pi(i=1,2,n)p_i(i=1,2…,n)pi​(i=1,2…,n),那么熵表示为
H=i=1npilogpiH = -\sum _{i=1}^{n}p_ilogp_iH=−i=1∑n​pi​logpi​
熵越大,随机变量的不确定性就越大
分布为贝努力分布时熵与概率的关系
p=0p=0p=0或者p=1p=1p=1时,H(p)=0H(p) = 0H(p)=0,随机变量完全没有不确定性,当p=5p = 5p=5时,H(p)=1H(p)=1H(p)=1熵最大,即随机变量的不确定性最大。
联合熵(Joint Entropy) 服从联合分布为p(x,y)p(x,y)p(x,y)的一对离散型随机变量(X,Y)(X,Y)(X,Y),其联合熵H(X,Y)H(X,Y)H(X,Y)定义为:
H(x,y)=x,yp(x,y)logp(x,y)=i=1j=1p(xi,yi)logp(xi,yi)H(x,y) = -\sum _{x,y}p(x,y)logp(x,y)=-\sum _{i=1}\sum _{j=1}p(x_i,y_i)logp(x_i,y_i)H(x,y)=−x,y∑​p(x,y)logp(x,y)=−i=1∑​j=1∑​p(xi​,yi​)logp(xi​,yi​)
条件熵H(YX)H(Y|X)H(Y∣X)表示在已知随机变量XXX的条件下随机变量YYY的不确定性:
H(YX)=i=1np(X=xi)H(YX=xi)=xp(x)yp(yx)logp(yx)=xyp(x)p(yx)logp(yx)=xyp(x,y)logp(yx)H(Y|X) = \sum _{i=1} ^{n}p(X=x_i)H(Y|X=x_i)\\ =-\sum _{x} p(x)\sum _{y}p(y|x)logp(y|x)\\=-\sum _{x} \sum _{y}p(x)p(y|x)logp(y|x)\\=-\sum _{x} \sum _{y}p(x,y)logp(y|x)H(Y∣X)=i=1∑n​p(X=xi​)H(Y∣X=xi​)=−x∑​p(x)y∑​p(y∣x)logp(y∣x)=−x∑​y∑​p(x)p(y∣x)logp(y∣x)=−x∑​y∑​p(x,y)logp(y∣x)
信息增益(information gain)表示得知特征XXX的信息而使得类YYY的信息的不确定性减少的程度。特征AAA对训练数据集DDD的信息增益g(D,A)g(D,A)g(D,A)定义为集合DDD的经验熵H(D)H(D)H(D)与特征AAA给定条件下DDD的经验条件熵H(DA)H(D|A)H(D∣A)之差
g(D,A)=H(D)H(DA)g(D,A) = H(D) - H(D|A)g(D,A)=H(D)−H(D∣A)
一般的熵H(Y)H(Y)H(Y)与条件熵H(YX)H(Y|X)H(Y∣X)之差称为互信息,决策树学习中的信息增益等价于训练数据集中类与特征的互信息。
基尼不纯度:将来自集合中的某种结果随机应用于集合中的某一数据项的预期误差率,即从一个数据集中随机选取子项,度量其被错误划分到其他组里的概率。
IG(f)=i=1mfi(1fi)=1i=1mfi2I_G(f) = \sum _{i=1} ^{m}f_i(1-f_i) = 1 - \sum _{i=1}^{m}f_i^2IG​(f)=i=1∑m​fi​(1−fi​)=1−i=1∑m​fi2​
基尼不纯度越小,纯度越高,分类效果越好,纯度最低时fi=f2=fm=1mf_i = f_2 = …f_m = \frac{1}{m}fi​=f2​=…fm​=m1​

2.决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景

3. 回归树原理

一个回归树对应着输入空间(特征空间)的一个划分以及在划分的单元上的输出值,假设已将输入空间划分为MMM个单元R1,R2,RMR_1,R_2,…,R_MR1​,R2​,…,RM​,并且每个单元RmR_mRm​上有一个固定的输出值cmc_mcm​,于是回归树模型可以表示为f(x)=m=1McmI(xRm)f(x) = \sum _{m=1} ^{M}c_mI(x\in R_m)f(x)=m=1∑M​cm​I(x∈Rm​)
当输入空间划分确定后,采用均方误差xiRm(yif(xi))2\sum _{x_i \in R_m}(y_i - f(x_i))^2∑xi​∈Rm​​(yi​−f(xi​))2表示回归树对于训练数据的预测误差,单元RmR_mRm​上的cmc_mcm​的最优值c^m\hat{c}_mc^m​是RmR_mRm​上所有输入实例xix_ixi​对应的输出yiy_iyi​的均值,即
c^m=ave(yixiRm)\hat{c}_m = ave(y_i|x_i \in R_m)c^m​=ave(yi​∣xi​∈Rm​)
问题是怎样对输入空间进行划分,采用启发式方法,选择第jjj个变量x(j)x^{(j)}x(j)和它的取值sss作为切分变量切分点并定义两个区域
R1(j,s)={xx(j)s}R2(j,s)={xx(j)>s}R_1(j,s) = \{x|x^{(j)}\leq s\} \qquad R_2(j,s) = \{x|x^{(j)}> s\}R1​(j,s)={x∣x(j)≤s}R2​(j,s)={x∣x(j)>s}
寻找最优切分变量jjj和最优切分点sss:
minj,s[minc1x1R1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]min _{j,s} [min _{c_1}\sum _{x_1 \in R_1(j,s)}(y_i-c_1)^2+min _{c_2}\sum _{x_i \in R_2(j,s)}(y_i-c_2)^2]minj,s​[minc1​​x1​∈R1​(j,s)∑​(yi​−c1​)2+minc2​​xi​∈R2​(j,s)∑​(yi​−c2​)2]对固定输入变量jjj可以找到最优切分点sss
c^1=ave(yixiR1(j,s))c^2=ave(yixiR2(j,s))\hat{c}_1=ave(y_i|x_i\in R_1(j,s)) \qquad \hat{c}_2 = ave(y_i|x_i \in R_2(j,s))c^1​=ave(yi​∣xi​∈R1​(j,s))c^2​=ave(yi​∣xi​∈R2​(j,s)) 遍历所有输入变量,找到最优的切分变量jjj,构成一个对(j,s)(j,s)(j,s),依此将输入空间划分为两个区域,然后对每个区域重复上述划分过程,知道满足停止条件。

4. 决策树防止过拟合手段

预剪枝:是在决策树的生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分即结束树的构建并将当前节点标记为叶结点
后剪枝:先从训练集生成一棵完整的决策树,然后自底向上地对叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化为性能提升,则将该子树替换为叶结点。泛化性能的提升可以使用交叉验证数据来检查修剪的效果,通过使用交叉验证数据,测试扩展节点是否会带来改进。如果显示会带来改进,可以继续扩展该节点。如果精度降低,则不应该扩展,节点应该转换为叶节点。

5. 模型评估

一个好的模型需要较低的泛化误差和训练误差。
TP-正类预测为正类数,FN-正类预测为负类数,FP-负类预测为正类数,TN-负类预测为负类数。
P-正类数(P=TP+FN) N-负类数(N=FP+TN)
Accuracy:
Accuracy=TP+TNP+NAccuracy = \frac{TP+TN}{P+N}Accuracy=P+NTP+TN​
Precision
Precision=TPTP+FPPrecision = \frac{TP}{TP+FP}Precision=TP+FPTP​
Recall
Recall=TPPRecall = \frac{TP}{P}Recall=PTP​
F1 Score
F1=2PrecisionRecallRecall+PrecisionF1 = \frac{2*Precision*Recall}{Recall+Precision}F1=Recall+Precision2∗Precision∗Recall​
ROC 曲线和 PR曲线
在混淆矩阵中,真正率 TPR = TP / (TP+FN),假正率 FPR = FP / (FP + TN),其中TPR也即灵敏度(sensitivity),FPR也即(1-特异度)(specificity)。以纵坐标为TPR,横坐标为FPR,ROC 曲线实际就是不同阈值下TPR和FPR的轨迹。每一个预测结果在ROC空间中以一个点代表。阈值:阈值就是一个分界线,用于判定正负例的,在模型预测后我们会给每条预测数据进行打分(0<score<1)
在这里插入图片描述
PR曲线
P-R曲线的P就是查准率(Precision),R就是查全率(Recall)。用P作为横坐标,R作为纵坐标,就可以画出P-R曲线。对于分类器,通过调整分类阈值,可以得到不同的P-R值,从而可以得到一条曲线(纵坐标为P,横坐标为R)。通常随着分类阈值从大到小变化(大于阈值认为P),Precision减小,Recall增加。比较两个分类器好坏时,显然是查得又准又全的比较好,也就是的PR曲线越往坐标(1,1)的位置靠近越好。
在这里插入图片描述

6. sklearn参数详解,Python绘制决策树

DecisionTreeClassifier(criterion=“gini”,
splitter=“best”,
max_features = None,
max_depth=None,
min_samples_split=2,
min_samples_leaf=1,
min_weight_fraction_leaf=0.,
max_features=None,
random_state=None,
max_leaf_nodes=None,
min_impurity_decrease=0.,
min_impurity_split=None,
class_weight=None,
presort=False)
1.特征选择标准(criterion):‘gini’或者’entropy’选择基尼指数或者信息增益,根据选用的模型选择
2.划分点选择标准(splitter):‘best’或者’random’,前者在特征的所有划分点中找出最优的划分点,后者是随机在部分划分点中找出局部最优的划分点,‘best’适合样本量小,而’random’适合样本量大
3.划分考虑最大特征数(max_features):默认None,以为考虑所有特征数,如果是‘log2’意味着划分最多考虑log2(N)log_2(N)log2​(N),如果是’sqrt’或者’auto’则意味着划分最多N\sqrt{N}N
4.决策树最大深度(max_depth):特征少时默认,样本量大,特征多时可以限制在10~100之间
5.内部节点再划分所需最小样本数(min_samples_split):默认是2,如果样本量小,默认即可。样本量数量级非常大,增大数值
6.叶子节点最少样本数(min_weight_fraction_leaf):默认是1, 可以输入最少样本数的整数,或者最少样本数占样本总数百分比
7.分类特征值最大数量(max_features):‘默认使用全部特征值
8.最大节点数(max_leaf_nodes):默认None
9.节点划分最小不纯度下降(min_impurity_decrease) 如果该分裂导致杂质的减少大于或等于该值,则将分裂节点。
10.节点划分最小不纯度(min_impurity_split) 这个值限制了决策树的增长,如果某节点的不纯度(基尼系数,信息增益,均方差,绝对差)小于这个阈值,则该节点不再生成子节点。即为叶子节点
11.随机发生器种子(random_state):None表示随机数字发生器np.random采用的RandomState instance, 如果是一个整数值,random_state 是随机数字发生器的种子
12.是否预分类数据(presort):默认False,是否预分类数据以加速训练时最好分类的查找,True时会减慢训练过程

标签:yi,xi,sum,算法,划分,Gini,增益,梳理,决策树
来源: https://blog.csdn.net/absent1353/article/details/88142761