当前位置: 首页 > news >正文

【机器学习】使用决策树分类器预测汽车安全性的研究与分析

文章目录

    • 一、决策树算法简介
      • 决策树的结构
      • 分类和回归树 (CART)
      • 决策树算法术语
      • 决策树算法直觉
    • 二、属性选择度量
      • 信息增益
      • 基尼指数
        • 计算分割基尼指数的步骤
    • 三、决策树算法中的过度拟合
      • 避免过度拟合的方法
    • 四、导入库和数据可视化
      • 探索性数据分析
        • 重命名列名
        • 查看数据集的总结信息
        • 变量值的频率分布
    • 五、处理特征向量和目标变量
    • 六、特征工程
      • 编码分类变量
    • 七、使用基尼系数的决策树分类器
      • 比较训练集和测试集的准确性
      • 可视化决策树
    • 八、使用熵的决策树分类器
      • 比较训练集和测试集的准确性
      • 可视化决策树
    • 九、混淆矩阵
    • 十、分类报告
    • 十一、结果和结论

一、决策树算法简介

决策树算法是最流行的机器学习算法之一。它使用树状结构及其可能的组合来解决特定问题。它属于监督学习算法类,可用于分类和回归任务。

决策树的结构

决策树是一种包含根节点、分支和叶节点的结构。每个内部节点表示对属性的测试,每个分支表示测试的结果,每个叶节点都包含一个类标签。树中最顶端的节点是根节点。

在实施决策树算法时,我们做出了一些假设:

  • 整个训练集一开始被视为根。
  • 特征值需要是分类的。如果值是连续的,则在构建模型之前将它们离散化。
  • 记录根据属性值递归分布。
  • 使用某种统计方法将属性放置为树的根或内部节点。

后面的部分将描述决策树的术语。

分类和回归树 (CART)

如今,决策树算法以其现代名称 CART 而闻名,代表分类和回归树。分类和回归树或 CART 是 Leo Breiman 引入的一个术语,指的是可用于分类和回归建模问题的决策树算法。

CART 算法为其他重要算法(如袋装决策树、随机森林和增强决策树)提供了基础。在本文中,我们将解决一个分类问题,因此称该算法为决策树分类问题。

决策树算法术语

在决策树算法中,有一个树状结构,其中每个内部节点代表对属性的测试,每个分支代表测试的结果,每个叶节点代表类标签。从根节点到叶节点的路径代表分类规则。

以下是决策树算法中涉及的一些术语:

根节点:它代表整个总体或样本。这进一步分为两个或多个同质集。

分裂:这是将节点分为两个或多个子节点的过程。

决策节点:当子节点分裂成进一步的子节点时,它被称为决策节点。

叶节点/终端节点:不分裂的节点称为叶节点或终端节点。

修剪:当我们删除决策节点的子节点时,此过程称为修剪。它是分裂的反过程。

分支/子树:整个树的子部分称为分支或子树。

父节点和子节点:分为子节点的节点称为子节点的父节点,子节点是父节点的子节点。

决策树算法直觉

对于数据集中的每个属性,决策树算法形成一个节点。最重要的属性放在根节点。

为了评估手头的任务,我们从根节点开始,然后按照符合条件或决策的相应节点沿着树向下工作。

此过程持续到到达叶节点。叶节点包含决策树的预测或结果。

二、属性选择度量

决策树实施中的主要挑战是确定我们认为是根节点和每个级别的属性。此过程称为属性选择。有不同的属性选择度量来识别可被视为每个级别的根节点的属性。

有两种流行的属性选择度量:信息增益和基尼指数。

信息增益

我们以信息增益为标准,尝试估计每个属性所包含的信息。要理解信息增益的概念,我们需要了解另一个概念,即熵。

熵衡量给定数据集中的杂质。在物理学和数学中,熵是指随机变量 X \mathbf{X} X 的随机性或不确定性。在信息论中,它指的是一组示例中的杂质。信息增益是熵的减少。信息增益根据给定的属性值计算数据集分割前的熵与分割后的平均熵之间的差值。

