机器学习详解(2):线性回归之理论学习

文章目录

  • 1 监督学习
  • 2 线性回归
    • 2.1 简单/多元线性回归
    • 2.2 最佳拟合线
    • 2.3 成本函数和梯度下降
    • 2.4 线性回归的假设
    • 2.5 线性回归的评估指标函数
  • 3 总结

机器学习是人工智能的一个分支,主要致力于开发能够从数据中学习并进行预测的算法和统计模型。线性回归是机器学习的一种算法,具体来说是一种监督学习算法,它通过学习带标签的数据集,将数据点映射到最优的线性函数上,用于对新数据集进行预测。

1 监督学习

监督学习是一种机器学习类型,算法从带标签的数据中学习。带标签数据指的是目标值已知的数据集。监督学习分为两类:

  1. 分类 (Classification):
    根据输入的独立变量预测数据集的类别。类别是离散或分类值,例如根据一张动物图片判断是猫还是狗。
  2. 回归 (Regression):
    根据输入的独立变量预测连续输出变量。例如根据房屋的年龄、距离主干道的距离、位置、面积等参数预测房价。

本篇文章,我们将讨论回归中最简单的一种方法:线性回归

2 线性回归

线性回归是一种监督学习算法,通过拟合一个线性方程到观测数据中,计算因变量与一个或多个自变量之间的线性关系。

  • 简单线性回归 (Simple Linear Regression): 当只有一个自变量时。
  • 多元线性回归 (Multiple Linear Regression): 当有多个自变量时。

为什么线性回归很重要?

  1. 可解释性:
    线性回归的显著优势是可解释性强。其模型方程提供清晰的系数,能够解释每个自变量对因变量的影响,帮助深入理解数据的内在动态。
  2. 简单易用:
    线性回归因其透明性和简单性而备受青睐,容易实现,并作为更复杂算法的基础概念。
  3. 广泛应用:
    线性回归不仅是预测工具,还为多种高级模型奠定了基础。例如,正则化技术和支持向量机等方法都受其启发。此外,线性回归在假设检验中也具有重要作用,可帮助研究人员验证数据的关键假设。

2.1 简单/多元线性回归

1.简单线性回归

这是最简单的线性回归形式,只涉及一个自变量和一个因变量。简单线性回归的公式为:

y = β 0 + β 1 X y = \beta_0 + \beta_1 X y=β0+β1X

其中:

  • y y y为因变量;
  • X X X为自变量;
  • β 0 \beta_0 β0为截距;
  • β 1 \beta_1 β1为斜率。

多元线性回归

多元线性回归涉及多个自变量和一个因变量,其公式为:

y = β 0 + β 1 X 1 + β 2 X 2 + ⋯ + β n X n y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_n X_n y=β0+β1X1+β2X2++βnXn

其中:

  • y y y为因变量;
  • X 1 , X 2 , … , X n X_1, X_2, \dots, X_n X1,X2,,Xn为自变量;
  • β 0 \beta_0 β0为截距;
  • β 1 , β 2 , … , β n \beta_1, \beta_2, \dots, \beta_n β1,β2,,βn为斜率。

算法目标

线性回归算法的目标是找到最佳拟合线,即可以基于自变量预测因变量的方程。这条最佳拟合线将使预测值和真实值之间的误差最小化。

2.2 最佳拟合线

使用线性回归的主要目标是确定最佳拟合线,这意味着预测值与实际值之间的误差尽可能小。在最佳拟合线中,斜率表示当自变量发生单位变化时,因变量的变化量。

在这里插入图片描述

假设函数

假设自变量是工作经验 X X X,因变量是薪资 Y Y Y,两者具有线性关系,则薪资可以通过以下公式预测:

y i ^ = θ 1 + θ 2 x i \hat{y_i} = \theta_1 + \theta_2 x_i yi^=θ1+θ2xi

