速通——决策树(泰坦尼克号乘客生存预测案例)

一、决策树

1、概述

        树中每个内部节点表示一个特征上的判断,每个分支代表一个判断结果的输出,每个叶子节点代表一种分类结果

2、建立过程

        1. 特征选择:选取有较强分类能力的特征。

        2. 决策树生成:根据选择的特征生成决策树。

        3. 决策树也易过拟合,采用剪枝的方法缓解过拟合

二、信息熵

1、概述:描述信息的 完整性 和 有序性

2、熵(Entropy)

        信息论中代表 随机变量 不确定度的度量;熵越大,数据的不确定性越高,信息就越多;熵越小,数据的不确定性越低

3、计算方法

        P(xi) :数据中类别出现的概率
​        H(x) :信息的信息熵值

三、信息增益

1、概述

        由于特征A而使得对数据D的 分类不确定性 减少的程度,特征 a 对训练数据集D的 信息增益 g(D,a),定义为集合D的熵 H(D) 与特征a给定条件下D的熵 H(D|a)之差(信息增益 = 熵 - 条件熵)

2、数学公式

3、条件熵

四、决策树分类

1、ID3 决策树

构建流程:

        1、计算每个特征的信息增益

        2、使用信息增益最大的特征将数据集 拆分为子集

        3、使用该特征(信息增益最大的特征)作为决策树的一个节点

        4、使用剩余特征对子集重复上述(1,2,3)过程

特点:倾向于选择取值较多的属性(不足),只能对离散属性的数据集构成决策树

2、C4.5 决策树

概述:信息增益率大的做为分裂特征,是在信息增益的基础上除以当前特征的固有值,可以衡量属性对分类的贡献

计算方法:        信息增益率 = 信息增益 / 特征熵

本质:相当于对信息增益进行修正,增加一个惩罚系数;特征取值个数较多时,惩罚系数较小;特征取值个数较少时,惩罚系数较大。

惩罚系数:数据集D 以 特征a 作为随机变量的熵的倒数

特点:1. 缓解了ID3分支过程中总喜欢偏向选择值较多的属性;

           2. 可处理连续数值型属性,也增加了对缺失值的处理方法;

           3. 只适合于能够驻留于内存的数据集,大数据集无能为力

3、CART决策树(Classification and Regression Tree)

概述:是一种决策树模型,既可以用于分类,也可以用于回归。Cart回归树 使用平方误差 最小化策略,Cart分类生成树 采用的基尼指数 最小化策略。

特点:1. 可以进行分类和回归,可处理离散属性,也可以处理连续属性

           2. 采用基尼指数,计算量减小

           3. 一定是二叉树

CART分类树

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

计算方法:Gini(D)= 1 - 特征分类1^2 - 特征分类2^2

基尼指数 Gini_index(D):选择使划分后基尼系数最小的属性作为最优 化分属性。

Tips:特征的信息增益(ID3)、信息增益率值越大(C4.5),优先选择该特征。基尼指数值越小(cart),优先选择该特征。

API

导包:from sklearn.tree import DecisionTreeClassifier

class sklearn.tree.DecisionTreeClassifier (criterion = 'gini ', max_depth = None,random_state = None)

# 导包
from sklearn.tree import DecisionTreeClassifier

class sklearn.tree.DecisionTreeClassifier (criterion = 'gini ', max_depth = None, random_state = None)

Criterion: 特征选择标准,"gini" 或 "entropy",前者代表基尼系数,后者代表信息增益。默认"gini",即CART算法

min_samples_split:内部节点再划分所需最小样本数,默认为 2
min_samples_leaf:叶子节点最少样本数,默认为 1
max_depth:决策树最大深度

CART回归树

        可以处理 非线性关系

平方损失:(值 - 均值)^2

构建过程

        1、选择一个特征,将该特征的值进行排序,取相邻点计算均值作为待划分点

        2、根据所有划分点,将数据集分成两部分:R1、R2

        3、R1 和 R2 两部分的平方损失相加作为该切分点平方损失

        4、取最小的平方损失的划分点,作为当前特征的划分点

        5、以此计算其他特征的最优划分点、以及该划分点对应的损失值

        6、在所有的特征的划分点中,选择出最小平方损失的划分点,作为当前树的分裂点

CART回归树 与 CART分类树 的不同

        1、CART 分类树预测输出的是一个离散值,CART 回归树预测输出的是一个连续值;

        2、CART 分类树使用基尼指数作为划分、构建树的依据,CART 回归树使用平方损失;

        3、分类树使用叶子节点多数类别作为预测类别,回归树则采用叶子节点里均值作为预测输出

五、决策树剪枝(正则化)

概述:是一种防止决策树过拟合的一种正则化方法,提高其泛化能力;即把子树的节点全部删掉,使用叶子节点来替换

剪枝方法

        1、预剪枝:指在决策树生成过程中,对每个节点在划分前先进行估计,若当前节点的划分不能带来决策树泛化性能提升,则停止划分并将当前节点标记为叶节点

