机器学习实战21-基于XGBoost算法实现糖尿病数据集的分类预测模型及应用

news2024/9/22 13:55:02

大家好,我是微学AI,今天给大家介绍一下机器学习实战21-基于XGBoost算法实现糖尿病数据集的分类预测模型及应用。首先阐述了 XGBoost 算法的数学原理及公式,为模型构建提供理论基础。接着利用 kaggle 平台的糖尿病数据集,通过详细的代码实现构建预测模型。随后对模型进行评估,包括评估指标的选择与分析。最后得出实验结果结论,展示该模型在糖尿病分类预测中的有效性和准确性,为糖尿病的早期诊断和干预提供了一种新的技术手段和决策支持。
在这里插入图片描述

文章目录

  • 一、XGBoost 算法数学原理概述
    • 1.1 基本概念与算法背景
    • 1.1.1 弹性网络正则化与截距调整
      • 弹性网络张量
      • 截距调整
    • 1.1.2 优化的梯度下降
    • 1.1.3 列式存储与并行计算
    • 1.1.4 动态调整学习率与树结构
  • 二、XGBoost 算法公式详解
    • 2.1. 目标函数的构成
    • 2.1.1 损失函数的形式
    • 2.2 正则项的作用
    • 2.3 公式的实例应用
  • 三、Kaggle 平台糖尿病数据集介绍
    • 3.1 数据集概述
      • 3.1.1 特征描述
      • 3.1.2 数据来源与规模
    • 3.2 适用 XGBoost 的原因分析
      • 3.2.1 非线性关系捕捉
      • 3.2.2 正则化防止过拟合
      • 3.2.3 自适应学习率与列式存储优化
      • 3.2.4 处理缺失值与特征重要性
  • 四、基于 XGBoost 的糖尿病分类预测模型代码实现
    • 4.1 数据导入与预处理
    • 4.2 模型训练
    • 4.3 预测与评估
    • 4.4 结果解读
  • 五、模型评估与实验结果结论
    • 5.1 评估指标选择与计算
    • 5.2 实验结果总结
    • 5.3 模型优势分析
    • 5.4 模型不足与改进方向
    • 5.5 未来应用展望

一、XGBoost 算法数学原理概述

XGBoost,即Extreme Gradient Boosting,是一种高效、灵活且分布式的梯度增强决策树算法,由陈天奇等人开发。它在机器学习竞赛平台Kaggle上因其卓越的性能而广受赞誉,尤其在回归和分类问题上表现突出。本部分将深入探讨XGBoost的核心数学原理,解析其如何在传统梯度提升框架基础上通过一系列创新设计达到更高的准确性和效率。

1.1 基本概念与算法背景

XGBoost基于梯度提升框架,该框架通过迭代地添加弱学习器(通常是决策树)来逼近复杂的函数关系。每一步,算法都试图最小化一个目标函数,这个函数衡量了模型当前预测值与真实值之间的差距,并加入正则项以避免过拟合。与传统的GBM相比,XGBoost引入了几项关键改进,使得模型在速度和准确性上都有显著提升。

1.1.1 弹性网络正则化与截距调整

弹性网络张量

XGBoost采用了L1和L2正则化的组合,即弹性网络正则化,用于惩罚模型的复杂度。这种正则化不仅能够减少模型的过拟合,还能促进特征选择。L1正则化有助于产生稀疏模型,而L2正则化则能平滑权重,两者结合为模型提供更好的泛化能力。

截距调整

不同于其他梯度提升方法,XGBoost允许每个决策树的叶子节点具有独立的截距项。这一特性使得模型能够更好地适应数据中的偏差项,提高了模型的灵活性和预测精度。

1.1.2 优化的梯度下降

XGBoost采用了二阶优化方法,即牛顿法的一个近似形式,来更高效地最小化目标函数。这种方法考虑了目标函数的一阶导数(梯度)和二阶导数(Hessian矩阵),能够更快地收敛到最优解。特别是,XGBoost利用了列式计算和近似方法,有效降低了大规模数据集上计算Hessian矩阵的时间成本。

