机器学习四——决策树(自己学习与理解知识点梳理)

比特化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
假设变量有N个,每个用2个比特位表示,那么一个就要用2N个比特位来表示N个变量。这里的2是如何计算来的。是因为第一个图中说是等概率的,有四种变量,每种出现的概率就是1/4.所以21/4+21/4+21/4+21/4=2。
在下面的图中,A出现的概率比较大,D出现的概率比较小,所以A用短的序列表示,D用长的序列表示。所以下图平均每个变量是用1.75个比特位。
这里用几个比特位表示,其实是和概率有关系的。-log2(概率)

信息熵

在这里插入图片描述
信息量是指一个事件蕴含的信息,当这个事件的可能性越大的时候,代表信息量越低。
信息熵就是来描述系统的不确定度。一个系统越混论,信息熵就越高,反之越低。一个系统信息量的累加就是信息熵。一个系统的事件发生的概率越平均,信息熵就越高。

条件熵

在这里插入图片描述
用概率做权重处理,乘以给定条件后的信息熵熵再做累加,得到的就是条件熵。换句话说就是选定x之后,各种x对应Y的信息熵的平均值就是条件熵。

决策树的构建

在这里插入图片描述
目的:最优模型就是构建完成后的叶子节点只有一个类别的数据。利用贪婪思想,每次构建子节点的时候让节点中的数据尽可能的只包含一个种类的数据,让节点尽可能的纯。

  • 将所有特征看成一个个节点
  • 遍历特征,找到划分的最纯的特征最为分割节点
  • 重复上面操作,直至达到要求的纯度

特征属性分割
属性为离散且不要求是二叉树的时候,一个属性就是一个分支
属性为离散且要求为二叉树时候,划分为属于此子集和不属于此子集进行划分
属性为连续值的时候可以找一个分割点,大于小于分割点来切割

决策树纯度的量化在这里插入图片描述
量化纯度的选择有熵,错误率和Gain,一般使用熵公式作为量化纯度。熵越小的代表划分后越纯。H(D)是一个定值,所以Gain(信息增益度)越大的就会优先选择。

决策树停止构建的条件

  • 每个子节点中只有一个样本了会停止
  • 当达到迭代次数或者节点中样本数小于给定的阈值时停止构建

但是第一种容易造成过拟合,所以一般使用第二种

损失函数

在这里插入图片描述
H(t) 代表叶子节点的纯度,我们希望这个纯度越小越好
Dt 代表这个叶子中的样本数
D 代表整个样本数。做了一个加权处理

ID3、C4.5、CART(分类回归数)
ID3:使用信息熵以及信息增益度来构建。只能支持离散的特征属性,不支持连续的特征属性。构建的时多叉树,每个属性一个分支。但是ID3 往往比较依赖属性值多的特征,但是属性值多的特征不一定是最优的。只适合小数据集,因为要把数据放到内存中。抗噪性差,训练容易陷入过拟合。
在这里插入图片描述
C4.5:用信息增益率代替了信息增益度。可以理解为,信息增益度除以信息熵为信息增益率(特征属性越多的信息熵越多),这样就可以减缓对特征属性多的特征的依赖。在构建过程中会进行剪枝,而且支持对连续值进行操作。因为需要多次计算信息熵所以效率不高,同样也只适用于小数据集,加载到内存。
在这里插入图片描述
CART(分类回归树):量化纯度选用基尼系数不是信息熵(如果是回归树选用mse)。使用基尼增益率作为属性选择的标准。并且一定构建的时二叉树。

代码