其中:

  • y i ∈ Y y_i \in Y yiY i = 1 , 2 , … , n i = 1, 2, \dots, n i=1,2,,n)为带标签数据(监督学习);
  • x i ∈ X x_i \in X xiX i = 1 , 2 , … , n i = 1, 2, \dots, n i=1,2,,n)为输入的独立训练数据;
  • y i ^ ∈ Y ^ \hat{y_i} \in \hat{Y} yi^Y^ i = 1 , 2 , … , n i = 1, 2, \dots, n i=1,2,,n)为预测值。

模型通过找到最佳的 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2值来确定最佳回归线。

如何更新 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2

为了实现最佳拟合线,模型会尝试预测目标值 y ^ \hat{y} y^,以使预测值 y ^ \hat{y} y^与真实值 y y y之间的误差最小化。目标是更新 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2的值,使预测值和真实值之间的误差(即损失函数)最小化:

m i n i m i z e   1 n ∑ i = 1 n ( y ^ i − y i ) 2 minimize\ \frac{1}{n}\sum_{i=1}^n (\hat{y}_i - y_i)^2 minimize n1i=1n(y^iyi)2

2.3 成本函数和梯度下降

成本函数或损失函数表示预测值 y ^ \hat{y} y^与真实值 y y y之间的误差。在线性回归中,常用的成本函数是均方误差 (MSE),其计算公式为:

J ( θ 1 , θ 2 ) = 1 n ∑ i = 1 n ( y ^ i − y i ) 2 J(\theta_1, \theta_2) = \frac{1}{n} \sum_{i=1}^n (\hat{y}_i - y_i)^2 J(θ1,θ2)=n1i=1n(y^iyi)2

其中:

  • y ^ i \hat{y}_i y^i是预测值;
  • y i y_i yi是实际值;
  • n n n是数据点的数量。

通过最小化MSE,模型可以找到最佳的 θ 1 \theta_1 θ1(截距)和 θ 2 \theta_2 θ2(斜率)值,从而拟合出最佳拟合线。

利用MSE函数,通过梯度下降法迭代更新 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2,确保MSE收敛到全局最小值,得到最优的线性回归线。

梯度下降 (Gradient Descent)

线性回归模型通过优化算法梯度下降进行训练,迭代更新模型参数以减少MSE损失。更新 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2的目标是减少成本函数的值并达到最小值。梯度下降的关键在于找到 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2的初始值,并通过迭代逐步更新,直至达到最小成本。

梯度计算和参数更新

对成本函数 J J J分别对 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2求导:

  • θ 1 \theta_1 θ1求导:

∂ J ∂ θ 1 = 2 n ∑ i = 1 n ( y ^ i − y i ) \frac{\partial J}{\partial \theta_1} = \frac{2}{n} \sum_{i=1}^n (\hat{y}_i - y_i) θ1J=n2i=1n(y^iyi)

  • θ 2 \theta_2 θ2求导:

∂ J ∂ θ 2 = 2 n ∑ i = 1 n ( y ^ i − y i ) x i \frac{\partial J}{\partial \theta_2} = \frac{2}{n} \sum_{i=1}^n (\hat{y}_i - y_i) x_i θ2J=n2i=1n(y^iyi)xi

线性回归模型的目标是找到最佳拟合线的系数。通过沿着均方误差 (MSE) 的负梯度方向更新系数,可以调整截距和斜率的值,使损失函数最小化。

在这里插入图片描述

  • 在梯度下降法中,两个参数 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2是同时计算和更新的。这个图虽然只画出了一个参数(比如 θ \theta θ)随成本函数 J ( θ ) J(\theta) J(θ)的变化情况,但实际上,在有多个参数(比如 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2)的情况下,这个过程是在高维空间中进行的,图中的二维表示是简化后的示例。

更新规则如下:
θ 1 = θ 1 − α ( 2 n ∑ i = 1 n ( y ^ i − y i ) ) \theta_1 = \theta_1 - \alpha \left( \frac{2}{n} \sum_{i=1}^n (\hat{y}_i - y_i) \right) θ1=θ1α(n2i=1n(y^iyi))

