首页 > 其他分享 >抛开线性回归模型,基于树模型来尝试构建回归模型,可视化绘制树状层级结构

抛开线性回归模型,基于树模型来尝试构建回归模型,可视化绘制树状层级结构

时间:2024-09-24 16:21:14浏览次数:12  
标签:dtreeviz 模型 树状 可视化 线性 回归 决策树

一提到回归,可能很多人第一时间脑海里想到的就是线性回归模型,的确,线性回归器可以说是非常常用的模型了。线性回归模型广泛应用于各种领域,如经济学、金融学、社会科学、工程学等。它可以用于预测、因果分析、趋势分析等。线性回归模型是一种广泛应用于统计学和机器学习中的预测模型,它用于描述一个或多个自变量(特征)与因变量(目标变量)之间的线性关系。线性回归模型的目标是找到一条直线(在简单线性回归中)或一个超平面(在多元线性回归中),使得该直线或超平面能够最好地拟合数据点,从而进行预测。

1. 简单线性回归

简单线性回归是线性回归的最基本形式,它只涉及一个自变量和一个因变量。其数学模型可以表示为:

y=β0+β1x+ϵy=β0​+β1​x+ϵ

其中:

  • yy 是因变量(目标变量)。

  • xx 是自变量(特征)。

  • β0β0​ 是截距(intercept),表示当 x=0x=0 时 yy 的值。

  • β1β1​ 是斜率(slope),表示 xx 每增加一个单位, yy 的变化量。

  • ϵϵ 是误差项,表示模型无法解释的随机误差。

简单线性回归的目标是通过最小化误差项的平方和(即最小二乘法)来估计 β0β0​ 和 β1β1​。

2. 多元线性回归

多元线性回归是简单线性回归的扩展,它涉及多个自变量。其数学模型可以表示为:

y=β0+β1x1+β2x2+⋯+βpxp+ϵy=β0​+β1​x1​+β2​x2​+⋯+βp​xp​+ϵ

其中:

  • yy 是因变量(目标变量)。

  • x1,x2,…,xpx1​,x2​,…,xp​ 是 pp 个自变量(特征)。

  • β0β0​ 是截距(intercept)。

  • β1,β2,…,βpβ1​,β2​,…,βp​ 是各自变量的系数,表示各自变量对因变量的影响。

  • ϵϵ 是误差项。

多元线性回归的目标同样是通过最小化误差项的平方和来估计 β0,β1,β2,…,βpβ0​,β1​,β2​,…,βp​。

3. 模型假设

线性回归模型基于以下几个关键假设:

  1. 线性关系:自变量和因变量之间存在线性关系。

  2. 独立性:误差项之间相互独立。

  3. 同方差性:误差项的方差在所有自变量取值处是恒定的(即方差齐性)。

  4. 正态性:误差项服从正态分布。

4. 模型评估

线性回归模型的性能通常通过以下几个指标进行评估:

  • R²(决定系数):表示模型解释的方差占总方差的比例,取值范围为0到1,越接近1表示模型拟合效果越好。

  • 均方误差(MSE):表示预测值与实际值之间差异的平方的平均值,越小表示模型拟合效果越好。

  • 均方根误差(RMSE):MSE的平方根,与因变量的单位相同,便于解释。

  • 调整R²:在多元线性回归中,考虑到自变量数量的增加,调整R²对模型的复杂度进行了惩罚。

这里结合最近实际开发项目的需要,我们想要抛开传统经典的线性回归器,基于树模型来开发构建回归模型,决策树(Decision Tree)是一种常用的机器学习模型,特别适用于分类和回归任务。它通过树状结构来表示决策规则,从根节点到叶节点的每一条路径都对应一个决策序列。决策树模型易于理解和解释,能够处理数值型和类别型数据,并且在特征选择和模型解释方面具有优势。

1. 决策树的结构