熵由以下公式表示:
H ( X ) = − ∑ i = 1 c p i log ⁡ 2 ( p i ) \mathbf{H}(\mathbf{X}) = - \sum_{i=1}^{c} \mathbf{p_i} \log_2 (\mathbf{p_i}) H(X)=i=1cpilog2(pi)
其中, c \mathbf{c} c 是类别的数量, p i \mathbf{p_i} pi是与第 i 个类别相关的概率。

ID3(迭代二分法)决策树算法使用熵来计算信息增益。因此,通过计算每个属性的熵度量的减少,我们可以计算它们的信息增益。信息增益最高的属性被选为节点的分割属性。

基尼指数

CART(分类和回归树)使用的另一个属性选择度量是基尼指数。它使用基尼方法创建分割点。

基尼指数可以用下图表示:
G i n i ( X ) = 1 − ∑ i = 1 c p i 2 \mathbf{Gini}(\mathbf{X}) = 1 - \sum_{i=1}^{c} \mathbf{p_i}^2 Gini(X)=1i=1cpi2
其中, c \mathbf{c} c 是类别的数量, p i \mathbf{p_i} pi是与第 i 个类别相关的概率。

基尼指数表示,如果我们从总体中随机选择两个项目,它们必须属于同一类,如果总体是纯的,则概率为 1。

基尼指数适用于分类目标变量“成功”或“失败”。它仅执行二元分割。基尼值越高,同质性越高。CART(分类和回归树)使用基尼方法来创建二元分割。

计算分割基尼指数的步骤
  1. 使用成功和失败概率平方和公式 p 2 + q 2 \mathbf{p}^2 + \mathbf{q}^2 p2+q2计算子节点的基尼指数。
  2. 使用分割的每个节点的加权基尼分数计算分割的基尼指数。
  3. 对于离散值属性,选择具有最小基尼指数的子集作为分割属性。对于连续值属性,策略是选择每对相邻值作为可能的分割点,并选择基尼指数较小的点作为分割点。选择基尼指数最小的属性作为分裂属性。

三、决策树算法中的过度拟合

过度拟合是构建决策树模型时的一个实际问题。当算法继续深入以减少训练集误差但导致测试集误差增加时,就会考虑过度拟合问题。因此,我们模型的预测准确性会下降。这通常发生在我们由于数据中的异常值和不规则性而构建许多分支时。

避免过度拟合的方法

可用于避免过度拟合的两种方法如下:

预修剪:在预修剪中,我们会提前停止树的构建。如果节点的优度测量低于阈值,我们宁愿不拆分节点。但很难选择合适的停止点。

后修剪:在后修剪中,我们深入树的深处以构建完整的树。如果树显示出过度拟合问题,则修剪将作为后修剪步骤进行。我们使用交叉验证数据来检查修剪的效果。使用交叉验证数据,我们测试扩展节点是否会导致改进。如果它显示出改进,那么我们可以继续扩展该节点。但如果它显示准确度降低,则不应扩展它。因此,应将节点转换为叶节点。

四、导入库和数据可视化

在Python环境中导入必要的库以进行数据分析和可视化。

import numpy as np  # 线性代数
import pandas as pd  # 数据处理,CSV文件输入输出(例如 pd.read_csv)
import matplotlib.pyplot as plt  # 数据可视化
import seaborn as sns  # 统计数据可视化
%matplotlib inline

处理警告信息,以保持输出的整洁:

import warnings
warnings.filterwarnings('ignore')

导入数据集

data = './car_evaluation.csv'
df = pd.read_csv(data, header=None)

探索性数据分析

对数据集进行初步探索,以获得数据的基本信息。

查看数据集的维度

df.shape # (1728, 7)

数据集包含1728个实例和7个变量。

查看数据集的前5行

df.head()

输出结果为:

在这里插入图片描述

重命名列名

数据集当前的列名为0, 1, 2等。我们需要为这些列指定有意义的名称:

col_names = ['buying', 'maint', 'doors', 'persons', 'lug_boot', 'safety', 'class']
df.columns = col_names

再次查看数据集的前5行,以确认列名已正确更新:

df.head()

输出结果为:

在这里插入图片描述

查看数据集的总结信息
df.info()

输出结果为:

在这里插入图片描述