θ 2 = θ 2 − α ( 2 n ∑ i = 1 n ( y ^ i − y i ) x i ) \theta_2 = \theta_2 - \alpha \left( \frac{2}{n} \sum_{i=1}^n (\hat{y}_i - y_i) x_i \right) θ2=θ2α(n2i=1n(y^iyi)xi)

其中:

  • α \alpha α为学习率;
  • y ^ i \hat{y}_i y^i为预测值;
  • y i y_i yi为真实值;
  • x i x_i xi为自变量。

通过迭代更新 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2,可以找到使成本函数达到最小值的参数。举个例子,一个向上的抛物线的中心点为x=2,其左边的导数为负,右边的导数为正,而且越左边越小,越右边越大。如果此时x很小,则导数也很小,为负数。此时更新x就要减去这个导数乘以学习率,x就会变大,往x=2靠近。

2.4 线性回归的假设

简单线性回归的假设

  1. 线性关系 (Linearity)
    自变量和因变量之间必须具有线性关系。如果关系不是线性的,线性回归模型将不准确。

在这里插入图片描述

  1. 独立性 (Independence)
    数据集中各观测值必须相互独立。如果观测值之间存在依赖性,线性回归将无法准确建模。

  2. 同方差性 (Homoscedasticity)
    所有自变量水平上的误差方差应保持不变。如果误差方差随自变量变化,线性回归将产生偏差。

在这里插入图片描述

  1. 正态性 (Normality)
    残差应呈正态分布。如果残差不符合正态分布,模型的预测可能不可靠。

多元线性回归的假设

在多元线性回归中,除上述简单线性回归的假设外,还需满足以下条件:

  1. 无多重共线性 (No Multicollinearity):
    自变量之间不应高度相关。如果两个或多个自变量之间高度相关,模型将难以确定每个变量对因变量的独立影响。

  2. 加性 (Additivity):
    自变量对因变量的影响应独立存在,且没有变量之间的交互效应。

  3. 特征选择 (Feature Selection):
    必须仔细选择自变量,避免包含无关或冗余变量,从而避免过拟合和增加模型复杂性。

  4. 过拟合 (Overfitting):
    避免模型过度拟合训练数据,从而在新数据上表现不佳。

多重共线性 (Multicollinearity)

多重共线性是指在多元回归分析中,当两个或多个自变量之间存在高度相关性时,可能会导致以下问题:

  • 难以评估单个变量对因变量的独立贡献: 因为自变量之间高度相关,很难区分每个自变量对因变量的独立影响。
  • 不稳定的回归系数: 回归系数可能变得非常大或非常小,甚至方向可能与直觉不符。
  • 模型的不可靠性: 高多重共线性可能会使回归模型的预测能力下降。

原因:

  1. 数据中自变量之间存在高相关性。
  2. 引入了不必要的自变量(冗余变量)。
  3. 自变量是通过计算得出的,具有内在的函数关系。

检测多重共线性的方法包括:

  • 相关矩阵 (Correlation Matrix): 检查自变量之间的相关系数,接近1或-1表示可能存在多重共线性。
  • 方差膨胀因子 (Variance Inflation Factor, VIF): 测量某变量的系数因多重共线性而增加的程度。VIF大于10通常表明存在多重共线性。

这里就不深入讨论了。

2.5 线性回归的评估指标函数

均方误差 (Mean Squared Error, MSE):
MSE 是一种评估回归模型准确性的指标,它计算所有数据点的实际值与预测值之间的平方误差的平均值。平方操作确保正负误差不会相互抵消。公式为:
M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 MSE = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2 MSE=n1i=1n(yiy^i)2

其中:

  • n n n是数据点的数量。
  • y i y_i yi是第 i i i个数据点的实际值。
  • y ^ i \hat{y}_i y^i是第 i i i个数据点的预测值。

MSE 对离群值敏感,因为较大的误差会对整体得分产生显著影响。


平均绝对误差 (Mean Absolute Error, MAE):
MAE 是另一种用于评估回归模型准确性的指标,测量的是预测值与实际值之间的平均绝对差异。公式为:
M A E = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ MAE = \frac{1}{n} \sum_{i=1}^n |y_i - \hat{y}_i| MAE=n1i=1nyiy^i

