决策树基于树结构来进行预测
决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树。
决策树学习的关键在于如何选择最优划分属性。一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”(purity)越来越高。
划分选择
-
信息增益
-
信息熵
![2664fbf91b17ea9296306e62f9a02935.png](https://i-blog.csdnimg.cn/blog_migrate/672b329d27d71d639e71ac1cefd57981.png)
信息熵越高,纯度越低
![4095a457e3c0e6f80a6172654982bd7f.png](https://i-blog.csdnimg.cn/blog_migrate/fc385b4896eeb690e6c2fc4a8f2d298c.png)
-
信息增益
![f4db5eab5528caddf6d618702d5c255f.png](https://i-blog.csdnimg.cn/blog_migrate/edefe716e208e9e5ffcc5703213f04a6.png)
一般而言,信息增益越大,则意味着使用属性 来进行划分所获得的“纯度提升”越大
信息增益对可取值数目较多的属性有所偏好
2. 增益率
![07eeae4358d42b8237aa454b57476211.png](https://i-blog.csdnimg.cn/blog_migrate/6606172d36c357fe8830c7b0258b6c84.png)
增益率准则对可取值数目较少的属性有所偏好
3. 基尼指数
![8fb5e1f88255da6f375bcd107ecfab16.png](https://i-blog.csdnimg.cn/blog_migrate/3dc97830a01bd785fbfd72b9003e0247.png)
算法流程
一般的,决策树包含一个根结点、若干个内部结点和若干个叶结点。叶结点对应于决策结果,其他每个结点对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被分配到子结点中;根结点包含样本全集。从根结点到每个叶结点的路径对应了一个判定测试序列。
从根结点开始,对结点选择一个最优特征。由该特征的不同取值建立子结点,再对子结点递归地调用以上方法,直至(1)当前结点包含的样本全部属于同一类别(2)当前属性集为空,或所有样本在所有属性上取值相同,无法划分(3)当前结点包含的样本集合为空,不能划分。构建叶结点,最后每个子集都被分配到了叶结点上,即都有了明确的类,这样就生成了一棵决策树。
![91d928ba584ae79d63dbf78654f72a67.png](https://i-blog.csdnimg.cn/blog_migrate/4dab79ac0b881bdb0b89fd8b3509ac3c.png)
剪枝处理
-
为什么剪枝
可通过“剪枝”来一定程度避免因决策分支过多,以致于把训练集自身的一些特点当做所有数据都具有的一般性质而导致的过拟合。
2. 预剪枝
决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点记为叶结点,其类别标记为训练样例数最多的类别。
-
优点
降低过拟合风险
显著减少训练时间和测试时间开销
-
缺点
欠拟合风险:有些分支的当前划分虽然不能提升泛化性能,但在其基础上进行的后续划分却有可能导致性能显著提高。预剪枝基于“贪心”本质禁止这些分支展开,带来了欠拟合风险
3. 后剪枝
先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。
-
优点
后剪枝比预剪枝保留了更多的分支,欠拟合风险小,泛化性能往往优于预剪枝决策树
-
缺点
训练时间开销大:后剪枝过程是在生成完全决策树之后进行的,需要自底向上对所有非叶结点逐一考察
4. 例子
![12f9fd700c5d42b73d58d9ccdf4aa4c7.png](https://i-blog.csdnimg.cn/blog_migrate/fe71400f476a69cbc538aae0f84d28df.png)
-
预剪枝
![1b4c34ff4cbc612e0afeb51fd828a5ec.png](https://i-blog.csdnimg.cn/blog_migrate/8f6785cb057b3d997eac4baa2a31463b.png)
![9c3aa1e5dcf99490ece6bd5b57a54325.png](https://i-blog.csdnimg.cn/blog_migrate/8898520306be5c35b739963acb8c7606.png)
![15f36efd597b0fb3ff96d9026cbf3d6b.png](https://i-blog.csdnimg.cn/blog_migrate/5708b38bec8c7e2c23a3dcc99241f63a.png)
-
后剪枝
![68a40391f830a0b45fed560614269c4e.png](https://i-blog.csdnimg.cn/blog_migrate/a745c236c55fd539978cab9e261576c1.png)
![713327c4c1f707234ab7ebb45b9ed2ec.png](https://i-blog.csdnimg.cn/blog_migrate/22d692d0b25b0ba78f9261db9c178c27.png)
![cc1094a59462b51578c72926b4953d3c.png](https://i-blog.csdnimg.cn/blog_migrate/c8f35697aad98c9986c4acf9eb832834.png)
连续值与缺失值
-
连续值处理
![5329a07222e92dde0d8b779e7b580109.png](https://i-blog.csdnimg.cn/blog_migrate/dd8e81d876a7147aa2177686a12d4b00.png)
![e8742cf8ed59df93e1f2561490a5fe16.png](https://i-blog.csdnimg.cn/blog_migrate/ccef02c9cbb18eabbfd0200bc284f2d6.png)
与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性
2. 缺失值处理
-
如何在属性缺失的情况下进行划分属性选择?
![eb4288cd9ddf04eec49a27e528b0b479.png](https://i-blog.csdnimg.cn/blog_migrate/427baa90d84816f25d65c45517bd95b5.png)
例子:
![640e2b9bb1ccbbcb8d065ec537c962e8.png](https://i-blog.csdnimg.cn/blog_migrate/4692b279ac725041a3bfba662258fba9.png)
![5e037f4f2a13137d4a5bb6b1525cdcd2.png](https://i-blog.csdnimg.cn/blog_migrate/5b19a10c0617727ba2f531ff028fa05d.png)
-
给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
![309ee9e7117b61c0dc25a900d693030d.png](https://i-blog.csdnimg.cn/blog_migrate/401b7f2a7b6d55aa2966f0c09666679a.png)
例子:
若划分属性选择为纹理:
![263d44862a29413bd5dbdcf3209f2864.png](https://i-blog.csdnimg.cn/blog_migrate/5867b0ca6c6ffe3c6bec8c15b5c8e8cd.png)
多变量决策树
![89543960f0d4bf1ee4941750a11f6294.png](https://i-blog.csdnimg.cn/blog_migrate/b4ef2e04f30cde05b611e5f815b67346.png)
![8bd74eeff15f93a8a586a92989ddc605.png](https://i-blog.csdnimg.cn/blog_migrate/13c7f44ee4986170a482a6c264a8aa22.png)