数据挖掘实训 第六周周报
1. 决策树
① 概念
决策树是以树状结构表示数据分类的结果
非叶子结点代表测试的条件,分支代表测试的结果。
② 如何构建决策树
构造决策树的关键步骤是分裂属性。所谓分裂属性就是在某个节点处按照某一特征属性的不同划分构造不同的分支,其目标是让各个分裂子集尽可能地“纯”。尽可能“纯”就是尽量让一个分裂子集中待分类项属于同一类别。分裂属性分为三种不同的情况:
- 属性是离散值且不要求生成二叉决策树。此时用属性的每一个划分作为一个分支。
- 属性是离散值且要求生成二叉决策树。此时使用属性划分的一个子集进行测试,按照“属于此子集”和“不属于此子集”分成两个分支。
- 属性是连续值。此时确定一个值作为分裂点split_point,按照>split_point和<=split_point生成两个分支。
2. 随机森林
① 组成
随机森林由决策树组成,这些决策树是随机的,随机性由随机选择属性、数据决定。由于这个特点,这些决策树也叫随机决策树。随机性可以避免过分拟合。测试数据进入随机森林时,实质是由一个个决策树进行分类,最后的类别由这些决策树的输出的众数决定。
② 构造过程
- 如果数据集包含N条数据,则随机有放回的选择N个样本.这是决策树随机性的一个保证.
- 当有M个属性时,在决策树每次需要分裂时,从M个属性中随机选择m个属性(m<<M).在这m个属性中,选择一种策略进行分裂(信息增益),决定进行分裂的属性。
- 每个节点都进行重复步骤2的分裂,直到得到叶子节点。整个过程没有进行剪枝。这样建立起一棵决策树。
- 重复步骤1~3,建立随机森林。
3. GBDT与XGBoost
① GBDT
GBDT是一种迭代的决策树算法,它通过构造一组弱的学习器(树),并把多颗决策树的结果累加起来作为最终的预测输出。
我们知道,度量任何一个模型最重要的就是这个模型的损失函数,我们训练的目标就是使得损失函数L最小化。
当损失函数是平方损失和指数损失时,每一步优化是很简单的。但对一般损失函数而言,往往每一步优化都没那么容易,如绝对值损失函数。
如何使损失函数最小化?调整参数,使得损失沿着梯度向下降。
对于损失函数为平方损失函数的,我们可以使用的是yj-Ti对xj的预测结果作为残差。那么对于其他类型的损失函数我们使用什么作为残差以达到最好效果呢?针对这一问题,Freidman提出梯度提升算法:利用最速下降的近似方法,即利用损失函数的负梯度在当前模型的值。
如果我们对提升树的损失函数求偏导,能发现,偏导是等于残差的
![图片描述](https://i-blog.csdnimg.cn/blog_migrate/96e848b80c15ccac5da6aaa23a7d71be.png)
因此,对于不同损失函数,我们可以使用损失函数的偏导作为我们的残差。
这就是梯度提升决策树了。
② XGBoost
XGBoost是GBDT的一种高效实现,XGBoost中的基学习器除了可以是CART也可以是线性分类器。
- 和GBDT不同,XGBoost给损失函数增加了正则化项(L1或L2正则化项)。
- 有些损失函数是难以计算导数的,鉴于这种情况,XGBoost使用损失函数的二阶泰勒展开作为损失函数的拟合。
- GBDT的节点分裂方式是遍历所有特征的所有可能划分,再选取最优者分裂,XGBoost使用分位点及分位数法,近似地计算,有效降低计算量。