决策树由以下几种类型的节点组成:

  • 根节点:树的起点,包含所有数据样本。

  • 内部节点:表示一个特征或属性,每个内部节点都有一个分裂规则,用于将数据分成不同的子集。

  • 叶节点:表示最终的决策或预测结果。

  • 分支:连接节点之间的路径,表示决策规则。

2. 决策树的构建过程

构建决策树的过程通常包括以下几个步骤:

2.1 选择最佳分裂特征

在每个内部节点,选择一个特征进行分裂,使得分裂后的子节点尽可能“纯”(即子节点中的样本尽可能属于同一类别或具有相似的数值)。常用的分裂准则包括:

  • 信息增益(Information Gain):用于分类问题,基于信息熵的减少量。

  • 基尼不纯度(Gini Impurity):用于分类问题,衡量一个数据集的混乱程度。

  • 均方误差(MSE):用于回归问题,衡量预测值与实际值之间的差异。

2.2 递归分裂

选择最佳分裂特征后,将数据集分成多个子集,并在每个子集上递归地重复上述过程,直到满足停止条件。常见的停止条件包括:

  • 达到预设的最大深度。

  • 节点中的样本数小于预设的最小样本数。

  • 节点中的样本属于同一类别(对于分类问题)或具有相似的数值(对于回归问题)。

2.3 剪枝

为了避免过拟合,决策树通常需要进行剪枝(Pruning)。剪枝可以通过以下两种方式进行:

  • 预剪枝:在树的构建过程中,提前停止分裂。

  • 后剪枝:在树构建完成后,移除一些子树,以减少模型的复杂度。

3. 决策树的优缺点

3.1 优点
  • 易于理解和解释:决策树的结构直观,易于解释和可视化。

  • 能够处理数值型和类别型数据:决策树可以处理不同类型的特征。

  • 不需要特征缩放:决策树不受特征缩放的影响。

  • 能够处理缺失值:决策树可以处理特征中的缺失值。

3.2 缺点
  • 容易过拟合:决策树容易生成过于复杂的模型,导致过拟合。

  • 不稳定:数据的小变化可能导致生成完全不同的树。

  • 偏向于多值特征:决策树倾向于选择具有更多值的特征进行分裂。

借助于sklearn我们可以非常快地落地实现,实例实现如下所示:

import os
import pandas as pd
from sklearn import tree
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split


# 加载数据集
df = pd.read_csv("data.csv").select_dtypes(include=["int64", "float64"])
df.dropna(axis=1, inplace=True)


# 分离特征数据和标签
X = df.drop("label", axis=1)
y = df["label"]


# 随机划分数据集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)


# 模型初始化
tree_model = DecisionTreeRegressor(max_depth=3)


# 拟合计算
tree_model.fit(X_train, y_train)


# 树状结构绘制
plt.figure(figsize=(20, 10))
tree.plot_tree(
    tree_model,
    feature_names=X.columns,
    filled=True,
    impurity=False,
    rounded=True,
    precision=2,
    fontsize=12,
)


# 可视化
plt.show()

结果如下所示:

树中的每个节点都包含一个特征和一个阈值。指向左侧的箭头表示满足条件的数据点(例如,总体质量<=7.5),而指向右侧的箭头表示不满足条件的数据点(例如,总体质量>7.5)。
后续分割进一步分割数据以细化预测,每次分割的目的是减少MSE。可视化中的分支按颜色从白色到较深的阴影进行编码,以指示每个节点处的预测值。较浅的颜色表示较低的预测值,而较深的阴影表示较高的预测值。这种颜色梯度有助于在视觉上区分整个树的预测分布。

上面我们使用matplotlib和内置的sklearn.Tree.plot_tree方法实现了树状层级结构的可视化

接下来我们想要进一步基于专有的可视化模块dtreeviz来实现更加细腻的可视化展示。

