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

news2025/2/22 20:19:04

一、决策树

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()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI扩展手写数字识别应用(二)

理解代码 输入处理 在新应用的代码部分,和我们在手写数字识别课程介绍的代码比起来,差别最大的地方就在于如何处理输入。在上个案例中,我们只需要简单地将正方形区域中的图像格式调整一下,即可用作MNIST模型的输入。而在本文的案…

Angular系列教程之自定义指令

文章目录 前言指令的基本概念在模板中使用指令总结 前言 在Angular中,指令是一种非常强大的工具,用于扩展HTML元素的功能和行为。它们允许我们创建可重用的组件,并在应用程序中的多个地方使用它们。本文将介绍Angular指令的基础知识&#xf…

1 python计算机基础

计算机基础和环境搭建 1 计算机基础和环境搭建1.计算机基础1.1 基本概念1.2 编程语言1.3 编译器/解释器 2.学习编程的本质3.Python的介绍3.1 语言的分类3.2 Python3.3 Python的解释器种类(了解)3.4 CPython解释器的版本 4.环境搭建4.1 安装Python解释器4…

【Filament】材质系统

1 前言 本文主要介绍 Filament 的材质系统,官方介绍详见 → Filament Materials Guide。材质系统中会涉及到一些空间和变换的知识点,可以参考:【Unity3D】空间和变换、【Unity3D】Shader常量、变量、结构体、函数、【OpenGL ES】MVP矩阵变换、…

Flume 之自定义Sink

1、简介 前文我们介绍了 Flume 如何自定义 Source, 并进行案例演示,本文将接着前文,自定义Sink,在这篇文章中,将使用自定义 Source 和 自定义的 Sink 实现数据传输,让大家快速掌握Flume这门技术。 2、自定…

设计一个抽奖系统

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术🔥如果感觉博主的文章还不错的…

排序算法9----计数排序(C)

计数排序是一种非比较排序,不比较大小 。 1、思想 计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。 2、步骤 1、统计数据:统计每个数据出现了多少次。(建立一个count数组,范围从[MIN,MAX],MAX代表arr中…

韩愈和白居易,相交不相融的两位大伽

韩愈和白居易,一个百代文宗一个引领诗风,却关系平淡原因何在? 一位就是韩愈(768年-824年),一位是白居易(772年-846年),都是唐代各有建树的文学领…

2024年华数杯国际赛赛题浅析

21号完赛,28号出成绩的华数杯国际赛,作为美赛最合适的练手赛正式开赛。为了让大家更好地比赛,首先为大家带来本次竞赛两道题目的浅要解析。主要分析两道题目适合的群体,未来大家求解过程中可能遇到的问题。方便大家快速完成选题。…

【Proteus仿真】【Arduino单片机】汽车车窗除霜系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用LCD1602显示模块、光线传感器、DS18B20温度传感器、PCF8691 ADC模块、继电器加热模块等。 主要功能: 系统运行后,LCD…

微软Power Platform使用Power Automate Desktop flow桌面流爬取京东商品信息

微软Power Platform使用Power Automate Desktop flow桌面流爬取京东商品信息 目录 微软Power Platform使用Power Automate Desktop flow桌面流爬取京东商品信息1、创建一个桌面流应用Desktop flow2、启动新的浏览器,跳转到我们需要的URL中3、在文本框中填充文字并点…

Android Studio 如何设置中文

Android Studio 是一个为 Adndroid 平台开发程序的集成开发环境(IDE)。 如何安装中文插件 在 Jetbrains 家族的插件市场上,是能够搜到语言包插件的,正常情况下安装之后只需要重启即可享受中文界面,可AndroidStudio 中…

基于vue+Spring Boot家政服务人员预约系统iph9d

通过对家政服务管理内容的学习研究,进而设计并实现一个家政服务系统。系统能实现的主要功能应包括即时通讯、通讯回复、预约订单、接单信息、服务费用管、服务评价的一些操作。还有可以正确的为用户服务,准确显示当前信息[5]。 开发软件有很多种可以用&…

【链路层】点对点协议 PPP

目录 1、PPP协议的特点 2、PPP协议的组成和帧格式 3、PPP协议的工作状态 目前使用得最广泛的数据链路层协议是点对点协议PPP(Point-to-Point Protocol)。 1、PPP协议的特点 我们知道,互联网用户通常都要连接到某个 ISP 才能接入到互联网。PPP 协议就是用户计算机…

本地一键部署grafana+prometheus

本地k8s集群内一键部署grafanaprometheus 说明: 此一键部署grafanaPrometheus已包含: victoria-metrics 存储prometheus-servergrafanaprometheus-kube-state-metricsprometheus-node-exporterblackbox-exporter grafana内已导入基础的dashboard【7个…

2024年华数杯国际赛A题赛题

问题A:来自日本的放射性废水 背景 2011年3月,日本东海岸发生的地震引发了福岛第一核电站的事故。一场大规模海啸摧毁了该核电站的冷却系统,导致三个核反应堆熔毁,核燃料碎片熔化。为了冷却熔化的核燃料,海水不断地注入…

数据仓库面试题

1 思维导图&数仓常见面试题 2 题目 1. 数据仓库是什么? 数据仓库是一个面向主题的(订单、支付、退单等)、集成的(整合多个信息源的大量数据)、非易失的(一般不会进行删除和修改操作)且随时…

使用Java Stream API获取子部门的所有父级部门

使用Java Stream API获取子部门的所有父级部门 在数据库表中,经常会有包含层次结构的部门信息表。本博客将使用Java语言和Stream API演示如何获取给定子部门的所有父级部门,并在代码中加入详细注释。 1. 创建 Department 类 首先,我们需要定…

经典目标检测YOLO系列(二)YOLOV2的复现(1)总体网络架构及前向推理过程

经典目标检测YOLO系列(二)YOLOV2的复现(1)总体网络架构及前向推理过程 和之前实现的YOLOv1一样,根据《YOLO目标检测》(ISBN:9787115627094)一书,在不脱离YOLOv2的大部分核心理念的前提下,重构一款较新的YOLOv2检测器,来对YOLOV2有…

ADA-YOLO:YOLOv8+注意力+Adaptive Head,mAP提升3%

生物医学图像分析中的目标检测和定位至关重要,尤其是在血液学领域,检测和识别血细胞对于诊断和治疗决策至关重要。虽然基于注意力的方法在各个领域中目标检测方面取得了显著的进展,但由于医学影像数据集的独特挑战,其在医学目标检…