变量值的频率分布
for col in col_names:print(df[col].value_counts())

输出结果显示,各个分类变量的频数分布如下:

  • buyingmaint:每个类别(vhigh, high, med, low)都有432个实例。
  • doors:类别为2、3、4和5more,每个类别都有432个实例。
  • persons:类别为2、4和more,每个类别有576个实例。
  • lug_boot:类别为small、med和big,每个类别有576个实例。
  • safety:类别为low、med和high,每个类别有576个实例。
  • class:类别为unacc(1210个实例)、acc(384个实例)、good(69个实例)和vgood(65个实例)。

五、处理特征向量和目标变量

将特征向量X和目标变量y从数据集中分离:

X = df.drop(['class'], axis=1)
y = df['class']

将数据集划分为训练集和测试集

使用train_test_split将特征向量和目标变量划分为训练集和测试集:

from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

查看训练集和测试集的形状:

X_train.shape, X_test.shape # ((1157, 6), (571, 6))

六、特征工程

特征工程是将原始数据转换为有用特征的过程,这些特征有助于我们更好地理解模型并提高其预测能力。我将对不同类型的变量进行特征工程。

首先,我将再次检查变量的数据类型。

# 检查 X_train 中变量的数据类型
X_train.dtypes

在这里插入图片描述

编码分类变量

# 导入类别编码器
import category_encoders as ce# 使用序数编码对变量进行编码
encoder = ce.OrdinalEncoder(cols=['buying', 'maint', 'doors', 'persons', 'lug_boot', 'safety'])
X_train = encoder.fit_transform(X_train)
X_test = encoder.transform(X_test)X_train.head()

在这里插入图片描述

现在已经准备好用于模型构建的训练集和测试集。

七、使用基尼系数的决策树分类器

# 导入 DecisionTreeClassifier
from sklearn.tree import DecisionTreeClassifier# 使用标准基尼系数实例化 DecisionTreeClassifier 模型
clf_gini = DecisionTreeClassifier(criterion='gini', max_depth=3, random_state=0)# 训练模型
clf_gini.fit(X_train, y_train)
# 预测测试集结果
y_pred_gini = clf_gini.predict(X_test)# 检查使用基尼系数的准确性评分
from sklearn.metrics import accuracy_score
print('Model accuracy score with criterion gini index: {0:0.4f}'.format(accuracy_score(y_test, y_pred_gini)))# Model accuracy score with criterion gini index: 0.8021

这里,y_test 是测试集中真实的类别标签, y_pred_gini是预测的类别标签。

比较训练集和测试集的准确性

y_pred_train_gini = clf_gini.predict(X_train)
print('Training-set accuracy score: {0:0.4f}'.format(accuracy_score(y_train, y_pred_train_gini)))# Training-set accuracy score: 0.7865

检查是否存在过拟合或欠拟合

# 打印训练集和测试集的得分
print('Training set score: {:.4f}'.format(clf_gini.score(X_train, y_train)))
print('Test set score: {:.4f}'.format(clf_gini.score(X_test, y_test)))
Training set score: 0.7865
Test set score: 0.8021

这里,训练集准确度得分为 0.7865,而测试集准确度得分为 0.8021。这两个值相当。因此没有过度拟合的迹象。

可视化决策树

plt.figure(figsize=(12,8))
from sklearn import tree
tree.plot_tree(clf_gini.fit(X_train, y_train))

在这里插入图片描述

八、使用熵的决策树分类器

# 使用熵标准实例化 DecisionTreeClassifier 模型
clf_en = DecisionTreeClassifier(criterion='entropy', max_depth=3, random_state=0)# 训练模型
clf_en.fit(X_train, y_train)
# 预测测试集结果
y_pred_en = clf_en.predict(X_test)# 检查使用熵标准的准确性评分
from sklearn.metrics import accuracy_score
print('Model accuracy score with criterion entropy: {0:0.4f}'.format(accuracy_score(y_test, y_pred_en)))# Model accuracy score with criterion entropy: 0.8021

比较训练集和测试集的准确性

y_pred_train_en = clf_en.predict(X_train)
print('Training-set accuracy score: {0:0.4f}'.format(accuracy_score(y_train, y_pred_train_en)))# Training-set accuracy score: 0.7865