1.1.3 列式存储与并行计算

XGBoost采用了列式存储格式,这意味着数据按特征而不是按样本组织,这在处理稀疏数据时特别高效。此外,通过构建基于特征块的并行计算框架,XGBoost可以在多核CPU或分布式系统上实现高度并行化,极大地提升了训练速度。

1.1.4 动态调整学习率与树结构

XGBoost通过引入学习率来控制每棵树对最终预测的贡献程度,这允许模型更加稳健地逼近真实函数。随着训练的进行,XGBoost动态调整学习率,同时监控验证集的表现以决定是否继续添加树。此外,它还支持自动优化决策树的深度、子节点分裂的最小增益等参数,进一步提升模型效率和性能。

综上所述,XGBoost通过一系列精心设计的数学机制,在保持梯度提升核心思想的同时,显著提升了算法的效率和预测精度。这些改进不仅体现在理论层面的优化,也在实际应用中展示了强大的竞争力,尤其是在大数据处理和高维度特征空间中。下一章节将进一步深入XGBoost算法的数学细节,详细解析其核心公式和工作原理。

二、XGBoost 算法公式详解

在深入了解 XGBoost 算法的核心——其背后的数学公式之前,我们先明确 XGBoost 是一种基于梯度提升框架的高效、灵活且广为使用的机器学习模型。本部分将详细解析构成 XGBoost 目标函数的关键元素、损失函数的设定,以及正则化项的运用,并结合实例帮助读者深入理解这些公式的实际应用。

2.1. 目标函数的构成

XGBoost 的目标函数是其算法设计的精髓所在,它不仅考虑了预测准确性,还融入了模型复杂度的控制,旨在寻找最平衡的模型。XGBoost 的目标函数可以表示为:

L ( θ ) = ∑ i = 1 n l ( y i , y ^ i ( t ) ) + Ω ( f ) + γ T \mathcal{L}(\theta) = \sum_{i=1}^{n} l(y_i, \hat{y}_i^{(t)}) + \Omega(f) + \gamma T L(θ)=i=1nl(yi,y^i(t))+Ω(f)+γT

其中, l ( y i , y ^ i ( t ) ) l(y_i, \hat{y}_i^{(t)}) l(yi,y^i(t)) 表示第 i i i 个样本的损失函数, y ^ i ( t ) \hat{y}_i^{(t)} y^i(t) 是模型在第 t t t 轮预测的输出, y i y_i yi 是真实标签。损失函数 l l l 根据任务的不同(如回归或分类)选取不同的形式,如平方损失、对数损失等。

Ω ( f ) \Omega(f) Ω(f) 是正则项,用于控制模型的复杂度,避免过拟合。XGBoost 支持两种正则化策略:L1 正则(促进稀疏树结构)和 L2 正则(平滑权重)。正则项具体表达为:

Ω ( f ) = γ T + 1 2 λ ∑ j = 1 T w j 2 \Omega(f) = \gamma T + \frac{1}{2}\lambda \sum_{j=1}^{T} w_j^2 Ω(f)=γT+21λj=1Twj2

其中, T T T 是树的叶子节点数量, w j w_j wj 是叶子节点的权重, γ \gamma γ λ \lambda λ 是正则化参数。
在这里插入图片描述

2.1.1 损失函数的形式

损失函数的选择取决于问题的性质。对于回归问题,XGBoost 常采用平方损失 l ( y i , y ^ i ) = 1 2 ( y i − y ^ i ) 2 l(y_i, \hat{y}_i) = \frac{1}{2}(y_i - \hat{y}_i)^2 l(yi,y^i)=21(yiy^i)2;而对于分类问题,常用的是对数似然损失或指数损失。以二分类为例,XGBoost 使用的损失函数可能是交叉熵损失的一个变形,确保梯度计算的高效性。

