1. 决策树的超参数
建立决策树模型训练之前,须设定超参数:
- maxBins: 决策树每一个节点最大分支数目
- maxDepth: 决策树最大深度
- Impurity: 决策树分裂节点时方法(基尼不纯度, 熵)
2. 设计决策树模型面临的问题
设计决策树模型面临的问题:
- 如何评估模型的准确率: 二元分类中, 使用AUC作为评估标准
- 模型的训练参数(超参数)会影响准确率, 训练时间: 调整参数使得准确率以及时间最优
- 如何确定是否过度拟合: 训练评估阶段AUC很高, 而测试阶段AUC很低, 代表可能有过渡拟合问题. 若差异不大, 则无过度拟合问题.
3. 决策树的优缺点
决策树的优缺点
- 优点:计算复杂度不高,输出结果容易理解,对中间值的缺失不敏感,可以处理不相关特征数据,常用算法,仅次于贝叶斯
- 缺点:可能会产生过度匹配
- 适用数据类型:数值型,标称型
4. 决策树算法的核心问题
决策树算法的核心问题
- 按什么样的次序选择变量(属性)
ID3算法,C4.5算法 - 最佳分离点在哪里(对于连续型变量)
举个栗子:
年龄age有11,13,17,19,21,25,28,30,35,40,48,60.假设要将年龄分成两段,young和old.可以令大于x的年龄归到old,小于x的归到young.但是如何确定x?
- 先取11和13的平均值12,13和17的平均值15,以此类推.
- 假设选12为分裂点,算一下信息增益,以此类推,算出所有的信息增益, 哪个信息增益最大选哪个作为x
5. 决策树的构造过程
决策树的构造
- 构造决策树要解决的第一个问题就是,当前哪个属性起决定性作用.所以必须评估每个属性,找到决定性的那个属性
- 创建分支的伪代码createBranch():
检测数据集中的每个子项是否属于同一分类:
If 是,return 类标签
Else:
寻找划分数据集的最好特征
划分数据集
创建分支节点
For 每个分支节点:
调用createBranch函数并增加返回结果到分支节点中
Return 分支节点
6. 决策树的各种算法
ID3
C4.5
CART
输入:训练集, 属性集
过程:函数TreeGenerate(D, A)
生成节点`node`
if D中样本全属于同一类别C:
将node标记为C类叶节点
return
if A is 空集 or D中所有样本在A上取值相同:
将node节点标记为叶节点,其类别标记为D中样本数最多的类
return
从A中选择最优划分属性a*
for a*v in a*:
为node生成一个分支;令Dv表示D中在a*上取值为a*v的样本子集
if Dv is 空:
将分支节点标记为叶节点,其类别标记为D中样本最多的类
return
else:
以TreeGenerate(Dv, A\{a*})为分支节点
输出:以node为根节点的一颗决策树
决策树是一个递归过程,有三种情况会导致递归返回:
- 当前节点包含的样本属于同一类别,无需划分
- 当前属性集为空或所有样本在所有属性上取值相同,无法划分
- 当前节点包含的样本集合为空,无法划分
由上述算法的伪代码可以看出,决策树构造最重要的环节就是如何选择划分的属性:
- 信息增益(ID3)
- 信息增益率(C4.5)
- 基尼系数(CART)
ID3
信息熵:样本集合D中第k类样本所占比率为,则该样本的信息熵
属性a对样本D进行划分后的信息熵:
假设属性a有V个可选值,则a将D切成V个子样本D1,D2,...,DV。则划分后的信息熵
其中表示子样本的个数
对样本D划分属性a的信息增益:
每次划分我们都选择信息增益最大的那个属性
C4.5
实际上,信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好带来的不利影响,C4.5算法使用增益率来进行属性划分
属性a的固有值:
属性a的可能取值数目越多,则固有值越大。
增益率:
需要注意的是,增益率准则对可取值数目较少的属性有所偏好,所以C4.5算法不是直接取增益率最大的候选划分属性,而是:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的
CART算法
数据集D的基尼系数:
直观来说,基尼系数反映了从数据集中抽取两个样本,其类别不一致的概率。因此,基尼系数越小,则数据集纯度越高
我们在选属性时,选择那个使得划分后基尼指数最小的属性作为最优属性划分
数据集D的基尼系数:
直观来说,基尼系数反映了从数据集中抽取两个样本,其类别不一致的概率。因此,基尼系数越小,则数据集纯度越高
我们在选属性时,选择那个使得划分后基尼指数最小的属性作为最优属性划分
剪枝处理
剪枝是决策树学习算法对付过拟合的主要手段。
剪枝可分为预剪枝和后剪枝两种基本策略。
- 预剪枝:预剪枝是指在决策树的生成过程中,对每个节点在划分前后进行估计,若当前节点的划分不能带来决策树泛化性能的提升,则停止划分并将当前节点标记为叶节点。
- 后剪枝:先从训练集生成一颗完整的决策树,然后自底而上地对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来决策树的泛化性能提升,则将该子树替换为叶节点。
连续值与缺失值
连续值处理
对于连续的属性,可取值不可数,因此不能直接用连续属性的取值来对节点进行划分。此时就需要将连续属性离散化。最简单的策略就是二分法(C4.5采取的就是这种机制):
- 将连续属性a的所有n个取值升序排列
- 相邻两个取值的均值可作为候选划分点,则有n-1个候选划分点
- 从这n-1个候选划分点选一个最好的:计算这n-1个候选划分点划分后的信息增益,选择信息增益最大的那个候选划分点作为属性a的划分点
缺失值处理
现实任务中,经常会遇到数据不完整的情况,尤其是属性较多的时候,会有大量样本出现缺失值。
我们需要解决两个问题:
- 如何在属性缺失的情况下进行划分属性选择
- 给定划分属性,如何对带缺失属性的样本进行划分
对问题一:
给定训练集D和属性a,计算D中属性a不缺失的子集D'所占比例p
则把D'当成D,按之前的标准来计算即可
对问题二:
若样本x在属性a上的取值未知,则将x同时划入所有子结点,且样本权值调整为r*w, 其中r为D'中各个属性个数的比例,w为样本在当前子结点的权值(初始权值均为1)
多变量决策树
OC1等 TODO
增量学习 TODO
- ID4
- ID5R
- ITI