决策树算法梳理
作者:互联网
1.信息论基础
熵 联合熵 条件熵 信息增益 基尼不纯度
熵:(entropy)是表示随机变量不确定性的度量,如果一件事有n种可能结果,每种结果的概率为pi(i=1,2…,n),那么熵表示为
H=−i=1∑npilogpi
熵越大,随机变量的不确定性就越大
当p=0或者p=1时,H(p)=0,随机变量完全没有不确定性,当p=5时,H(p)=1熵最大,即随机变量的不确定性最大。
联合熵(Joint Entropy) 服从联合分布为p(x,y)的一对离散型随机变量(X,Y),其联合熵H(X,Y)定义为:
H(x,y)=−x,y∑p(x,y)logp(x,y)=−i=1∑j=1∑p(xi,yi)logp(xi,yi)
条件熵H(Y∣X)表示在已知随机变量X的条件下随机变量Y的不确定性:
H(Y∣X)=i=1∑np(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)表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。特征A对训练数据集D的信息增益g(D,A)定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D∣A)之差
g(D,A)=H(D)−H(D∣A)
一般的熵H(Y)与条件熵H(Y∣X)之差称为互信息,决策树学习中的信息增益等价于训练数据集中类与特征的互信息。
基尼不纯度:将来自集合中的某种结果随机应用于集合中的某一数据项的预期误差率,即从一个数据集中随机选取子项,度量其被错误划分到其他组里的概率。
IG(f)=i=1∑mfi(1−fi)=1−i=1∑mfi2
基尼不纯度越小,纯度越高,分类效果越好,纯度最低时fi=f2=…fm=m1
2.决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景
- 算法步骤:特征选择、决策树生成、剪枝
- ID3:采用信息增益划分数据
ID3算法的核心是在决策树各个节点上应用信息增益准则选择特征,递归地构建决策树。由于熵越大表示样本的不确定性越大,因此使用划分前后集合的熵的差值衡量使用当前特征对于样本集合D划分效果的好坏。使用某个特征A划分集合D,划分前后的信息增益为:
信息增益=entropy(划分前)−entropy(划分后)即g(D,A)=H(D)−H(D,A)
因此,使用所有的特征划分数据集D,得到多个特征划分数据集D的信息增益,选取信息增益最大的特征作为节点特征,由该特征的不同取值建立子节点;子节点采用递归调用以上方法,构建决策树;直到所有特征的信息增益均很小或者没有特征可以选择终止。
缺点:信息增益倾向于取值较多的特征
-**C4.5:为解决ID3问题,采用信息增益比划分数据 **
信息增益比 = 惩罚参数 * 信息增益,即gR(D,A)=HA(D)g(D,A),其中HA(D)对于样本集合,将当前特征A作为随机变量,求得的经验熵
HA(D)=−i=1∑nD∣Di∣log2∣DDi
信息增益的本质:信息增益基础上乘以一个惩罚参数,特征较多时,惩罚参数较小,特征个数少时,惩罚参数较大,惩罚参数表示为:数据集D以特征A作为随机变量的熵的倒数
惩罚参数=HA(D)1=−∑i=1nD∣Di∣log2∣DDi1
缺点:信息增益比倾向于取值少的特征,由于特征值少,HA(D)较小,倒数变大,因此信息增益比大。因此,在候选特征中找出信息增益高于平均水平的特征,然后在这些特征中再选择信息增益率最高的特征。
CART:采用基尼指数划分数据
基尼指数(基尼不纯度):样本集合中一个随机选中的样本被分错的概率。
Gini指数越小表示集合中被选中的样本被分错的概率越小,也就是说集合的纯度越高,反之,集合越不纯,即 基尼指数(基尼不纯度) = 样本被选中的概率 * 样本被分错的概率,即
Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
pk表示选中的样本属于k类别的概率,则这个样本被分错的概率是1−pk,样本集合中有K个类别,一个随机选中的样本可以属于这个k类别中的任意一个。
样本集合D的Gini指数表示为:Gini(D)=1−∑k=1K(∣D∣∣Ck∣)2,这里的Ck是D中属于第k类的样本子集,K是类的个数。如果样本集合D根据特征A是否取某一个可能值a被分割成D1和D2两个部分,即D1=(x,y)∈D∣A(x)=a,D2=D−D1,那么在特征A条件下,集合D的基尼指数定义为:
Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2).对于具有多个特征的,计算每一个取值作为划分点,分别求取Gini(D,Ai),找出基尼指数最小的划分作为划分点,对集合进行划分。
3. 回归树原理
一个回归树对应着输入空间(特征空间)的一个划分以及在划分的单元上的输出值,假设已将输入空间划分为M个单元R1,R2,…,RM,并且每个单元Rm上有一个固定的输出值cm,于是回归树模型可以表示为f(x)=m=1∑McmI(x∈Rm)
当输入空间划分确定后,采用均方误差∑xi∈Rm(yi−f(xi))2表示回归树对于训练数据的预测误差,单元Rm上的cm的最优值c^m是Rm上所有输入实例xi对应的输出yi的均值,即
c^m=ave(yi∣xi∈Rm)
问题是怎样对输入空间进行划分,采用启发式方法,选择第j个变量x(j)和它的取值s作为切分变量和切分点并定义两个区域
R1(j,s)={x∣x(j)≤s}R2(j,s)={x∣x(j)>s}
寻找最优切分变量j和最优切分点s:
minj,s[minc1x1∈R1(j,s)∑(yi−c1)2+minc2xi∈R2(j,s)∑(yi−c2)2]对固定输入变量j可以找到最优切分点s
c^1=ave(yi∣xi∈R1(j,s))c^2=ave(yi∣xi∈R2(j,s)) 遍历所有输入变量,找到最优的切分变量j,构成一个对(j,s),依此将输入空间划分为两个区域,然后对每个区域重复上述划分过程,知道满足停止条件。
4. 决策树防止过拟合手段
预剪枝:是在决策树的生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分即结束树的构建并将当前节点标记为叶结点
后剪枝:先从训练集生成一棵完整的决策树,然后自底向上地对叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化为性能提升,则将该子树替换为叶结点。泛化性能的提升可以使用交叉验证数据来检查修剪的效果,通过使用交叉验证数据,测试扩展节点是否会带来改进。如果显示会带来改进,可以继续扩展该节点。如果精度降低,则不应该扩展,节点应该转换为叶节点。
5. 模型评估
一个好的模型需要较低的泛化误差和训练误差。
TP-正类预测为正类数,FN-正类预测为负类数,FP-负类预测为正类数,TN-负类预测为负类数。
P-正类数(P=TP+FN) N-负类数(N=FP+TN)
Accuracy:
Accuracy=P+NTP+TN
Precision
Precision=TP+FPTP
Recall
Recall=PTP
F1 Score
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),如果是’sqrt’或者’auto’则意味着划分最多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