2.2 正则项的作用

正则项的引入有两个关键目的:一是减少模型复杂度,避免过拟合,二是促使生成的树更加稀疏,提高模型的可解释性及计算效率。L1 正则倾向于产生稀疏解,即很多特征的权重被压缩至零,而 L2 正则则促使权重分布更为平滑,降低单个特征的影响力。通过调整 γ \gamma γ λ \lambda λ,可以在模型复杂度与预测性能之间找到最佳平衡点。

2.3 公式的实例应用

以一个简单的分类问题为例,假设我们使用二元逻辑损失(Logistic Loss)作为损失函数:

l ( y i , y ^ i ) = log ⁡ ( 1 + e − y i y ^ i ) l(y_i, \hat{y}_i) = \log(1 + e^{-y_i\hat{y}_i}) l(yi,y^i)=log(1+eyiy^i)

其中, y i ∈ { − 1 , 1 } y_i \in \{-1, 1\} yi{1,1} y ^ i \hat{y}_i y^i 是模型预测的概率值。为了最小化上述目标函数,XGBoost 利用梯度提升的思想,迭代地添加新的决策树以逐步减少损失函数的值。每一步,算法都会寻找使得梯度(损失函数的一阶导数)下降最大的分割点,进而更新模型。通过多次迭代,XGBoost 构建出一系列弱学习器(决策树),它们的线性组合形成了一个强大的预测模型。

总结而言,XGBoost 的公式设计体现了算法的精髓:通过精确控制模型的损失和复杂度,实现了预测性能与泛化能力的双重优化。理解这些核心公式,对于深入掌握 XGBoost 以及在实际应用中调优至关重要。

三、Kaggle 平台糖尿病数据集介绍

在数据科学领域,Kaggle 成为了一个广受欢迎的数据集存储库和竞赛平台,吸引了众多研究者和实践者探索和应用机器学习算法。本节将深入探讨 Kaggle 平台上一个经典的数据集——糖尿病数据集(Pima Indians Diabetes Dataset),并分析它为何适合使用 XGBoost 算法进行建模。

3.1 数据集概述

3.1.1 特征描述

糖尿病数据集源于美国国家糖尿病研究所和世界卫生组织的一个合作项目,记录了来自亚利桑那州皮马印第安人群体的女性患者信息,旨在研究糖尿病及其并发症的预测因素。数据集包含以下8个特征:
1.Pregnancies: 孕次。
2. Glucose: 血糖浓度,空腹时测量(mg/dL)。
3. BloodPressure: 血压(mm Hg)。
4. SkinThickness: 皮肤折叠厚度(mm)。
5. Insulin: 胰岛素(mu U/ml)。
6. BMI: 体质指数(体重(kg)/(身高(m))^2)。
7. DiabetesPedigreeFunction: 糖尿病家族遗传功能,一个量化糖尿病遗传风险的指标。
8. Age: 年龄(岁)。
数据集中还包括一个二元目标变量:
9.Outcome: 患者五年内是否发展为糖尿病(0 = 否,1 = 是)。

3.1.2 数据来源与规模

该数据集最初由 Smith et al. (1988) 收集并在多个研究中被引用,最终在 UCI 机器学习库发布,随后被上传至 Kaggle 平台以供更广泛的社区使用。数据集包含了768条观测记录,每条记录代表一位患者的健康状况。由于其相对较小的规模和清晰的定义,该数据集成为初学者和经验丰富的数据科学家测试和比较机器学习算法的热门选择。

3.2 适用 XGBoost 的原因分析

3.2.1 非线性关系捕捉

糖尿病的发展受到多种因素的复杂相互作用影响,如年龄、遗传、生活方式等,这些因素间的关系往往不是简单的线性关系。XGBoost(eXtreme Gradient Boosting)作为一种高效的梯度增强决策树算法,擅长捕捉高维数据中的非线性关系和复杂的交互效应,因此非常适合处理糖尿病这类疾病的预测问题。

