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

文章目录

    • 一、决策树算法简介
      • 决策树的结构
      • 分类和回归树 (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 是类别的数量,$\mathbf{p_i} $是与第 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 是类别的数量,$\mathbf{p_i} $是与第 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


在这里插入图片描述

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

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

相关文章

仪表板展示|DataEase看中国:2023年中国新能源汽车经济运行情况分析

背景介绍 随着政府机构、企业和个人对环保和可持续发展的高度关注,“新能源汽车”在全球范围内成为了一个热门话题。新能源汽车是指使用非传统燃料(如电能、氢能等)作为动力源的汽车。 在中国市场,新能源汽车产业蓬勃发展&#…

Python29 Tensorflow的基本知识和使用

1. TensorFlow TensorFlow 是一个开源的机器学习框架,由 Google Brain 团队开发。它用于数据流图的计算,尤其擅长深度学习任务。在 TensorFlow 中,数据流图(Data Flow Graph)是其核心概念之一,它定义了计算…

【QT】QComboBox允许输入查询,且不区分大小写

目录 0.简介 1.环境 2.详细代码 3.参考 0.简介 项目需求,原本有一个下拉框,但是条目太多,不好搜索,所以用户要求可以输入查找 修改前 : 修改后: 1.环境 windows11 vs-code qt5.12 2.详细代码 QComboB…

北斗防爆手持终端在化工厂的安全性能分析

北斗防爆手持终端在化工厂中的应用显著提升了安全性能,其卓越的防爆设计、高精度定位与监控功能、实时通信能力以及多功能集成特性,共同构筑了化工厂安全生产的坚实防线,确保了巡检人员与设备在复杂环境下的安全作业与高效管理。 北斗防爆手持…

触摸屏虚拟键盘组件 jQuery Virtual Keyboard使用 自定义键盘

如何在触摸设备上为输入域添加虚拟键盘? 一个插件可以解决这个问题,关键还支持高度自定义(git地址): GitHub - Mottie/Keyboard: Virtual Keyboard using jQuery ~ 官网地址:Virtual Keyboard 使用步骤&…

免费下载工具 -- Free Download Manager(FDM) v6.24.0.5818

软件简介 Free Download Manager (FDM) 是一款免费的功能强大的下载管理软件,适用于多种操作系统,包括 Windows、macOS、Android 和 Linux。这款软件的特色在于它快速、安全且高效的下载能力。它可以下载各种热门网站的影片,支持 HTTP/HTTP…

人工智能算法工程师(中级)课程1-Opencv视觉处理之基本操作与代码详解

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程1-Opencv视觉处理之基本操作与代码详解。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它提供了各种视觉处理函数&am…

电脑虚拟摄像头怎么使用?电脑摄像头可以被虚拟摄像头替代吗?8款推荐!

在数字化日益普及的今天,视频通话和在线会议已成为我们生活和工作中不可或缺的一部分。然而,当我们的电脑没有配备摄像头,或摄像头出现故障时,我们可能会面临一些不便。这时,电脑虚拟摄像头便成为了一个实用的解决方案…

摸鱼大数据——Spark SQL——Spark on Hive部署

1、集成原理 HiveServer2的主要作用: 接收SQL语句,进行语法检查;解析SQL语句;优化;将SQL转变成MapReduce程序,提交到Yarn集群上运行​SparkSQL与Hive集成,实际上是替换掉HiveServer2。是SparkSQL中的HiveSe…

《AIGC:智能创作时代》:AI创作革命来临,你准备好了吗?

想象一下,你正在欣赏一幅精美的画作,惊叹于其细腻的笔触和独特的构图。然而,当你得知这幅作品是由人工智能创作时,你会作何感想?这不再是科幻小说中的场景,而是我们正在经历的现实。 在这个AI技术飞速发展的…

AWS 云安全性:检测 SSH 暴力攻击

由于开源、低成本、可靠性和灵活性等优势,云基础设施主要由基于linux的机器主导,然而,它们也不能幸免于黑客的攻击,从而影响云的安全性。攻击Linux机器最流行的方法之一是通过SSH通道。 什么是 SSH 安全外壳协议(Sec…

Elasticsearch基础(四):Elasticsearch语法与案例介绍

文章目录 Elasticsearch语法与案例介绍 一、Restful API 二、查询语法 1、ES分词器 2、ES查询 2.1、match 2.2、match_phrase 2.3、multi_match 2.4、term 2.5、terms 2.6、fuzzy 2.7、range 2.8、bool Elasticsearch语法与案例介绍 一、Restful API Elastics…

上海亚商投顾:沪指大涨超1% 两市成交额重回7000亿

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数昨日放量反弹,午后集体涨超1%,深成指一度涨逾2%。消费电子板块全线爆发。 板…

基于vue的可视化大屏2

这个可视化大屏分为四个部分 一个引入代码&#xff0c;引入全局 index.vue. 左边代码centerleft.vue 右边代码centerright.vue 中间代码center.vue 主代码&#xff1a; 这是一段 Vue 框架的代码。 在 <template> 部分&#xff1a; 定义了一个根 div 元素。其中包含一…

免费插件集-illustrator插件-Ai插件-测量简单路径面积和周长

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.总结 1.介绍 本文介绍一款免费插件&#xff0c;加强illustrator使用人员工作效率&#xff0c;进行测量路径面积和周长处理。首先从下载网址下载这款插件 https://download.csdn.net/download/m0_67316550/878…

【C++报错已解决】Invalid Use of ‘void’ Expression

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一&#xff1a;调整函数返回类型方法二…

猎人维修大师免狗版

技术文档摘要 标题&#xff1a; 多功能维修工具集合概述 摘要&#xff1a; 本文档提供了一组多功能维修工具的概述&#xff0c;这些工具旨在为专业技术人员提供便利&#xff0c;以执行设备维修和软件解锁等任务。文档列出了各个工具的主要功能和应用场景。 关键词&#xff1…

机器人伦理分析:从扫地机器人到智能伙伴

我发过一个泡泡&#xff1a;机器人和扫地机器人。 意犹未尽&#xff0c;我觉得这是一个值得讨论下去的话题。或者是未来话题 在科技迅猛发展的今天&#xff0c;机器人已经从简单的执行工具演变为能够执行复杂任务的智能实体。特别是在家庭环境中&#xff0c;扫地机器人已经成为…

C 语言中的联合(Union)的用途是什么?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; &#x1f4d9;C 语言百万年薪修炼课程 通俗易懂&#xff0c;深入浅出&#xff0c;匠心打磨&#xff0c;死磕细节&#xff0c;6年迭代&#xff0c;看过的人都说好。 文章目…

JS代码动态打印404页面源码

JS代码动态打印404页面源码&#xff0c;适合做网站错误页&#xff0c;具有js动态打印效果&#xff0c;喜欢的朋友可以拿去 源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务…