优点:预剪枝使决策树的很多分支没有展开,不单降低了过拟合风险,还显著减少了决策树的训练、测试时间开销;

缺点:有些分支的当前划分虽不能提升泛化性能,但后续划分却有可能导致性能的显著提高,预剪枝决策树也带来了欠拟合的风险。

        2、后剪枝:是先从训练集生成一棵完整的决策树,然后自底向上地对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来决策树泛化性能提升,则将该子树替换为叶节点。

优点:后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝

缺点:训练时间开销 比 未剪枝的决策树 和 预剪枝的决策树都要大得多

六、案例——泰坦尼克号乘客生存预测

数据情况:数据集中的特征包括票的类别,是否存活,乘坐班次,年龄,登陆,home.dest,房间和性别等,乘坐班次是(1,2,3),是社会经济阶层的代表,age数据存在缺失。

1、导包

import pandas as pd
# 数据划分
from sklearn.model_selection import train_test_split
# 决策树
from sklearn.tree import DecisionTreeClassifier
# 分类算法
from sklearn.metrics import classification_report
# 可视化
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree

2、导入数据

titanic_df  = pd.read_csv('titanic/train.csv')
# Pclass 船舱等级  Sibsp 同行兄弟姐妹人数 Parch 同行的父母孩子的人数 
# Ticket 票号 
# Fare 花了多少钱
# Cabin 船舱编号
# Embarked 登船的港口名称
titanic_df

3、数据处理

# 总计空值数量
titanic_df.isnull().sum()

# 年龄进行缺失值填充
X['Age'].fillna(X['Age'].mean(),inplace = True)

# 性别编码
X = pd.get_dummies(X)

4、数据划分、训练、使用、评估模型

# 划分训练集、测试集
X_train, X_test, y_train, y_test = train_test_split(X,y,stratify=y,random_state=66)
# 设置决策树模型
estimator = DecisionTreeClassifier(max_depth=6)
# 训练模型
estimator.fit(X_train,y_train)
# 模型预测
y_pred = estimator.predict(X_test)
# 评估模型
print('训练集',estimator.score(X_train, y_train))
print('测试集',estimator.score(X_test, y_test))

 5、可视化

plt.figure(figsize=(30,20))
plot_tree(estimator,
          max_depth=6,    # max_depth 绘制的最大深度
          filled=True,    # filled = True 填充每个节点的背景颜色
          feature_names=X.columns,    # feature_names 特征名字 每个节点中显示的特征名字
          class_names=['died', 'survived'])    # class_names  目标值名字    每个节点中显示的目标值名字
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/328633.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

下一代 Vue3 Devtools 正式开源

什么是 Vue DevTools Vue DevTools 是一个旨在增强 Vue 开发人员体验的工具,它提供了一些功能来帮助开发者更好地了解 Vue 应用程序。 Vue DevTools:Unleash Vue Developer Experience. Enhance your Vue development journey with an amazing experience! 典型的功能特征包…

6.3.3分离音频和视频

6.3.3分离音频和视频 Camtasia4有一个很实用的功能,那就是能够把视频片段中的视频和音频分离开来,这在多媒体作品创作中非常有用。 1.启动Camtasia音频编辑器。 2.选择【文件】|【打开】命令,在弹出的“打开文件”对…

法国追梦 SAM5504/5704/5716/5808 芯片/开发板/方案 详细资料

追梦音频DSP芯片:可用于电子鼓、电子琴、电吉他、效果器、均衡器、啸叫抑制器等电声产品领域 一.系列芯片:SAM2695 SAM5708B SAM5704B SAM5504B SAM5808B SAM5716B SAM5916B 二.开发套件 1.开发板/评估板:2695-EK,5504-EK&#…

Kali Linux保姆级教程|零基础从入门到精通,看完这一篇就够了!(附工具包)

作为一名从事网络安全的技术人员,不懂Kali Linux的话,连脚本小子都算不上。 Kali Linux预装了数百种享誉盛名的渗透工具,使你可以更轻松地测试、破解以及进行与数字取证相关的任何其他工作。 今天给大家分享一套Kali Linux资料合集&#xf…

考研机试题收获——高精度进制转换

代码的第一遍真的很重要,在第一次打的时候尽量把问题思考全面,不要漏打少打,尽量不要留bug给之后de。 一、基础方面 一、处理输出的结束问题 scanf和cin默认都不会读取空格 ①scanf():如果从文件中读取数据,当scanf()…

计算机三级(网络技术)——应用题

第一题 61.输出端口S0 (直接连接) RG的输出端口S0与RE的S1接口直接相连构成一个互联网段 对172.0.147.194和172.0.147.193 进行聚合 前三段相同,将第四段分别转换成二进制 11000001 11000010 前6位相同,加上前面三段 共30…

Vue3 + Electron框架读取程序外部配置文件