检查是否存在过拟合或欠拟合

# 打印训练集和测试集的得分
print('Training set score: {:.4f}'.format(clf_en.score(X_train, y_train)))
print('Test set score: {:.4f}'.format(clf_en.score(X_test, y_test)))
Training set score: 0.7865
Test set score: 0.8021

可以看到,训练集和测试集得分与使用基尼系数的情况相同。训练集准确度得分为 0.7865,而测试集准确度得分为 0.8021。这两个值相当。因此,没有过度拟合的迹象。

可视化决策树

plt.figure(figsize=(12,8))
from sklearn import tree
tree.plot_tree(clf_en.fit(X_train, y_train))

在这里插入图片描述

九、混淆矩阵

混淆矩阵是一种总结分类算法性能的工具。混淆矩阵将为我们清晰地展示分类模型的性能以及模型产生的错误类型。它为我们提供了按每个类别细分的正确和错误预测的摘要。摘要以表格形式表示。

在评估分类模型性能时,可能出现四种类型的结果。这四种结果如下所述:

  • 真阳性 (TP) – 当我们预测观察结果属于某个类别并且观察结果实际上属于该类别时,就会出现真阳性。
  • 真阴性 (TN) – 当我们预测观察结果不属于某个类别并且观察结果实际上不属于该类别时,就会出现真阴性。
  • 假阳性 (FP) – 当我们预测某个观察结果属于某个类别,但该观察结果实际上并不属于该类别时,就会出现假阳性。这种类型的错误称为 I 类错误。
  • 假阴性 (FN) – 当我们预测某个观察结果不属于某个类别,但该观察结果实际上属于该类别时,就会出现假阴性。这是一种非常严重的错误,称为 II 类错误。

下面给出的混淆矩阵总结了这四种结果。

# 打印混淆矩阵并将其分成四部分
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred_en)
print('Confusion matrix\n\n', cm)# [[ 73   0  56   0]# [ 20   0   0   0]# [ 12   0 385   0]# [ 25   0   0   0]]

十、分类报告

分类报告是评估分类模型性能的另一种方法。它显示模型的准确率、召回率、f1 和支持率分数。我们可以按如下方式打印分类报告:

from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred_en))

在这里插入图片描述

我们可以看到,模型的分类报告显示了四个类别(acc、good、unacc、vgood)中每个类别的准确率、召回率、f1-score 和支持率。

在这种情况下,类 “good” 和 “vgood” 的准确率、召回率和 f1-score 都为 0。这意味着模型无法正确预测这些类别。这可能是由于类别样本不均衡导致的。类 “unacc” 的准确率和召回率都很高,表明模型在预测这个类别时表现得相对较好。

十一、结果和结论

在这个项目中,我建立了一个决策树分类器模型来预测汽车的安全性。模型分为两种:一种使用标准“基尼指数”,另一种使用标准“熵”。两种模型的性能都非常出色,准确率均为 0.8021。

标准“基尼指数”模型

在使用“基尼指数”标准的模型中,训练集的准确率得分为 0.7865,而测试集的准确率得分为 0.8021。这两个值相当接近,没有过度拟合的迹象。

标准“熵”模型

类似地,在使用“熵”标准的模型中,训练集的准确度得分为 0.7865,而测试集的准确度得分为 0.8021。这与使用“基尼指数”标准的模型结果相同,因此也没有过度拟合的迹象。

数据集大小的影响

在这两种情况下,训练集和测试集的准确度得分相同,这可能是由于数据集较小导致的结果。

混淆矩阵和分类报告

模型的混淆矩阵和分类报告显示了非常好的性能。以下是模型的混淆矩阵:

 # [[ 73   0  56   0]# [ 20   0   0   0]# [ 12   0 385   0]# [ 25   0   0   0]]