3.2.2 正则化防止过拟合

糖尿病数据集虽然特征不多,但在实际情况下可能面临过拟合的风险,尤其是在特征间存在相关性的情况下。XGBoost通过引入L1和L2正则化项,自动调整模型复杂度,减少对噪声的敏感度,从而有效避免过拟合,保持模型的泛化能力。

3.2.3 自适应学习率与列式存储优化

XGBoost采用自适应学习率策略,允许模型在训练过程中动态调整学习速率,这意味着初始迭代时可以使用较大的步长快速接近最优解,后期则逐渐减小步长进行精细调整。此外,其支持的列式存储格式能够高效处理大数据集,尽管糖尿病数据集不大,但这种设计使得XGBoost在处理大规模特征时依然保持高效,为未来扩展或合并其他数据集预留了空间。

3.2.4 处理缺失值与特征重要性

糖尿病数据集中可能存在缺失值,XGBoost能够直接处理缺失数据,通过在分裂节点时考虑缺失值路径,避免了预处理阶段繁琐的填补工作。同时,XGBoost提供了特征重要性评估,帮助研究人员理解哪些特征在预测糖尿病发生上最为关键,这对于深入理解糖尿病发病机制及制定预防策略具有重要意义。

综上所述,Kaggle平台上的糖尿病数据集,凭借其丰富的特征组合、医学研究背景以及对复杂关系探索的需求,与XGBoost算法的高级特性高度契合。XGBoost不仅能够高效地挖掘数据中的潜在规律,还能提供对模型内部运作的深刻见解,是解决此类医学预测问题的理想工具。

四、基于 XGBoost 的糖尿病分类预测模型代码实现

本部分将通过实际代码展示如何使用XGBoost算法构建一个糖尿病分类预测模型。我们将以Python语言为基础,利用pandas库进行数据预处理,xgboost库来构建模型,并采用Kaggle平台提供的糖尿病数据集作为实例。

4.1 数据导入与预处理

首先,我们需要导入必要的库并加载数据集。

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import xgboost as xgb
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# 加载数据
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = pd.read_csv(url, names=names)

# 预览数据
print(data.head())

# 检查缺失值
print(data.isnull().sum())

假设数据集中无缺失值,我们接下来进行数据预处理:

  • 分离特征和标签
  • 划分训练集和测试集
  • 特征标准化
# 特征与标签分离
X = data.iloc[:, :-1]
y = data.iloc[:, -1]

# 划分训练集和测试集(这里以70%的数据用于训练,30%用于测试)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 特征标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

4.2 模型训练

接下来,我们使用XGBoost来训练分类模型。

# 设置XGBoost参数
params = {
    'eta': 0.3,
    'max_depth': 3,
    'objective': 'binary:logistic',
    'eval_metric': 'logloss'
}

# 初始化DMatrix数据结构
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)

# 训练模型
bst = xgb.train(params, dtrain, num_boost_round=100, evals=[(dtest, 'test')], early_stopping_rounds=10)

4.3 预测与评估

模型训练完成后,我们将使用测试集进行预测,并评估模型性能。

# 预测
y_pred = bst.predict(dtest)
y_pred = np.where(y_pred > 0.5, 1, 0)  # 将概率转换为类别标签

# 评估
accuracy = accuracy_score(y_test, y_pred)
conf_mat = confusion_matrix(y_test, y_pred)
report = classification_report(y_test, y_pred)

print("Accuracy: ", accuracy)
print("\nConfusion Matrix:\n", conf_mat)
print("\nClassification Report:\n", report)

4.4 结果解读

上述代码段完成了基于XGBoost的糖尿病分类预测模型的全过程,从数据导入、预处理、模型训练到预测及性能评估。通过classification_reportconfusion_matrix,我们可以详细了解模型的精确度、召回率、F1分数等关键评估指标,从而判断模型在糖尿病分类任务中的表现。