其中:

  • n n n是观测值的数量。
  • y i y_i yi是实际值。
  • y ^ i \hat{y}_i y^i是预测值。

MAE 值越低,模型性能越好。由于使用绝对误差,它对离群值不敏感。


均方根误差 (Root Mean Squared Error, RMSE):
RMSE 是残差方差的平方根,用于描述预测值和实际值的偏差大小。公式为:
R M S E = ∑ i = 1 n ( y i − y ^ i ) 2 n RMSE = \sqrt{\frac{\sum_{i=1}^n (y_i - \hat{y}_i)^2}{n}} RMSE=ni=1n(yiy^i)2

如果使用调整后的估计(考虑自由度)

  • 自由度是指在计算统计量(如均值、方差等)时,可以自由变化的数据点的数量。每估计一个参数,数据的一个自由度就被“消耗”,因为该数据点的信息被用来确定参数值,而不能再自由变化。
  • 考虑自由度减去 2 是因为在回归分析中,我们需要估计两个参数:截距(intercept)和斜率(slope)。每估计一个参数,就会消耗一个自由度,因此总的自由度要从样本数量 nnn 中减去 2。

公式为:
R M S E = ∑ i = 1 n ( y i − y ^ i ) 2 n − 2 RMSE = \sqrt{\frac{\sum_{i=1}^n (y_i - \hat{y}_i)^2}{n - 2}} RMSE=n2i=1n(yiy^i)2

RMSE 提供了一种衡量模型预测误差的方式,但它的值依赖于变量的单位(不是归一化的指标),因此在不同场景间不易比较。


确定系数 (R-squared):
R 2 R^2 R2是一种统计量,用于衡量回归模型能够解释因变量总方差的比例,其值范围在 0 到 1 之间。通常, R 2 R^2 R2越大,模型对数据的拟合程度越好。数学公式为:
R 2 = 1 − R S S T S S R^2 = 1 - \frac{RSS}{TSS} R2=1TSSRSS

其中:

  • 残差平方和 (Residual Sum of Squares, RSS): 表示模型预测值与实际值之间的误差平方和:
    R S S = ∑ i = 1 n ( y i − y ^ i ) 2 RSS = \sum_{i=1}^n (y_i - \hat{y}_i)^2 RSS=i=1n(yiy^i)2
  • 总平方和 (Total Sum of Squares, TSS): 表示数据点偏离因变量均值的总方差:
    T S S = ∑ i = 1 n ( y i − y ˉ ) 2 TSS = \sum_{i=1}^n (y_i - \bar{y})^2 TSS=i=1n(yiyˉ)2

R 2 R^2 R2表示因变量的总方差中有多少比例可以由模型中的自变量解释。


调整后的确定系数 (Adjusted R-squared):
调整后的 R 2 R^2 R2是针对多元回归模型的 R 2 R^2 R2的修正版本。它引入了模型中的预测变量个数和样本量的考虑,用于避免加入不相关的变量导致 R 2 R^2 R2人为提高。公式为:
A d j u s t e d   R 2 = 1 − ( 1 − R 2 n − 1 ⋅ n − 1 n − k − 1 ) Adjusted\ R^2 = 1 - \left( \frac{1 - R^2}{n - 1} \cdot \frac{n - 1}{n - k - 1} \right) Adjusted R2=1(n11R2nk1n1)

其中:

  • n n n是观测值数量;
  • k k k是模型中预测变量的个数;
  • R 2 R^2 R2是确定系数。

调整后的 R 2 R^2 R2的作用:

  • 防止过拟合。
  • 对不显著的预测变量进行惩罚,避免它们对模型整体解释度的无效贡献。

3 总结

线性回归作为机器学习中最基础的算法之一,不仅具有直观的数学意义,还能通过拟合线性模型来解决实际中的许多回归问题。例如,它可以帮助我们预测房价、销售额等连续变量,甚至还能为更复杂的算法(如正则化回归和支持向量机)提供理论基础。