从混淆矩阵中可以看到:

  • 对于类别 a c c \mathbf{acc} acc,模型正确预测了 73 个样本,但有 56 个样本被错误预测为 u n a c c \mathbf{unacc} unacc
  • 对于类别 g o o d \mathbf{good} good,没有样本被正确预测,所有样本被错误预测为其他类别。
  • 对于类别 u n a c c \mathbf{unacc} unacc,模型正确预测了 385 个样本,但有 12 个样本被错误预测为 a c c \mathbf{acc} acc
  • 对于类别 v g o o d \mathbf{vgood} vgood,没有样本被正确预测,所有样本被错误预测为 a c c \mathbf{acc} acc

这些结果表明模型在预测某些类别时有较高的准确性,但在某些类别上有改进空间。

总结

总体而言,本项目中的决策树分类器在使用“基尼指数”和“熵”标准时均表现出了良好的性能。尽管数据集较小可能影响了模型的泛化能力,但模型的准确率和混淆矩阵表明其具有较好的分类能力。未来的工作可以考虑扩大数据集规模,以进一步提升模型的性能和泛化能力。


参考:Decision-Tree Classifier Tutorial
中文版代码放在我的github,欢迎follow


在这里插入图片描述

相关文章:

【机器学习】使用决策树分类器预测汽车安全性的研究与分析

文章目录 一、决策树算法简介决策树的结构分类和回归树 (CART)决策树算法术语决策树算法直觉 二、属性选择度量信息增益熵 基尼指数计算分割基尼指数的步骤 三、决策树算法中的过度拟合避免过度拟合的方法 四、导入库和数据可视化探索性数据分析重命名列名查看数据集的总结信息…...

【香橙派 Orange pi AIpro】| 开发板深入使用体验

目录 一. 🦁 写在前面二. 🦁 愉快的安装流程2.1 安装前准备2.2 流程准备2.2.1 烧录镜像2.2.2 开机2.2.3 连网2.2.4 SSH远程连接开发板 2.3 体验 AI 应用样例 三. 🦁 写在最后 一. 🦁 写在前面 大家好,我是狮子呀&…...

初识Laravel(Laravel的项目搭建)