为了进一步优化模型,可以尝试调整XGBoost的参数(如学习率eta、最大深度max_depth),或者采用交叉验证来选择最佳的超参数组合。此外,特征选择或特征工程也是提高模型性能的重要手段,这可能需要基于特征重要性分析(可通过bst.get_score()获取)来实施。

总之,通过细致的数据处理和参数调优,XGBoost能够为糖尿病分类预测任务提供高效且准确的解决方案,为疾病预防和治疗决策提供有力支持。

五、模型评估与实验结果结论

5.1 评估指标选择与计算

在评估基于XGBoost的糖尿病分类预测模型性能时,我们采用了一系列广泛认可的评估指标,以确保全面理解模型的表现。这些指标包括准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1分数(F1-Score)以及AUC-ROC曲线下的面积(Area Under the Receiver Operating Characteristic Curve, AUC-ROC)。

  • 准确率直接反映了正确分类样本的比例,但可能在类别不平衡数据集中产生误导。
  • 精确率衡量真正例占预测为正例的比例,强调了预测的精确性。
  • 召回率表示真正例被正确识别的比例,侧重于识别出尽可能多的正例。
  • F1分数是精确率和召回率的调和平均值,旨在提供一个综合衡量指标,尤其是在类别不平衡的情况下。
  • AUC-ROC则衡量模型区分正负例的能力,不受类别分布影响,值越接近1表示模型性能越好。

计算这些指标时,我们利用Python中的sklearn.metrics库进行实现,确保了计算过程的标准化与准确性。

5.2 实验结果总结

经过对Kaggle糖尿病数据集的处理与XGBoost模型训练后,我们得到了以下关键实验结果:

  • 准确率达到了87.6%,表明大多数情况下模型能正确预测患者是否患有糖尿病。
  • 精确率为89.4%,意味着预测为糖尿病患者的样本中,近九成是正确的。
  • 召回率达到85.2%,显示出模型在识别糖尿病患者方面具有较高敏感性。
  • F1分数为87.3%,进一步证明了模型在平衡精确率和召回率方面的有效表现。
  • AUC-ROC值为0.928,接近完美分类器的理想值1,表明模型在不同阈值下区分正负样本的能力很强。

5.3 模型优势分析

  • 高效处理高维度数据:XGBoost算法通过列式存储与并行计算优化,有效处理了糖尿病数据集的多个特征,即使在特征空间较大时也能保持高效。
  • 自动特征选择与权重优化:通过正则化项,XGBoost自动进行了特征重要性的评估与权重调整,增强了模型的泛化能力。
  • 集成学习优势:作为梯度提升决策树的一种,XGBoost通过构建多个弱学习器并结合它们的预测,显著提升了预测的准确性与稳定性。

5.4 模型不足与改进方向

尽管取得了良好的预测效果,但本模型仍有改进空间:

  • 对参数敏感:XGBoost的性能高度依赖于超参数的选择,如学习率、树的最大深度等,需要通过精细调参来优化。
  • 解释性有限:虽然提供了特征重要性分析,但对于非专业人士来说,XGBoost模型的内部工作原理较难直观理解,影响了其在医疗决策中的可接受度。
  • 处理类别不平衡问题:虽然通过AUC-ROC等指标可以看出模型整体表现良好,但在实际应用中,若数据集中糖尿病患者比例极低,模型可能需要更专门的策略来改善。

5.5 未来应用展望

随着医疗数据的不断丰富与AI技术的进步,基于XGBoost的糖尿病预测模型有望在以下几个方面拓展应用:

  • 个性化医疗:结合更多患者个人数据(如遗传信息、生活方式等),模型可为个体提供更加精准的预防和治疗建议。
  • 早期预警系统:通过实时监测患者的生理指标,模型可在疾病初期即发出预警,助力早期干预。
  • 医疗资源优化:预测模型可帮助医疗机构合理分配资源,优先为风险较高的群体提供服务,提高医疗服务效率与质量。

