【任务3 - 决策树算法梳理】时长:2天
- 信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度)
- 决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景
- 回归树原理
- 决策树防止过拟合手段
- 模型评估
- sklearn参数详解,Python绘制决策树
学习时长:两天
参考:西瓜书
cs229吴恩达机器学习课程
李航统计学习
谷歌搜索
公式推导参考:http://t.cn/EJ4F9Q0
1. 信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度)熵的英文为entropy,表示一个系系统在不受外部干扰时,其内部最稳定的状态。
1948年,香农Claude E. Shannon引入信息(熵),将其定义为离散随机事件的出现概率。一个系统越是有序,信息熵就越低;反之,一个系统越是混乱,信息熵就越高。信息熵被认为是系统有序化程度的一个度量。
在互信息的讨论中,我们已经涉及到联合分布的概率,联合熵就是度量一个联合分布的随机系统的不确定度,下面给出两个随机变量的联合熵的定义:
容易知道,联合熵的物理意义就是,观察一个多个随机变量的随机系统获得的信息量。
信息增益表示特征X使得类Y的不确定性减少的程度。特征A对训练数据集D的信息增益g(D,A) 定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D∣A) 之差
g(D,A)=H(D)−H(D∣A)
从一个数据集中随机选取子项,度量其被错误的划分到其他组里的概率。(书上解释);一个随机事件变成它的对立事件的概率(简单理解)。
Case:
一个随机事件X ,P(X=0)= 0.5 ,P(X=1)=0.5,那么基尼不纯度就为 P(X=0)(1 - P(X=0)) + P(X=1)(1 - P(X=1)) = 0.5
一个随机事件Y ,P(Y=0)= 0.1 ,P(Y=1)=0.9,那么基尼不纯度就为P(Y=0)(1 - P(Y=0)) + P(Y=1)(1 -P(Y=1)) = 0.18
很明显 X比Y更混乱,因为两个都为0.5 很难判断哪个发生。而Y就确定得多,Y=1发生的概率很大。而基尼不纯度也就越小。
结论:
- (1)基尼不纯度可以作为 衡量系统混乱程度的 标准;
- (2)基尼不纯度越小,纯度越高,集合的有序程度越高,分类的效果越好;
- (3)基尼不纯度为 0 时,表示集合类别一致;
- (4)在决策树中,比较基尼不纯度的大小可以选择更好的决策条件(子节点)。
2. 决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景CART:
sklearn内核写法:
CART全称为Classification and Regression Tree,其既可以解决分类问题,也可以解决回归问题。其特点就是在每一个节点上根据某一个维度d和某一个阈值v进行二分,这样得到的决策树就是一颗二叉树。
ID3算法,C4.5也均由特征选择,决策树生成和决策树剪枝这三个步骤完成,具体的差异在于特征选择时使用的标准不一样,其中ID3使用信息增益,但存在偏向选取值较多的特征的问题;针对ID3的问题,C4.5改用信息增益比来解决;CART分类树则使用基尼系数来进行特征选择。
作者:精神抖擞王大鹏
来源:CSDN
原文:https://blog.csdn.net/qq_29027865/article/details/86710772
3. 回归树原理
依然是创建一颗树,分类树是根据树上节点的判断原则,会落入到叶子节点表示的分类中,而回归问题是预测一个具体的数值,那么可以把最终落入到分类中所有数据的值的平均数,作为回归的预测值。
4. 决策树防止过拟合手段
- 决策树深度max_depth参数;
- min_samples_split参数:表示对于一个节点来说,至少要有多少个样本数据,才可以对这个节点继续拆分,其越高越不容易过拟合;
- min_samples_leaf参数:表示对于叶子节点来说,至少应该有几个样本;
- 剪枝
5. 模型评估
分类树模型:采用通用的分类模型评估指标
Accuracy
Precision
Recall
F1-score
ROC曲线和AUC
PR曲线
回归树模型:采用通用的回归模型评估指标
MSE
MAE
R^2
6. sklearn参数详解,Python绘制决策树
tree.DecisionTreeClassifier(class_weight=None, #balanced & None 可选
criterion=‘gini’,#“gini"或者"entropy”,前者代表基尼系数,后者代表信息增益。
max_depth=None,#max_depth控制树的深度防止overfitting
max_features=None, #可使用多种类型值,默认是"None",划分时考虑所有的特征数;
#“log2” 划分时最多考虑log2Nlog2N个特征;
#“sqrt"或者"auto” 划分时最多考虑√N个特征。
#整数,代表考虑的特征绝对数。
#浮点数,代表考虑特征百分比,即考虑(百分比xN)取整后的特征数。
#其中N为样本总特征数。
max_leaf_nodes=None,#最大叶节点树
min_impurity_split=1e-07, #限制决策树的增长,
#如果某节点的不纯度(基尼系数,信息增益)小于这个阈值,则该节点不再生成子节点,即为叶子节点。
min_samples_leaf=1,min_samples_split=2,#min_samples_split或min_samples_leaf来控制叶节点上的样本数量;
#两者之间的主要区别在于min_samples_leaf保证了叶片中最小的样本数量,而min_samples_split可以创建任意的小叶子。但min_samples_split在文献中更常见。
min_weight_fraction_leaf=0.0,#限制叶子节点所有样本权重和的最小值。如果小于这个值,则会和兄弟节点一起被剪枝。
# 默认是0,就是不考虑权重问题。
#一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,
#就会引入样本权重,这时我们就要注意这个值了。
presort=False,#布尔值,默认是False不排序。预排序,提高效率。
#设置为true可以让划分点选择更加快,决策树建立的更加快。
random_state=None, #随机生成器种子设置,默认设置为None,如此,则每次模型结果都会有所不同。
splitter=‘best’)#split"best"或者"random"。
#前者在特征的所有划分点中找出最优的划分点。
#后者是随机的在部分划分点中找局部最优的划分点。
#默认的"best"适合样本量不大的时候,而如果样本数据量非常大,此时决策树构建推荐"random"。