初识Laravel(Laravel的项目搭建) 一、项目简单搭建(laravel)1.首先我们确保使用国内的 Composer 加速镜像([加速原理](https://learnku.com/php/wikis/30594)):2.新建一个名为 Laravel 的项目&a…...

RequestContextHolder多线程获取不到request对象

RequestContextHolder多线程获取不到request对象,调用feign接口时,在Feign中的RequestInterceptor也获取不到HttpServletRequest问题解决方案。 1.RequestContextHolder多线程获取不到request对象 异常信息,报错如下: 2024-07-0…...

打造高效工作与生活质量的完美平衡

在快节奏的编程行业中,保持健康的工作与生活平衡是至关重要的。长时间坐在电脑前、面对紧凑的项目截止日期和频繁的加班文化,很容易导致身心健康问题,如眼睛疲劳、颈部和背部疼痛、压力累积、睡眠障碍乃至慢性疾病。因此,采取积极…...

【零基础】学JS之APIS第四天

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...

走进linux

1、为什么要使用linux 稳定性和可靠性: Linux内核以其稳定性而闻名,能够持续运行数月甚至数年而不需要重新启动。这对于服务器来说至关重要,因为它们需要保持长时间的稳定运行,以提供持续的服务 安全性: Linux系统…...

智能家居开发新进展:乐鑫 ESP-ZeroCode 与亚马逊 ACK for Matter 实现集成

日前,乐鑫 ESP-ZeroCode 与亚马逊 Alexa Connect Kit (ACK) for Matter 实现了集成。这对智能家居设备制造商来说是一项重大进展。开发人员无需编写固件或开发移动应用程序,即可轻松设计符合 Matter 标准的产品。不仅如此,开发者还可以在短短…...

本地事务和分布式事务

一、本地事务 1、事务的基本特性 数据库事务的几个基本特性:原子性、一致性、隔离性、持久性。  原子性:一系列的操作整体不可拆分,要么同时成功,要么同时失败。  一致性:数据在事务的前后,业务整体一…...

昇思25天学习打卡营第14天|基于MindNLP的文本解码原理

基于MindNLP的文本解码原理 文本解码 文本解码是自然语言处理中的一个关键步骤,特别是在任务如机器翻译、文本摘要、自动回复生成等领域。解码过程涉及将编码器(如语言模型、翻译模型等)的输出转换为可读的文本序列。以下是一些常见的文本解码方法和原理: 1. 自回归解码:…...

Base64文件流查看下载PDF方法-CSDN

问题描述 数票通等接口返回的PDF类型发票是以Base64文件流的方式返回的&#xff0c;无法直接查看预览PDF发票&#xff0c; 处理方法 使用第三方在线工具&#xff1a;https://www.jyshare.com/front-end/61/ 在Html代码框中粘贴如下代码 <embed type"application/pd…...

基于TCP的在线词典系统(分阶段实现)(阻塞io和多路io复用(select)实现)

1.功能说明 一共四个功能&#xff1a; 注册 登录 查询单词 查询历史记录 单词和解释保存在文件中&#xff0c;单词和解释只占一行, 一行最多300个字节&#xff0c;单词和解释之间至少有一个空格。 2.功能演示 3、分阶段完成各个功能 3.1 完成服务器和客户端的连接 servic…...

设置DepthBufferBits和设置DepthStencilFormat的区别

1&#xff09;设置DepthBufferBits和设置DepthStencilFormat的区别 2&#xff09;Unity打包exe后&#xff0c;游戏内拉不起Steam的内购 3&#xff09;Unity 2022以上Profiler.FlushMemoryCounters耗时要怎么关掉 4&#xff09;用GoodSky资产包如何实现昼夜播发不同音乐功能 这是…...

MySQL零散拾遗

mysql中大小写敏感吗&#xff1f; MySQL数据库默认情况下是不区分大小写的&#xff0c;这意味着在查询时&#xff0c;字段名和值的大小写不会影响结果。然而&#xff0c;这种默认行为可能会根据操作系统和配置的不同而有所变化。 在某些操作系统上&#xff0c;比如Linux&…...

kali安装vulhub遇到的问题及解决方法(docker及docker镜像源更换)

kali安装vulhub&#xff1a; 提示&#xff1a;项目地址 https://github.com/vulhub/vulhub 项目安装&#xff1a; git clone https://github.com/vulhub/vulhub.git 安装docker 提示&#xff1a;普通用户请使用sudo&#xff1a; 首先安装 https 协议、CA 证书 apt-get in…...

开源数字人项目Hallo

硬件条件&#xff1a; gpu最低12G 软件&#xff1a; cuda需支持 Python选择3.10吧&#xff0c;我的版本3.11 源码&#xff1a; GitHub - fudan-generative-vision/hallo: Hallo: Hierarchical Audio-Driven Visual Synthesis for Portrait Image Animation models文件&…...

Linux 命令集

修改主机名/关机/重启 1&#xff09;hostnamectl 命令 $ hostnamectl # 查看操作系统信息&#xff08;内核、操作系统发行版本、主机名等&#xff09; $ hostnamectl set-hostname redhatu8 # 修改主机名2&#xff09;shutdown 关机 $ shutdown -h now # 马上关机3&#…...

QML 鼠标和键盘事件

学习目标&#xff1a;Qml 鼠标和键盘事件 学习内容 1、QML 鼠标事件处理QML 直接提供 MouseArea 来捕获鼠标事件&#xff0c;该操作必须配合Rectangle 获取指定区域内的鼠标事件, 2、QML 键盘事件处理&#xff0c;并且获取对OML直接通过键盘事件 Keys 监控键盘任意按键应的消…...

WPF引入多个控件库使用

目的 设计开发时有的控件库的一部分符合我们想要的UI样式&#xff0c;另一部分来自另一个控件库&#xff0c;想把两种库的样式做一个整合在同一个控件资源上。单纯通过引用的方式会导致原有样式被覆盖。这里通过设置全局样式的方式来实现。 1.安装控件库nuget包&#xff1a;H…...

【Linux】1w详解如何实现一个简单的shell

目录 实现思路 1. 交互 获取命令行 2. 子串分割 解析命令行 3. 指令的判断 内建命令 4. 普通命令的执行 补充&#xff1a;vim 文本替换 整体代码 重点思考 1.getenv和putenv是什么意思 2.代码extern char **environ; 3.内建命令是什么 4.lastcode WEXITSTATUS(sta…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...