dtreeviz 是一个用于可视化决策树模型的 Python 库,它能够帮助用户更直观地理解决策树的结构和决策过程。通过 dtreeviz,用户可以生成各种类型的图表,包括树状图、特征重要性图、单个样本的决策路径图等。这些图表有助于解释模型的决策逻辑,提高模型的可解释性。

1. 安装

dtreeviz 可以通过 pip 安装:

pip install dtreeviz

2. 主要功能

dtreeviz 提供了多种可视化功能,以下是一些主要的功能:

2.1 决策树可视化

dtreeviz 可以生成决策树的树状图,展示树的结构和每个节点的分裂规则。这对于理解模型的决策过程非常有帮助。

from dtreeviz.trees import dtreeviz
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier

# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target

# 训练决策树模型
clf = DecisionTreeClassifier(max_depth=3)
clf.fit(X, y)

# 可视化决策树
viz = dtreeviz(clf,
               X_train=X,
               y_train=y,
               target_name='species',
               feature_names=iris.feature_names,
               class_names=list(iris.target_names))

viz.view()
2.2 特征重要性可视化

dtreeviz 可以生成特征重要性图,展示每个特征对模型决策的贡献程度。

from dtreeviz.trees import tree_feature_importance

# 可视化特征重要性
tree_feature_importance(clf, iris.feature_names)
2.3 单个样本的决策路径可视化

dtreeviz 可以生成单个样本的决策路径图,展示该样本在决策树中的具体路径和每个节点的决策规则。

from dtreeviz.trees import dtreeviz

# 选择一个样本
sample = X[0]

# 可视化单个样本的决策路径
viz = dtreeviz(clf,
               X_train=X,
               y_train=y,
               target_name='species',
               feature_names=iris.feature_names,
               class_names=list(iris.target_names),
               X=sample)

viz.view()
2.4 回归树可视化

dtreeviz 也支持回归树的可视化,展示回归树的结构和每个节点的预测值。

from sklearn.datasets import load_boston
from sklearn.tree import DecisionTreeRegressor

# 加载数据集
boston = load_boston()
X = boston.data
y = boston.target

# 训练回归树模型
reg = DecisionTreeRegressor(max_depth=3)
reg.fit(X, y)

# 可视化回归树
viz = dtreeviz(reg,
               X_train=X,
               y_train=y,
               target_name='price',
               feature_names=boston.feature_names)

viz.view()

3. 自定义可视化

dtreeviz 提供了丰富的参数选项,用户可以根据需要自定义可视化的样式和内容。例如,可以调整树的深度、节点的大小、颜色等。

viz = dtreeviz(clf,
               X_train=X,
               y_train=y,
               target_name='species',
               feature_names=iris.feature_names,
               class_names=list(iris.target_names),
               scale=1.5,  # 调整树的大小
               colors={'classes': ['#FF0000', '#00FF00', '#0000FF']})  # 自定义颜色

viz.view()

dtreeviz 是一个强大的工具,能够帮助用户直观地理解决策树模型的结构和决策过程。通过生成各种类型的图表,dtreeviz 提高了模型的可解释性,使得用户能够更好地理解和解释模型的决策逻辑。无论是分类树还是回归树,dtreeviz 都提供了丰富的可视化功能,并且支持自定义选项,满足不同用户的需求。

基于此我们可以使用dtreeviz模块来实现上述模型的可视化,实例实现如下:

# 随机划分数据集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)


# 模型初始化
tree_model = DecisionTreeRegressor(max_depth=3)


# 拟合计算
tree_model.fit(X_train.values, y_train)


# dtreeviz可视化
viz = dtreeviz.model(
    tree_model,
    X_train,
    y_train,
    target_name="label",
    feature_names=X_train.columns.tolist(),
)


# 可视化
v = viz.view()
v.show()

可视化结果如下:

每个节点的散点图有助于我们了解每个分割的特征分布和影响,这对于理解复杂分割和不同特征的重要性特别有用。树在与我们第一次看到的相同的规则和决策边界上分裂,得到相同的结论。然而,dtreeviz使得随着树的加深,可以更容易地可视化同质或聚集的数据,从而更清楚地了解数据点如何基于拆分进行分组。