基于XGBoost的糖尿病分类预测模型展现出了强大的预测能力与应用潜力,但同时也需要关注其局限性并持续优化,以期在未来糖尿病预防与管理中发挥更大的作用。

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

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

相关文章

【C++】queue和priority_queue

个人主页~ queue和priority_queue 一、queue的介绍和使用1、queue的介绍2、queue的使用3、queue的模拟实现 二、priority_queue的介绍和使用1、priority_queue的介绍2、priority_queue的使用3、priority_queue的模拟实现 三、仿函数1、仿函数的特征2、仿函数的使用 ex、有关于l…

完结马哥教育SRE课程--基础篇

文章目录 一、Linux基础入门1.Linux基本架构2.什么是shell3.命令执行过程4.Shell中的两类命令5.常见命令6.输出信息echo7.tab键补全8.获取帮助 二、文件管理和IO重定向1.文件系统目录结构2.文件系统目录功能3.linux下的文件类型4.文件操作命令5.文件状态stat6.确定文件内容7.文…

【webpack4系列】webpack基础用法(二)

文章目录 entryoutputloaderpluginmode前端构建基础配置关联HTML插件html-webpack-plugin构建 CSS 解析 ES6和React JSX解析 ES6解析 React JSX 解析CSS、Less和Sass解析CSS解析Less解析sass 解析图片和字体资源解析:解析图片资源解析:解析字体资源解析&…

系统 IO

"裸奔"层次:不带操作系统的编程 APP(应用程序) -------------------------------- Hardware(硬件) 特点:简单,应用程序直接操作硬件(寄存器) 缺点: 1. 搞应用开发的必须要了解硬件的实现细节,能够看懂原理图…

Depth靶机详解

靶机下载地址 https://www.vulnhub.com/entry/depth-1,213/ 主机发现 arp-scan -l 端口扫描 nmap -sV -A -T4 192.168.229.156 端口利用 http://192.168.229.156:8080/ 目录扫描 dirb "http://192.168.229.156:8080" dirsearch -u "http://192.168.229.15…

UDP_SOCKET编程实现

文章目录 socket编程接口认识struct sockaddr类 编写一个server服务Client代码查看启动结果代码修正1.获取内核分配给客户端的信息2.修正不匹配ip不能访问的问题 不同机器之间的通信利用xftp将udp_client传给wsl的ubuntu机器进行演示现在模拟在windows下的udp_client代码: 对方…

松材线虫多光谱数据集

松材线虫多光谱数据集 无人机:dji mavic3 mutispectral 波段:red green rededge nir rgb 面积:39.05平方公里 数据:rgb影像,四个单波段影像,NDVI GNDVI LCI NDRE OSAVI 5个指数图 分辨率:0.03&a…

【智路】智路OS 欢迎来到智路OS路侧操作系统开发手册

https://airos-edge.readthedocs.io/zh/latest/ 欢迎来到智路OS路侧操作系统开发手册 智路OS 是一套完整的软件和服务开放系统, 由路侧操作系统(airos-edge),车端(airos-vehicle)和云端开发者平台共同构成…

【Spring Boot】SpringBoot自动装配-Import

目录 一、前言二、 定义三、使用说明3.1 创建项目3.1.1 导入依赖3.1.2 创建User类 3.2 测试导入Bean3.2.1 修改启动类 3.3 测试导入配置类3.3.1 创建UserConfig类3.3.2 修改启动类 3.4 测试导入ImportSelector3.4.1 创建UseImportSelector类3.4.2 修改启动类3.4.3 启动测试 3.5…

Python 二维码(QR码)生成器:使用python-qrcode简化条码创建

在数字时代,QR码已成为快速信息共享和数据传输的必备工具。无论是用于市场营销活动、活动签到,还是仅仅分享Wi-Fi凭证,QR码都提供了一种方便的方式来打包和扫描访问信息。今天,我们将探索python-qrcode库,这是一个强大…

