人工智能学习7(决策树算法)

yyuanse 2024-06-18 12:31:01 阅读 80

编译工具:PyCharm

文章目录

编译工具:PyCharm 决策树算法信息熵信息熵例题计算: 信息增益(决策树划分依据之一ID3)信息增益例题计算: 信息增益率(决策树划分依据之一C4.5)基尼值和基尼指数(决策树划分依据之一CART)多变量决策树:OC1 剪枝决策树算法api案例:泰坦尼克号存活预测

决策树算法

决策树:是一种树形结构,其中每个内部节点表四一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点表示一种分类结果,本质是一颗由多个判断节点组成的树。

信息熵

“信息熵”时度量原本集合程度最常用的一种指标。

1.当系统的有序状态一致时,数据越集中的地方熵值越小,数据越分散的地方熵值越大

2.当数据量一致时,系统越有序熵值越低;系统越混乱/分散熵值越高

在这里插入图片描述

信息熵例题计算:

在这里插入图片描述

信息增益(决策树划分依据之一ID3)

信息增益:以某特征划分数据集前后的熵的差值。可以表示原本集合的不确定性熵越大,原本的不确定性就越大。因此可以使用划分前后集合熵的差值来衡量使用当前特征对于样本集合D划分效果的好坏。

在这里插入图片描述

信息增益例题计算:

在这里插入图片描述

整体流失的信息熵:

在这里插入图片描述

条件信息熵:

在这里插入图片描述

信息增益计算:

在这里插入图片描述

同样,求解活跃度的信息增益:

在这里插入图片描述

信息增益率(决策树划分依据之一C4.5)

信息增益准则对可取值数目较多的属性有所偏好,如在信息增益案例题中,我们计算时忽略了第一列即编号列,实际上信息增益会偏向选择第一列(类别有15种)、第三列(类别有3种)…。但是显然第一列没有计算的必要。

为了减少这种偏好可能带来的不利影响,C4.5决策树算法不直接使用信息增益,而是使用**“增益率”选择最优划分属性**。

增益率信息增益(D,a) / 属性a的"固有值"

在这里插入图片描述

信息增益的案例进行增益率的计算:

在这里插入图片描述

https://www.bilibili.com/video/BV1pf4y1y7kw/?p=106&spm_id_from=pageDriver&vd_source=3918c4e379f5f99c5ae95581d2cc8cec

基尼值和基尼指数(决策树划分依据之一CART)

基尼值Gini(D):从数据集D中随机抽取两个样本,器类别标记不一致的概率。所以Gini(D)值越小,数据集D的纯度越高

基尼值:

在这里插入图片描述

基尼指数:

在这里插入图片描述

多变量决策树:OC1

ID3、C4.5、CART在特征选择的时候都是选择一个最优的特征来分类决策,但是不应该只由某一个特征进行决定,应该由一组特征决定,OC1就是这样的。

剪枝

剪枝时决策树学习算法中对付“过拟合”的主要手段。

剪枝分为预剪枝和后剪枝

决策树算法api案例:泰坦尼克号存活预测

数据集:https://hbiostat.org/data/repo/titanic.txt

# 决策树算法apiimport pandas as pdimport numpy as npfrom sklearn.model_selection import train_test_split # 进行数据集划分from sklearn.feature_extraction import DictVectorizerfrom sklearn.tree import DecisionTreeClassifier# 读取数据# titan = pd.read_csv("https://hbiostat.org/data/repo/titanic.txt")titan = pd.read_csv("./data/titanic.csv")print(titan.describe())# 获取样本和目标值# 这里取pclass社会等级、age年龄、sex性别作为特征值# 取survived存活为目标值x = titan[["pclass","age","sex"]]y = titan["survived"]# 缺失值处理:对age为空的用平均值替换x['age'].fillna(value=titan["age"].mean(),inplace=True)print(x.head())# 数据集划分x_train,x_test,y_train,y_test = train_test_split(x,y,random_state=22,test_size=0.2)# 特征抽取(字典特征提取)x_train = x_train.to_dict(orient="records")x_test = x_test.to_dict(orient="records")tranfer = DictVectorizer()x_train = tranfer.fit_transform(x_train)x_test = tranfer.fit_transform(x_test)# 模型训练(决策树)# 在实例化的时候可以添加 max_depth 来提高评估效率scoreestimator = DecisionTreeClassifier()estimator.fit(x_train,y_train)# 模型评估y_pre = estimator.predict(x_test)print(y_pre)print(estimator.score(x_test,y_test))# 决策树可视化

在这里插入图片描述

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。