树回归模型(如决策树回归、随机森林回归、梯度提升树回归等)相较于线性回归模型具有一些显著的优势,这些优势使得树回归模型在某些情况下更为适用:

1. 处理非线性关系

线性回归模型假设自变量和因变量之间存在线性关系,而树回归模型能够自然地处理非线性关系。树回归模型通过递归地将数据分割成不同的子集,并在每个子集上进行预测,从而捕捉到复杂的非线性模式。

2. 处理多维特征

树回归模型能够处理多维特征,并且不需要对特征进行预处理(如标准化或归一化)。线性回归模型在处理多维特征时,通常需要对特征进行缩放,以避免某些特征对模型的影响过大。

3. 特征选择

树回归模型在构建过程中会自动进行特征选择,选择对目标变量影响最大的特征进行分裂。这使得树回归模型在处理高维数据时具有优势,能够识别出重要的特征,减少模型的复杂度。

4. 处理缺失值

树回归模型能够自然地处理特征中的缺失值,不需要对缺失值进行填充或删除。线性回归模型通常需要对缺失值进行处理,否则会影响模型的性能。

5. 模型的可解释性

虽然树回归模型的可解释性不如线性回归模型直观,但通过可视化树结构,用户仍然可以理解模型的决策过程。树回归模型的决策路径清晰,易于解释,特别是在单个样本的决策路径可视化方面。

6. 鲁棒性

树回归模型对异常值和噪声具有一定的鲁棒性。树回归模型通过递归分割数据,能够减少异常值对模型的影响。线性回归模型对异常值较为敏感,异常值可能会显著影响模型的参数估计。

7. 集成方法

树回归模型可以通过集成方法(如随机森林、梯度提升树)进一步提高模型的性能和稳定性。集成方法通过组合多个树模型,能够减少模型的方差,提高泛化能力。线性回归模型通常不具备这种集成能力。

8. 处理类别型特征

树回归模型能够直接处理类别型特征,不需要对类别型特征进行编码(如独热编码)。线性回归模型通常需要对类别型特征进行编码,否则无法处理。

9. 模型复杂度控制

树回归模型可以通过设置树的深度、最小样本分割数等参数来控制模型的复杂度,避免过拟合。线性回归模型通常需要通过正则化方法(如L1、L2正则化)来控制模型的复杂度。

10. 并行化

树回归模型在训练过程中可以进行并行化处理,特别是在随机森林等集成方法中,能够显著提高训练速度。线性回归模型的训练过程通常难以并行化。

树回归模型相较于线性回归模型在处理非线性关系、多维特征、缺失值、类别型特征等方面具有显著优势。此外,树回归模型通过集成方法能够进一步提高模型的性能和稳定性。然而,树回归模型的可解释性通常不如线性回归模型直观,且在某些情况下可能更容易过拟合。所以在实际项目开发过程中,到底那种模型真正适合自己的数据场景,需要自己探索分析,结合一些先验的经验我们可以少走一些弯路达到提高效率的目的,本文也是从实验性质的角度出发,探索树状模型构建回归模型的可行性,感兴趣的话也都可以基于自己的数据实例进行尝试。

标签:dtreeviz,模型,树状,可视化,线性,回归,决策树
From: https://blog.csdn.net/Together_CZ/article/details/142492646