在本篇文章中,我们详细讨论了线性回归的基本理论、假设和常用的评估指标。理解这些内容有助于我们更好地设计和优化回归模型。

下一篇文章,我们将通过代码来实现线性回归模型,进一步探讨如何应用梯度下降法训练模型并对其性能进行评估。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core8.0学习笔记(二十五)——EF Core Include导航数据加载之预加载与过滤

一、导航属性数据加载 1.在EF Core中可以使用导航属性来加载相关实体。 2.加载实体的三种方式: (1)预先加载:直接在查询主体时就把对应的依赖实体查出来(作为初始查询的一部分) (2)显式加载:使用代码指示稍后显式的从…

QT实战--带行号的支持高亮的编辑器实现(1)

本文主要介绍了基于QPlainTextEdit实现的&#xff0c;带有行号的,支持高亮的编辑器实现&#xff0c;话不多说&#xff0c;先上效果图&#xff1a; 1.行号头文件&#xff1a;linenumberarea.h #ifndef LINENUMBERAREA_H #define LINENUMBERAREA_H#include <QWidget> #inc…

基于Matlab的卷积神经网络(CNN)苹果分级检测系统

本研究提出了一种基于卷积神经网络&#xff08;CNN&#xff09;的自动化苹果分级系统&#xff0c;该系统根据苹果的视觉特征进行分类。系统采用了预训练的深度学习模型&#xff0c;使用包含不同等级苹果的图像数据集进行训练。研究方法包括图像预处理、特征提取和苹果等级分类。…

华为、华三交换机纯Web下如何创关键VLANIF、操作STP参数

华为交换机WEB操作 使用的是真机S5735&#xff0c;目前主流的版本都适用&#xff08;V1R5~V2R1的就不在列了&#xff0c;版本太老了&#xff0c;界面完全不一样&#xff0c;这里调试线接的console口&#xff0c;电脑的网络接在ETH口&#xff09; 「模拟器、工具合集」复制整段内…

ACM:均分纸牌

主要思路 整体思路概述&#xff1a; 本题旨在解决给定N堆纸牌&#xff08;纸牌总数是N的倍数&#xff09;&#xff0c;通过按照特定移牌规则移动纸牌&#xff0c;找出用最少移动次数使每堆纸牌数量相等的方法。程序采用了一种逐步调整的思路&#xff0c;先计算出每堆纸牌应有的…

定时任务——xxl-job源码解析

摘要 本文深入解析了xxl-job的源码&#xff0c;xxl-job是一个分布式任务调度平台&#xff0c;其核心设计思想是将调度行为抽象成“调度中心”&#xff0c;而任务逻辑则由“执行器”处理&#xff0c;实现调度与任务的解耦。文章详细介绍了调度器和执行器的初始化流程、任务执行…

vxe-table 键盘操作,设置按键编辑方式,支持覆盖方式与追加方式

vxe-table 全键盘操作&#xff0c;按键编辑方式设置&#xff0c;覆盖方式与追加方式&#xff1b; 通过 keyboard-config.editMode 设置按键编辑方式&#xff1b;支持覆盖方式编辑和追加方式编辑 安装 npm install vxe-pc-ui4.3.15 vxe-table4.9.15// ... import VxeUI from v…

乾元通渠道商中标福州市人防信息化建设项目

乾元通渠道商中标福州市人防信息化建设项目&#xff0c;乾元通作为应急通讯设备厂家&#xff0c;为项目提供车载版多链路聚合通信保障设备 QYT-X1s。 青岛乾元通数码科技有限公司作为国家应急产业企业&#xff0c;深耕于数据调度算法研究&#xff0c;参与了多项国家及省部级信息…

【深度学习|地学应用-地震气溶胶异常解析3】气溶胶异常是地震的前兆现象之一!地震是如何影响气溶胶浓度和分布的异常变化的呢,我们该如何分析?

【深度学习|地学应用-地震气溶胶异常解析3】气溶胶异常是地震的前兆现象之一&#xff01;地震是如何影响气溶胶浓度和分布的异常变化的呢&#xff0c;我们该如何分析&#xff1f; 【深度学习|地学应用-地震气溶胶异常解析3】气溶胶异常是地震的前兆现象之一&#xff01;地震是…

