目录
1 概述(解决的问题):
如果选用了决策树算法,然后在生成决策树的过程中不做任何限制,那么学出来的这颗 树很深,很容易出现过拟合。本章主要介绍防止过拟合的方法:剪枝(前剪枝 后剪枝),以及对决策树的优缺点进行简要介绍
2 前剪枝:
1.10. Decision Trees — scikit-learn 1.0.2 documentation
2.1 scikt-learn决策树创建方法:
from sklearn.tree import DecisionTreeClassifier
tree=DecisionTreeClassifier()
@_deprecate_positional_args
def __init__(self, *,
criterion="gini",
splitter="best",
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,
ccp_alpha=0.0):
2.2 scikt-learn中的前剪枝方法:给出了7种
参数解释:
criterior=“gini” #树生成算法
splitter=“best” #...
max_depth=None #1 最大多少层(不包含节点)
min_samples_split=2 #2 节点切分前最小包含的样本数量
min_sample_leaf=1 #3 节点切分后节点最小包含1个样本
min_weight_fraction_leaf=0 #4 叶子节点在总用本中最小的比列
max_leaf_nodes=None #...
random_state=None #... 随机种子
max_leaf_nodes=None #5 叶子节点的最大数量
min_impurity_decrease=0 #6 不纯度减小的最小值;举例gini系数,=0.1 假设分裂前的gini系统是
0.667 分裂后的0.577 0.6670.577=0.09<0.1 测不分裂
min_impurity_split=None #7 切分前的最小的不纯度; 假设:切分前的最小不纯度位0.5 计算一组数据 的不纯度位 0.667 则可以继续切分。如果为0.1 则不能继续切分
class_weight=None #类别的权重(在算不纯度的时候会加权求和计算不纯度)
presort=None #排序
#什么情况下需要排序:
#1.对于离散化的数据不需要排序
#对于像年收入这样的维度,可以进行排序,排序的目的在于方便找分裂的阈值。
#排序之后,仅计算阈值,提高计算的效率
3 后剪枝:实际使用不会使用后剪枝
3.1 常见三种后剪枝方法:
(1)REP-错误率降低剪枝
(2)PEP-悲观剪枝(C4.5)
(3)CCP 代价复杂度剪枝(CART)
含义:在采用决策树生成算法 C4.5 自带了悲观剪枝,CART自带了代价复杂度剪枝
4 决策树优缺点
如图所示,相比与线性分类器,线性不可分,但是我们可以对其进行升维 做到可分
然而采用决策树: 可以采用x2 <指定值; x1 <指定值,即可做到非线性可分
4.1 优点:
(1)决策树过程接近人的思维习惯
(2)模型容易理解 比线性模型具有更好的解释性
(3)能清楚的使用图形化描述模型
(4)处理定制特征比较容易
注意:没有用到归一化 也就是说没有用到梯度下降
4.2 缺点:
(1)一般来说,决策树准确率不如其他模型
(2)如果追求训练集的数据准确率比较高 容易出现过拟合
(3)不支持在线学习,当有新样本来的时候,需要重建决策树
在线学习:新来样本带到算法中去,调整模型
不在线学习:新来样本之后,带入算法,需要重新计算算法。