网上找了一堆都不行,根据这个步骤来肯定能用 1. 在项目下新建一个config.json文件 2. json文件中写入一些配置 3. vue.config.js中配置打包时把config.json文件copy到应用目录下 pluginOptions:{electronBuilder:{nodeIntegration:true,builderOptions: {extraReso…

VUE好看的个人博客源码

文章目录 1.设计来源1.1 首页界面1.2 我的日记界面1.3 我的文章界面1.3.1 文章列表1.3.2 文章时间轴1.3.3 文章详细 1.4 我的相册界面1.5 我的源码界面1.6 认识我界面 2.效果和源码2.1 动态效果2.2 源码目录结构 源码下载 作者:xcLeigh 文章地址:https:/…

在 Windows 11 上通过 Autoawq 启动 Mixtral 8*7B 大语言模型

在 Windows 11 上通过 Autoawq 启动 Mixtral 8*7B 大语言模型 0. 背景1. 安装依赖2. 开发 main.py3. 运行 main.py 0. 背景 看了一些文章之后,今天尝试在 Windows 11 上通过 Autoawq 启动 Mixtral 8*7B 大语言模型。 1. 安装依赖 pip install torch torchvision …

【Git】任何位置查看git日志

需求 现需要查看指定项目中的某个文件的 Git 日志。如有 项目代码 jflowable ,需要查看其下文件 D:\z_workspace\jflowable\src\main\java\com\xzbd\jflowable\controller\TestController.java 的日志。 分析 一般的思路是,进入 jflowable 项目&#…

bledner快捷键记录

shiftc游标归到世界的中心 shifta快速添加物体 x键删除物体 r旋转物体 s是放大放小 ~查看视图 工作区:添加材质节点的 鼠标的滚轮:是旋转视图 按住 滚轮中键shift 平移视图 g键 移动 调整的时候按住shift鼠标拖动 这个时候可以比较精细的调整物体的大小…

专业140+总410+哈尔滨工业大学803信号与系统和数字逻辑电路考研经验哈工大电子信息(信息与通信工程-信通)

一年的努力付出终于有了收获,今年专业课140,总分410顺利上岸哈工大803电子信息(信息与通信-信通),回顾总结了自己这一年的复习,有得有失,希望对大家复习有所帮助。 数学 时间安排:…

为什么需要在 OpenShift 上部署企业级 Ingress Controller

原文作者:Max Mortillaro of GigaOm 原文链接:为什么需要在 OpenShift 上部署企业级 Ingress Controller 转载来源:NGINX 中文官网 NGINX 唯一中文官方社区 ,尽在 nginx.org.cn Red Hat OpenShift 作为业界备受推崇的 Kubernetes…

支持AUTOSAR Classic以及Adaptive平台的DEXT诊断数据库

一 DEXT、DCM、DEM和FIM的概述 DEXT(Diagnostic Extract Template)是AUTOSAR定义的诊断提取模板,用于DCM(Diagnostics Communication Manager)、DEM(Diagnostics Event Manager)和FIM&#xff…

Camunda入门教程

Camunda7 流程引擎 1.什么是流程引擎 流程引擎是一种软件工具,可以用来自动执行和管理业务流程。它以可视化的流程图作为工作流程的基础,根据可视化流程图中定义的活动、任务和角色来执行和管理活动任务。 2.流程引擎功能 一.可视化:流程…

.Net Core项目在linux部署实战 1.sdk下载 2.环境变量配置/ect/profile 3.运行

1)下载.net core sdk https://download.visualstudio.microsoft.com/download/pr/01292c7c-a1ec-4957-90fc-3f6a2a1e5edc/025e84c4d9bd4aeb003d4f07b42e9159/dotnet-sdk-6.0.418-linux-x64.tar.gz 2)配置下环境变量 step1: // 解压到指定目录 mkdir -p $HOME/dotnet &…

Linux命令之pwd,cd,ls,cat,more,less,head,tail文件目录类命令的使用

一、实验题 1、在桌面打开终端,查看当前目录 2、改变目录位置至当前目录的父目录 3、改变目录位置至用户的家目录 4、利用绝对路径改变目录到/usr/local目录下 5、列出当前目录下的文件及目录 6、列出包括以“.”开始的隐藏文件在内的所有文件 7、列出当前目录下所…

网络原理--http

目录 一、 DNS(应用层协议) 1、域名概念 2、维护ip地址和域名之间的映射(域名解析系统) 3、DNS系统(服务器) 4、如何解决DNS服务器高并发问题 二、HTTP(应用层协议) 1、htt…

postman 简单测试(二)

接着上一节 https://blog.csdn.net/myy2012/article/details/135616719 1.Tests的简单使用(后置处理器) 具体的截图是每一步操作后得来的,记录方便自己以后查阅,也希望能帮助到有缘人。 1.1 把返回值存入到环境变量中&#xff…

Vue:将以往的JQ页面,重构成Vue组件页面(组件化编码大致流程)

一、实现静态组件 组件要按照功能点拆分,命名不要与HTML元素冲突。 1、根据UI提供的原型图,进行结构设计,结构设计的粒度以是否方便给组件起名字为依据。并梳理好对应组件的层级依赖关系。 2、设计好结构后,开始写对应的组件&am…