C++析构函数和构造函数

一、构造函数 1.构造函数的基本概念 1.对构造函数的理解&#xff1a; 构造函数是类的一种特殊成员函数&#xff0c;其主要功能是在创建对象时进行初始化操作。它的名字与类名相同&#xff0c;并且没有返回值类型&#xff08;不能是void&#xff09;。例如&#xff0c;对于一个…

【python自动化四】日志打印

我们在进行自动化测试时&#xff0c;需要打印过程日志和结果日志等&#xff0c;这里记录下日志的相关配置。这里我们直接自己新建一个logger。 先贴上日志代码如下&#xff0c;可根据需要修改&#xff1a; import logging import os import timefrom logging.handlers import …

鸿蒙分享(一):添加模块,修改app名称图标

码仓库&#xff1a;https://gitee.com/linguanzhong/share_harmonyos 鸿蒙api:12 新建公共模块common 在entry的oh-package.json5添加dependencies&#xff0c;引入common模块 "dependencies": {"common": "file:../common" } 修改app名称&…

IDE如何安装插件实现Go to Definition

项目背景 框架&#xff1a;Cucumber Cypress 语言&#xff1a;Javascript IDE&#xff1a;vscode 需求 项目根目录cypress-automation的cypress/integration是测试用例的存放路径&#xff0c;按照不同模块不同功能创建了很多子目录&#xff0c;cucumber测试用例.feature文…

【机器学习】CatBoost 模型实践:回归与分类的全流程解析

一. 引言 本篇博客首发于掘金 https://juejin.cn/post/7441027173430018067。 PS&#xff1a;转载自己的文章也算原创吧。 在机器学习领域&#xff0c;CatBoost 是一款强大的梯度提升框架&#xff0c;特别适合处理带有类别特征的数据。本篇博客以脱敏后的保险数据集为例&#x…

HTML Input 文件上传功能全解析:从基础到优化

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Unity在运行状态下,当物体Mesh网格发生变化时,如何让MeshCollider碰撞体也随之实时同步变化?

旧版源代码地址&#xff1a;https://download.csdn.net/download/qq_41603955/90087225?spm1001.2014.3001.5501 旧版效果展示&#xff1a; 新版加上MeshCollider后的效果&#xff1a; 注意&#xff1a;在Unity中&#xff0c;当你动态地更改物体的Mesh时&#xff0c;通常期望…

conda create -n name python=x.x 执行失败问题解决方法

今天想在anaconda环境下创建一个指定python版本为3.9的虚拟环境&#xff0c;执行命令 conda create -n DeepLearning python3.9 但是系统竟然报错 看报错信息是在镜像源里找不到下载包&#xff0c;于是对镜像源文件处理 首先删除之前的镜像通道 conda config --remove-key …

第一个 JSP 程序

一个简单的 JSP 程序&#xff1a; 使用 IDEA 开发工具新建一个 maven 项目&#xff0c;具体操作如图所示&#xff1a; 配置 Tomcat 服务器 项目结构如下图所示&#xff1a; 3. 修改 index.jsp 页面的代码&#xff1a; <% page language"java" contentType&q…

Altium Designer学习笔记 32 DRC检查_丝印调整

基于Altium Designer 23学习版&#xff0c;四层板智能小车PCB 更多AD学习笔记&#xff1a;Altium Designer学习笔记 1-5 工程创建_元件库创建Altium Designer学习笔记 6-10 异性元件库创建_原理图绘制Altium Designer学习笔记 11-15 原理图的封装 编译 检查 _PCB封装库的创建Al…

docker学习笔记(五)--docker-compose

文章目录 常用命令docker-compose是什么yml配置指令详解versionservicesimagebuildcommandportsvolumesdepends_on docker-compose.yml文件编写 常用命令 命令说明docker-compose up启动所有docker-compose服务&#xff0c;通常加上-d选项&#xff0c;让其运行在后台docker-co…