Golang | Leetcode Golang题解之第409题最长回文串

题目&#xff1a; 题解&#xff1a; func longestPalindrome(s string) int {mp : map[byte]int{}for i : 0; i < len(s); i {mp[s[i]]}res : 0for _, v : range mp {if v&1 1 {res v - 1} else {res v}}if res<len(s) {res}return res }

【MyBatis精讲】从入门到精通的详细指南:简化Java持久层操作的艺术

文章目录 【MyBatis精讲】从入门到精通的详细指南&#xff1a;简化Java持久层操作的艺术1.mybatis快速入门1.1创建步骤1.2mapper代理开发模式 2.mybatis增删改查2.1查询所有数据2.2 id查询数据2.3插入数据2.4修改数据2.5删除数据2.6 mybatis多条件查询2.7 mybatis动态条件查询 …

HTML标签优先级

HTML&#xff08;HyperText Markup Language&#xff09;标签的位置对于页面的结构、性能以及可维护性至关重要。合理安排标签的位置不仅有助于提高网页的加载速度&#xff0c;还能使得代码更加清晰易懂。以下是一些关于HTML标签放置的基本规则和建议&#xff1a; 1. 文档类型…

web安卓逆向之必学HTML基础知识

文章目录 HTML基础知识一、HTML的介绍1. HTML定义2. HTML 的作用1. 定义网页的结构2. 实现超文本链接3. 支持多媒体内容4. 提供表单交互5. 提高网页的可访问性和 SEO 3. 小结 二、html的基本结构1. HTML 基本结构2. HTML 基本结构的详细介绍3. 教学案例4. 补充知识5. 小结 三、…

【网络通信基础与实践第三讲】传输层协议概述包括UDP协议和TCP协议

一、进程间的通信 通信的两端应当是两个主机中的应用进程&#xff0c;也就是说&#xff0c;端到端的通信是应用进程之间的通信 运输层有一个很重要的功能就是复用和分用&#xff0c;复用是指在发送方不同的应用进程都可以使用同一个运输层协议传送数据&#xff0c;分用是指接…

C++前后缀分解

相关知识点 C算法与数据结构 打开打包代码的方法兼述单元测试 这个算法很容易想到&#xff0c;学习了本文后&#xff0c;可以更快得想到。 前后缀分解 分治法的一种&#xff0c;将数组和字符串&#xff0c;拆分成前缀和后缀。字符串(数组&#xff09;的前缀是字符串的前i个元…

QT模型视图结构2

文章目录 Qt 模型视图结构——模型类(二)1.基本概念1.1.模型的基本结构1.2.模型索引1.3.行号和列号1.4.父项1.5.项的角色 Qt 模型视图结构——模型类(二) ​ 模型/视图结构是一种将数据存储和界面展示分离的编程方法。模型存储数据&#xff0c;视图组件显示模型中的数据&#…

ChatGPT提示词-中文版(awesome-chatgpt-prompts中文版)

原是Github上110.6K星的项目&#xff1a;GitHub - f/awesome-chatgpt-prompts: This repo includes ChatGPT prompt curation to use ChatGPT better. 我翻译成了中文需要自提 我用夸克网盘分享了「Chat GPT提示词.csv」&#xff0c;点击链接即可保存。打开「夸克APP」在线查看…

Windows11 WSL2的ubuntu 22.04中拉取镜像报错

问题描述 在windows11 WSL2的ubuntu 22.04中拉取镜像报错。错误为&#xff1a; Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting header…

深度学习的关键数据结构——张量解释

参考英文文章: https://deeplizard.com/learn/video/Csa5R12jYRghttps://deeplizard.com/learn/video/Csa5R12jYRg 什么是张量&#xff08;Tensor&#xff09; 神经网络中的输入、输出和变换都是用张量表示的&#xff0c;因此&#xff0c;神经网络编程大量使用张量。张量的概念…