# 4. 决策树算法模型的构建
"""
# 给定采用gini还是entropy作为纯度的衡量指标
criterion="gini", 
# 进行划分特征选择的时候采用什么方式来选择,best表示每次选择的划分特征都是全局最优的(所有特征属性中的最优划分);random表示每次选择的划分特征不是所有特征属性中的最优特征,而且先从所有特征中随机的抽取出部分特征属性,然后在这个部分特征属性中选择最优的,也就是random选择的是局部最优。
# best每次都选择最优的划分特征,但是这个最优划分特征其实是在训练集数据上的这一个最优划分。但是这个最优在实际的数据中有可能该属性就不是最优的啦,所以容易陷入过拟合的情况 --> 如果存在过拟合,可以考虑使用random的方式来选择。
splitter="best", 
# 指定构建的决策树允许的最高层次是多少,默认不限制
max_depth=None,
# 指定进行数据划分的时候,当前节点中包含的数据至少要去的数据量
min_samples_split=2,
#划分后节点最少的样本数
min_samples_leaf=1,
min_weight_fraction_leaf=0.,
# 在random的划分过程中,给定每次选择局部最优划分特征的时候,使用多少个特征属性
max_features=None,
random_state=None,
max_leaf_nodes=None,#最多可以包含的叶子节点数
min_impurity_split=1e-7,# 分裂前后的基尼增益率差值
class_weight=None,#分配不同类别的样本权重
presort=False
min_impurity_split=None, -> 分裂节点的纯度必须要大于这个值才进行分裂

"""
algo = DecisionTreeClassifier(criterion="gini")

决策树可视化

方法一
在这里插入图片描述

pred_train = algo.predict(x_train)
pred_test = algo.predict(x_test)
# # 6.模型效果评估 (分类 回归 聚类)
print("训练集上的准确率:{}".format(algo.score(x_train,y_train)))
print("测试集上的准确率:{}".format(algo.score(x_test,y_test)))
print("训练集上的准确率:{}".format(accuracy_score(y_train,pred_train)))
print("测试集上的准确率:{}".format(accuracy_score(y_test,pred_test)))
print("训练集上的混淆矩阵:\n{}".format(confusion_matrix(y_train,pred_train)))
print("测试集上的混淆矩阵:\n{}".format(confusion_matrix(y_test,pred_test)))

# 打印各个特征的重要性
print("各个特征的重要性(值越大,对应的特征越重要):",algo.feature_importances_)

# 返回特征的数量
print("返回训练模型的特征数量:",algo.max_features_)

# 返回模型的系数
print("模型的系数:", algo.get_params())




# 7.模型可视化

# 方式一
# a.将决策树的内部结构输出为dot文件,
# b.然后使用graphviz将dot文件转化为图标的形式 dot -Tpdf iris.dot -o iris.pdf
# dot -Tpng iris.dot -o iris.png


from sklearn import tree

with open("iris.dot","w") as writer:
    tree.export_graphviz(decision_tree=algo,out_file=writer)



# 方式二
# a. 输出决策树的内部结构文件 但是不保存在本地 保存在一个对象中


from sklearn import tree
import pydotplus

# 创建一个dot 文件对象
dot_data = tree.export_graphviz(decision_tree=algo, out_file=None,
                                feature_names=["A","B","C","D"],
                                class_names=["Iris-setosa","Iris-virginica","Iris-versicolor"],rounded=True,filled=True,special_characters=True)

# b. 直接使用pydotplus将dot对象转化为 pdf 或者 png的格式

graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_png("iris0.png")
graph.write_pdf("iris0.pdf")

方法二
在这里插入图片描述

剪枝

剪枝优化

前置剪枝:在构建决策树的过程中提前停止,防止过拟合,用参数进行调整。在单个模型中效果不好,在集成学习中应用效果好很多

在这里插入图片描述
后置剪枝:在构建过程中不限制,构建完成再进行剪枝。一种是直接用一个叶子节点代替子树,子树的主要分类作为叶子节点的分类。第二种直接用一个子树代替前面的子树
后置剪枝会逐步剪枝,迭代出所有可能剪枝的树(以后再补充以及决策树的损失函数和剪枝系数)
随机森林
在后面写继承学习中再补充

分类树和回归树的区别

在这里插入图片描述
在这里插入图片描述
因为回归树最终结果和叶子节点的个数相关是分段的,一般不做回归树

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值