相关文章

  • 阅读《AI大模型开发之路》的十大理由
    作为一名技术博主,我最近读完了《AI大模型开发之路》这本书,深感这是一部值得推荐的佳作。如果你对AI大模型感兴趣,或者希望在这个领域有所提升,那么这本书绝对不容错过。以下是我推荐你阅读《AI大模型开发之路》的十大理由:1.全面覆盖AI大模型开发的各个方面从基础理论到实践应......
  • 浏览器进程模型大揭秘:从原理到实践
    浏览器的进程模型何为进程?程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程。每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。何为线程?有了进程后,就可以运行程序的代码了。运行代码的「人」称之为「线程」。一个进程至少有一个线程,所以......
  • MMD模型及动作一键完美导入UE5-IVP5U插件方案(二)
    1、下载并启用IVP5U插件1、下载IVP5U插件,IVP5U,点击Latest下载对应引擎版本,将插件放到Plugins目录,同时将.uplugin文件的EnableByDefault改为false2、然后通过Edit->Plugins启用插件2、导入pmx模型1、直接在Content的某个目录拖入pmx模型,选择默认参数2、导入模型成功......
  • 自学大模型LLM,看这本书就够了!帮你快速入门大模型!(含PDF)
    一、Transformer模型介绍Transformer模型是一种基于自注意力机制的深度神经网络模型,在自然语言处理(NLP)领域取得了显著的成果,并在机器翻译、文本摘要、问答系统等多个任务中表现出色。1.基本原理Transformer模型主要由自注意力机制和前馈神经网络两部分组成。(1)自注意力机制:功能:自注......
  • 下载 |《2024年AI Agent行业报告》——大模型时代的“APP”,探索新一代人机交互及协作
    前言随着大型模型在各行各业的广泛应用,基于大型模型的人工智能体(AIAgent)迎来了快速发展的阶段。研究AIAgent是人类不断接近人工通用智能(AGI)的探索之一。知名AIAgent项目AutoGPT已经在GitHub的星星数已经达到140,000颗,进一步反映了用户对于AIAgents项目的广泛兴趣和支持。随......
  • 【2024年最新】一份在阿里内网悄悄流传的大模型面试真题!看到就是赚到
    前言随着人工智能技术的迅猛发展,计算机视觉(CV)、自然语言处理(NLP)、搜索、推荐、广告推送和风险控制等领域的岗位越来越受欢迎,而对于大型模型技术的掌握成为了这些岗位的标配。但目前公开的大模型资源还是很少很少,面试真题就更不用多说了。为了让大家能够应对大模型面试,整理了这份大......
  • 【AI大模型】在线蒸馏一次视觉Transformer搜索
    一、概要最近,Puretransformers在视觉任务方面显示出巨大的潜力。然而,它们在中小数据集中的准确性并不令人满意。尽管一些现有方法引入了CNN作为教师,通过蒸馏来指导训练过程,但教师和学生网络之间的差距将导致次优绩效。在这项工作中,研究员提出了一种新的具有在线蒸馏的One-shotVis......
  • 史上最全 BAT 大厂AI大模型面试1000题整理!(速度收藏)
    前言刷题,是面试前的必备环节。想要入职大厂可谓是千军万马过独木桥。为了通过层层考验,刷题肯定是必不可少的。鉴于此大厂多年经验技术面试官总结根据BATAI大模型面试1000题系列,结合各个大厂的面试题型整理了一份《AI大模型面试刷题宝典》,为了阅读体验,面试题都按知识点整理好了,可谓......
  • 轻量级模型,重量级性能,TinyLlama、LiteLlama小模型火起来了
    前言当大家都在研究大模型(LLM)参数规模达到百亿甚至千亿级别的同时,小巧且兼具高性能的小模型开始受到研究者的关注。小模型在边缘设备上有着广泛的应用,如智能手机、物联网设备和嵌入式系统,这些边缘设备通常具有有限的计算能力和存储空间,它们无法有效地运行大型语言模型。因此,深入探......
  • AI大模型推理性能优化之KV Cache
    前言本篇介绍KVCache。KVCache(键-值缓存)是一种在大模型推理中广泛应用的优化技术,其核心思想是利用缓存key和value来避免重复计算,从而提高推理效率。代价是显存占用会增加。核心思想在自注意力层的计算中,对于给定的输入序列,模型会计算每个token的key和value向量。这些向量的值......