1.决策树构造
难点:如何构造树 选择什么样的节点做根节点
2.熵 :衡量标准,用于选择哪个节点做当前的节点
表示随机变量的不确定性(物体内部的混乱程度【所以熵越小越好】)
ID3算法: 就是基与信息增益的算法
问题: 假设以ID(每条数据都是不同的 或者 那些分的很细但是没有意义的)作为分类依据,算出来的熵 = 0 则信息增益最大,但是拿ID来分类是没有意义的
C4.5:信息增益率(通过考虑自身熵的方式解决ID3的问题)
就是为分类自身计算一次熵
如 当以ID为分类方式时计算得到的熵为0 因此得到的信息增益就很大,会让人误以为这种分类方式很好,但要是为其自身计算一次熵,如下图,再进行比值着就发现信息增益率变小了
信息增益与信息增益率的计算:(重点)
CART算法:使用GINI系数当作衡量标准
连续值的处理:【https://blog.csdn.net/u012328159/article/details/79396893】
若属性是一些连续值如:工资:12k 11k 10k 9k
这时需要我们进行离散化,首先进行排序 9.10.11.12
然后进行二分,这里有3个划分点 小于9.5. 小于10.5. 和小于11.5
当要计算工资节点的信息增益时,只用分别求出上面3个划分点的信息增益,然后取最好结果的那个划分点做为依据。
**有一点需要注意的是:与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。**如下图所示的一颗决策树,“含糖率”这个属性在根节点用了一次,后代结点也用了一次,只是两次划分点取值不同。
3.决策树剪枝策略:
当决策树够大,让每个叶子结点上只有一个样本的时候,就严重过拟合了
我们需要对决策树进行剪枝,即,去除一些特征,让树的叶子结点不至于太多。
这里的剪枝策略有两种:
4.用sklearn构造与使用决策树
1)选择数据
2)构造决策树 hin简单
默认的参数如下:
DecisionTreeRegressor(criterion=‘mse’, max_depth=2, max_features=None,
max_leaf_nodes=None, min_impurity_decrease=0.0,
min_impurity_split=None, min_samples_leaf=1,
min_samples_split=2, min_weight_fraction_leaf=0.0,
presort=False, random_state=None, splitter=‘best’)
参数含义:
树模型参数: tree.DecisionTreeRegressor( 参数 )
1.criterion = gini or entropy gini算法/熵
2.splitter = best or random 前者是在所有特征中找最好的切分点 后者是在部分特征中(数据量大的时候)
3.max_features = None(所有),log2,sqrt,N 特征小于50的时候一般使用所有的
4.max_depth = 数字 树深度 数据少或者特征少的时候可以不管这个值,如果模型样本量多,特征也多的情况下,可以尝试限制下
5.min_samples_split 如果某节点的样本数少于 min_samples_split,则不会继续再尝试选择最优特征来进行划分。 如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。
6.min_samples_leaf 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝,如果样本量不大,不需要管这个值,大些如10W可是尝试下5
7.min_weight_fraction_leaf 这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。
8.max_leaf_nodes 通过限制最大叶子节点数,可以防止过拟合,默认是"None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制具体的值可以通过交叉验证得到。
9.class_weight 指定样本各类别的的权重,主要是为了防止训练集某些类别的样本过多导致训练的决策树过于偏向这些类别。这里可以自己指定各个样本的权重如果使用“balanced”,则算法会自己计算权重,样本量少的类别所对应的样本权重会高。
10.min_impurity_split 这个值限制了决策树的增长,如果某节点的不纯度(基尼系数,信息增益,均方差,绝对差)小于这个阈值则该节点不再生成子节点。即为叶子节点 。
n_estimators:要建立树的个数
3)可视化显示
结果:
4)复杂一点的操作
4.1)评估一下决策树的效果:
结果 = 0.59900752384286116
4.2)为构造决策树的函数选择最好的参数
使用GridSearchCV
结果: