Course1-Week2-多输入变量的回归问题

Course1-Week2-多输入变量的回归问题

文章目录

  • Course1-Week2-多输入变量的回归问题
    • 1. 向量化和多元线性回归
      • 1.1 多维特征
      • 1.2 向量化
      • 1.3 用于多元线性回归的梯度下降法
    • 2. 使梯度下降法更快收敛的技巧
      • 2.1 特征缩放
      • 2.2 判断梯度下降是否收敛
      • 2.3 如何设置学习率
    • 3. 特征工程
      • 3.1 选择合适的特征
      • 3.2 多项式回归

  • 笔记主要参考B站视频“(强推|双字)2022吴恩达机器学习Deeplearning.ai课程”。
  • 本篇笔记对应课程 Course1-Week2(下图中深紫色)。

1. 向量化和多元线性回归

  在上一周“单变量线性回归”的基础上,本周将继续拓展到“多元线性回归”(第1节)、“多项式回归”(第3节),并介绍加速梯度下降法收敛的技巧(第2节)。

1.1 多维特征

首先将单个特征扩展到多个特征,下面是机器学习术语:

  • m m m:训练样本的总数。
  • n n n:输入特征的总数。
  • X ⃗ \vec{X} X :全部的输入特征值,是一个二维向量,每一行表示一个样本,每一列表示所有样本的单个特征。
  • x ⃗ j \vec{x}_j x j:表示第 j j j个特征概念(一维向量), j j j的取值范围为 j = 1 , . . . , n j=1,...,n j=1,...,n
  • x ⃗ ( i ) \vec{x}^{(i)} x (i):第 i i i个训练样本的输入特征(一维向量), i i i的取值范围为 i = 1 , . . . , m i=1,...,m i=1,...,m
  • x j ( i ) x^{(i)}_{j} xj(i):第 i i i个训练样本的第 j j j个特征,是单个值。如下图中, x 4 ( 3 ) = 30 x^{(3)}_4 = 30 x4(3)=30
  • y ( i ) y^{(i)} y(i):第 i i i个训练样本的目标值,是单个值。
  • Y ⃗ \vec{Y} Y :全部的训练样本的特征值,是一维向量。

注:若无特殊说明,所有的一维向量都默认为列向量。

概念区分:

  • 单变量线性回归(univariate linear regression):只有单个特征的线性回归模型。
  • 多元线性回归(multiple linear regression):具有多维特征的线性回归模型。
  • multivariate regression:不是上述“多元回归”!另有别的意思,后面介绍。
图1-2-1 四维特征的房价预测问题

  如上图所示,将“房价预测”中的输入特征数量增加为4个:输入特征:房屋面积、卧室数量、房屋层数、房屋年龄。于是显然其线性回归模型也将从 f w , b ( x ) = w x + b f_{w,b}(x) = wx+b fw,b(x)=wx+b 扩展为下面的向量形式:
f w ⃗ , b ( x ⃗ ) = w 1 x 1 + w 2 x 2 + . . . + w 4 x 4 + b = ∑ j = 1 n w j x j + b = w ⃗ ⋅ x ⃗ + b \begin{aligned} f_{\vec{w},b}(\vec{x}) &= w_1x_1 + w_2x_2 + ... + w_4x_4 + b\\ &= \sum_{j=1}^{n}w_jx_j + b\\ &= \vec{w}·\vec{x} + b \end{aligned} fw ,b(x )=w1x1+w2x2+...+w4x4+b=j=1nwjxj+b=w x +b

  • w ⃗ = [ w 1 , w 2 , . . . , w n ] T \vec{w}=[w_1,w_2,...,w_n]^T w =[w1,w2,...,wn]T:表示参数(列)向量。 w i w_i wi表示当前特征对房屋价格影响。
  • b b b:常数项参数。可以理解为房屋的基价(base price)。
  • x ⃗ = [ x 1 , x 2 , . . . , x n ] T \vec{x}=[x_1,x_2,...,x_n]^T x =[x1,x2,...,xn]T:表示单个样本的特征(列)向量。
  • w ⃗ ⋅ x ⃗ \vec{w}·\vec{x} w x :表示两个向量的点积。

1.2 向量化

  简单来说,所谓“向量化”就是将分散的数字绑在一起进行处理。虽然概念很简单,但是“向量化”对于机器学习来说非常重要,因为它可以使模型更简洁代码更简洁,并且也可以加速代码运行速度。比如下图给出了三种书写求和公式的方法。可以发现,使用向量形式的模型表达式最简洁、代码最少(一行):

图1-2-2 向量化的好处
  1. 一个一个写:很麻烦,耗时耗力,也不会加快代码计算。
  2. for循环:每次只能计算单个乘法并相加,n很大时非常耗时。
  3. 向量相乘:形式简洁、运行更快。这是因为 numpy.dot()可以并行计算所有乘法,再进行相加。甚至某些内置算法还会使用GPU加速运算。

注:Optional Lab介绍了一些NumPy的语法。

并且梯度下降法的迭代计算中,使用向量更新参数也会非常简洁。所以机器学习中尽量使用向量化代码

1.3 用于多元线性回归的梯度下降法

  有了“向量化”的铺垫,本节将前面的单变量线性回归问题扩展到多元线性回归。首先使用“向量”重写模型,然后也就可以写出梯度下降法的“向量”形式,进而迭代计算出模型参数:
Model : f w ⃗ , b ( x ⃗ ) = w ⃗ ⋅ x ⃗ + b Cost function : min ⁡ w ⃗ , b J ( w ⃗ , b ) = 1 2 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) 2 Gradient descent repeat until convergence : { w j = w j − α ∂ ∂ w j J ( w ⃗ , b ) = w j − α m ∑ i = 1 m [ ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) ⋅ x j ( i ) ] , j = 1 , 2 , . . . , n . b = b − α ∂ ∂ b J ( w ⃗ , b ) = b − α m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) \begin{aligned} \text{Model} &: \quad f_{\vec{w},b}(\vec{x}) = \vec{w}·\vec{x} + b\\ \text{Cost function} &: \quad \min_{\vec{w},b} J(\vec{w},b) = \frac{1}{2m} \sum_{i=1}^{m}(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)})^2\\ \begin{aligned} \text{Gradient descent} \\ \text{repeat until convergence} \end{aligned} &: \left\{\begin{aligned} w_j &= w_j - \alpha \frac{\partial }{\partial w_j} J(\vec{w},b) = w_j - \frac{\alpha}{m} \sum_{i=1}^{m}[(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)})·x^{(i)}_j],\; j=1,2,...,n. \\ b &= b - \alpha \frac{\partial }{\partial b} J(\vec{w},b) = b - \frac{\alpha}{m} \sum_{i=1}^{m}(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)}) \end{aligned}\right. \end{aligned} ModelCost functionGradient descentrepeat until convergence:fw ,b(x )=w x +b:w ,bminJ(w ,b)=2m1i=1m(fw ,b(x (i))y(i))2: wjb=wjαwjJ(w ,b)=wjmαi=1m[(fw ,b(x (i))y(i))xj(i)],j=1,2,...,n.=bαbJ(w ,b)=bmαi=1m(fw ,b(x (i))y(i))

  • 模型中 x ⃗ \vec{x} x 表示单个样本的所有特征,是一维向量。
  • f w ⃗ , b ( x ⃗ ( i ) ) f_{\vec{w},b}(\vec{x}^{(i)}) fw ,b(x (i))是一个值, y ( i ) y^{(i)} y(i)是一个值。

  除了梯度下降法,还有一类求解模型参数的方法——正规方程法(Normal rquation method)。此方法利用线性代数的知识,直接令代价函数的梯度 ∂ ∂ w ⃗ J ( w ⃗ , b ) = 0 ⃗ \frac{\partial }{\partial \vec{w}} J(\vec{w},b) = \vec{0} w J(w ,b)=0 ,便可以一步求解出代价函数极小点所对应的参数值: w ⃗ = ( X ⃗ T X ⃗ ) − 1 X ⃗ T Y ⃗ \vec{w}=(\vec{X}^T\vec{X})^{-1}\vec{X}^T\vec{Y} w =(X TX )1X TY ,见“详解正规方程”。但是这种方法有两个缺点:

  1. 适用面小:仅适用于线性拟合,无法应用于其他方法,比如下周要学的“逻辑回归算法(logistic regression algorithm)”或者神经网络(Course2)。
  2. 计算规模不能太大:如何特征值数量很大,矩阵的逆等求解非常慢。

正规方程法通常会包含在机器学习函数库中,我们无需关心具体的计算过程。对于大多数机器学习算法来说,梯度下降法仍然是推荐的方法

本节Quiz

  1. In the training set below, what is x 4 ( 3 ) x_4^{(3)} x4(3)? Please type in the number below (this is an integer such as 123, no decimal points).
    Answer: 30

  2. Which of the following are potential benefits of vectorization? Please choose the best option.
    √ It can make your code shorter.
    √ It allows your code to run more easily on parallel compute hardware.
    √ It makes your code run faster.
    √ All of the above.

  3. To make gradient descent converge about twice as fast, a technique that almost always works is to double the learning rate α \alpha α.
    × True
    √ False

  4. With polynomial regression, the predicted values f w , b ( x ) f_{w,b}(x) fw,b(x) does not necessarily have to be a straight line (or linear) function of the input feature x x x.
    × False
    √ True

2. 使梯度下降法更快收敛的技巧

2.1 特征缩放

  特征缩放(feature scaling)可以使梯度下降法更快收敛。这主要是因为不同特征的取值范围有很大不同,但所有特征所对应的参数的学习率是一致的。这就导致取值范围较小的特征的参数,会“跟不上”取值范围较大的特征的参数变化。比如我们来看看“特征值大小”和其关联的“参数大小”的关系,首先将“房价预测”的问题简化成两个特征:

图1-2-3 取值范围不同的特征对预测结果的影响不同
  • x 1 x_1 x1:房屋面积,范围是300~2000平方英尺。
  • x 2 x_2 x2:卧室数量,范围是0~5。

参数选择:显然取值范围更大的 x 1 x_1 x1 影响更大

  • w 1 = 50 , w 2 = 0.1 , b = 50 w_1=50,w_2=0.1,b=50 w1=50,w2=0.1,b=50:计算出来的房屋价格是 $ 100050.5 k 100050.5k 100050.5k,显然与实际的 $ 500 k 500k 500k 完全不符。
  • w 1 = 0.1 , w 2 = 50 , b = 50 w_1=0.1,w_2=50,b=50 w1=0.1,w2=50,b=50:计算出来的房屋价格是 $ 500 k 500k 500k,正好等于房屋实际价格。

  于是,便考虑将 特征值归一化,使所有特征值的取值范围大致相同,这样就不会影响参数的迭代计算了。如下图便给出了进行 特征缩放 前后的对比:

图1-2-4 特征值缩放效果-等高图

左两图是训练样本散点图;右两图是代价函数等高图。上两图对应特征缩放前;下两图对应特征缩放后。

  • 特征缩放前:散点图呈现条形,等高图呈极窄的椭圆形。这是因为对于范围较大的特征值( x 1 x_1 x1)所对应的参数 w 1 w_1 w1,一点微小的改变就会导致代价函数剧烈变化,进而使得等高图呈椭圆状。在使用梯度下降法的时候,由于学习率一样,每走一小步,就会导致代价函数在 w 2 w_2 w2方向变化不多、但在 w 1 w_1 w1方向急剧变化,于是就会“反复横跳”,增加迭代次数和计算量,甚至不能收敛。
  • 特征缩放后:散点图分布较为均匀,并且等高图呈圆形。梯度下降法可以径直朝最小值迭代,减少迭代次数、更快的得到结果。

  好,现在我们知道进行 特征缩放 很有必要,那具体如何进行“特征缩放”,来使得所有特征都有相近的范围大小呢?主要有下面三种方法,并给出了第三种方法“Z-score归一化”的特征缩放效果:

  1. 除以最大值:所有特征除以各自的范围最大值,使得特征值范围都在0~1之间。于是 0.15 ≤ x 1 2000 ≤ 1 0.15 \le \frac{x_1}{2000} \le 1 0.152000x11 0 ≤ x 2 5 ≤ 1 0 \le \frac{x_2}{5} \le 1 05x21
  2. 均值归一化(Mean normalization):使得特征值范围大致为-1~1。假设 x 1 x_1 x1的平均值为 μ 1 = 600 \mu_1=600 μ1=600 x 2 x_2 x2的平均值为 μ 2 = 2.3 \mu_2=2.3 μ2=2.3,于是 − 0.18 ≤ x 1 − μ 1 2000 − 300 ≤ 0.82 -0.18 \le \frac{x_1 - \mu_1}{2000 - 300} \le 0.82 0.182000300x1μ10.82 − 0.46 ≤ x 2 − μ 2 5 − 0 ≤ 0.54 -0.46 \le \frac{x_2 - \mu_2}{5 - 0} \le 0.54 0.4650x2μ20.54
  3. Z-score归一化(Z-score normalization)【推荐】:使得特征值服从标准正态分布。假设 x 1 x_1 x1的平均值和标准差分别为 μ 1 = 600 , σ 1 = 450 \mu_1=600,\sigma_1=450 μ1=600,σ1=450 x 2 x_2 x2的平均值和标准差分别为 μ 2 = 2.3 , σ 2 = 1.4 \mu_2=2.3,\sigma_2=1.4 μ2=2.3,σ2=1.4,于是 − 0.67 ≤ x 1 − μ 1 σ 1 ≤ 3.1 -0.67 \le \frac{x_1 - \mu_1}{\sigma_1} \le 3.1 0.67σ1x1μ13.1 − 1.6 ≤ x 2 − μ 2 σ 2 ≤ 1.9 -1.6 \le \frac{x_2 - \mu_2}{\sigma_2} \le 1.9 1.6σ2x2μ21.9

注:Z-score归一化的合理性在于自然界中大部分数据都是服从正态分布的。
均值: μ j = 1 m ∑ i = 0 m − 1 x j ( i ) , j = 0 , 1 , . . . , n . \mu_j = \frac{1}{m} \sum_{i=0}^{m-1}x^{(i)}_j , \; j=0,1,...,n. μj=m1i=0m1xj(i),j=0,1,...,n.
方差: σ j 2 = 1 m ∑ i = 0 m − 1 ( x j ( i ) − μ j ) 2 , j = 0 , 1 , . . . , n . \sigma^2_j = \frac{1}{m} \sum_{i=0}^{m-1} (x^{(i)}_j-\mu_j)^2, \; j=0,1,...,n. σj2=m1i=0m1(xj(i)μj)2,j=0,1,...,n.
标准差: σ j = σ j 2 , j = 0 , 1 , . . . , n . \sigma_j = \sqrt{\sigma^2_j}, \; j=0,1,...,n. σj=σj2 ,j=0,1,...,n.

图1-2-5 Z-score归一化的效果

上面三个图的横纵坐标分别为两个特征:房屋面积、房屋年龄。可以看到特征缩放后,样本散点图分布的更加均匀。
下面两个图的横纵坐标同样是两个特征:房屋面积、卧室数量。可以看到特征缩放后,等高线图趋近圆形。
图片来自:C1_W2_Lab03_Feature_Scaling_and_Learning_Rate_Soln:

最后要说明一点,特征缩放后,只要所有特征值的范围在一个数量级就都可以接受,但若数量级明显不对等就需要 重新缩放

2.2 判断梯度下降是否收敛

  本节主要介绍 横坐标为迭代次数 的“学习曲线(learning carve)”。学习曲线可以帮助我们判断梯度下降法 是否正在收敛,或者判断梯度下降法 是否已经收敛。如下图给出了正常的学习曲线,

图1-2-6 正常收敛的学习曲线示意图
  • 正常情况:每次迭代后,代价函数都应该下降。直到某次迭代后,代价函数几乎不再下降,就认为是收敛。
  • 算法没有收敛:若某次迭代后,代价函数变大,则算法没有收敛,可能意味着学习率 α \alpha α过大。
  • 算法已经收敛:上图中的红色段,可以看到代价函数几乎不再下降。

自动收敛测试(automatic convergence test):若两次迭代之间,代价函数的减少值 ≤ ϵ = 1 0 − 3 \le \epsilon=10^{-3} ϵ=103(自定义),即可认为收敛。但是通常 ϵ \epsilon ϵ的选取很困难,所以还是建议使用上图所示的学习曲线进行判断。

注意不同的算法或问题,其收敛的迭代次数都不同,有些问题可能几十次就收敛,有些问题可能需要上万次才能收敛。由于很难提前知道梯度下降法是否会收敛,所以可以根据这个学习曲线来进行判断。

2.3 如何设置学习率

  之前提到,学习率太小,收敛太慢;学习率太大,可能不会收敛。那如何选择合适的学习率呢?正确的做法是,迭代较小的次数,快速地、粗略地选出合适的学习率。具体的选择策略从一个较小的学习率(如0.01)开始,逐渐增大,直到出现不收敛的情况。如下图所示:

图1-2-7 逐步增加学习率
  • 代价函数起伏不定:代码逻辑有bug(比如迭代方向写反),或者学习率太大。
  • 验证代码逻辑正常:当学习率很小时,代价函数会不断减小,即使很慢。

3. 特征工程

  “特征工程”这个标题听起来怪怪的,其实就是如何挑选、组合、使用“特征”的一套方法论。特征工程(Feature engineering)使用先验知识或直觉来转换或组合原始特征,从而设计出新的特征,进而简化算法或者使预测结果更准确。

关于Python仿真:scikit-learn是一个非常广泛使用的开源机器学习库,但是老师希望能理解线性回归的原理,而不是盲目地调用scikit-learn的函数。

3.1 选择合适的特征

  最简单的特征工程就是“选择合适的特征”。比如下图中,原始特征应该为房子所在地块的长度(frontage)和宽度(depth),但占地面积(frontage × depth)应该是更符合直观的特征,于是就利用两个原始特征创造出了新的特征。

图1-2-8 创造新的特征

3.2 多项式回归

  另一种特征工程就是对某个特征进行幂次,进而实现使用非直线来拟合数据,也就是“多项式回归(Polynomial Regression)”。比如给出下图中红叉所示的训练样本,显然用直线拟合并不符合直观,于是:

  • 二次函数拟合:虽然前半段看起来很好,但是终归会下降,这不符合“面积越大,房子越贵”的常识。
  • 三次函数拟合:符合直觉,但后面房价随面积快速上升。
  • 开根号拟合:符合直觉,房价随着面积缓慢上升。

注:幂次越高,特征缩放就显得越重要,否则参数的为微小变化将引起代价函数的剧烈波动,很可能会导致算法无法收敛。

图1-2-9 多项式拟合——二次拟合、三次拟合、开根号拟合

在Course2中将介绍如何挑选不同的特征,现在只是明确用户可以挑选特征,并且使用“特征工程”和“多项式函数”可以拟合出曲线,来更加贴合样本。

  1. Which of the following is a valid step used during feature scaling?
    × Add the mean (average) from each value and and then divide by the (max - min).
    √ Subtract the mean (average) from each value and then divide by the (max - min).

  2. Suppose a friend ran gradient descent three separate times with three choices of the learning rate α \alpha α and plotted the learning curves for each (cost J J J for each iteration). For which case, A or B, was the learning rate a likely too large?
    √ case B only.
    × Both Cases A and B.
    × case A only.
    × Neither Case A nor B.

  3. Of the circumstances below, for which one is feature scaling particularly helpful?
    × Feature scaling is helpful when all the features in the original data (before scaling is applied) range from 0 to 1.
    √ Feature scaling is helpful when one feature is much larger (or smaller) than another feature.
    注:本题想表达的意思是,原始特征值范围都在0~1附近时,就没必要进行特征缩放了。

  4. You are helping a grocery store predict its revenue, and have data on its items sold per week, and price per item. What could be a useful engineered feature?
    √ For each product, calculate the number of items sold times(乘) price per item.
    × For each product, calculate the number of items sold divided(除) by the price per item.

注:C1_W2_Linear_Regression包含单变量线性回归、多线线性回归的练习题,值得一做。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python中的Slice函数:灵活而强大的序列切片技术

更多资料获取 📚 个人网站:ipengtao.com Python中的Slice函数是一种强大且灵活的序列切片技术,用于从字符串、列表、元组等序列类型中提取子集。本文将深入研究Slice函数的功能和用法,提供详细的示例代码和解释,帮助读…

MAVEN冲突解决

MAVEN冲突解决 1.安装下面这个插件 2.安装成功点击pom文件 dependency analyzer标志,说明maven helper插件就安装成功 3.点击dependency analyzer之后就会进入到下面的页面 4.标记红色就是版本冲突,右击complie,排除不是使用的 5.POM 文件…

CISO在2024年应该优先考虑七项安全任务

专业安全媒体CyberTalk.org主编Shira Landau日前表示:现代企业的CISO们在2024年必须做出改变,要更多关注于企业整体安全路线图的推进与实现,让网络安全工作与业务发展目标保持更紧密的一致性。 首席信息安全官(CISO)是…

行行AI董事长李明顺:今天每个人都可以成为AI应用的创业者

“ AI创业的核心在于真正介入到应用层面,AI应该成为真正的应用支撑。 ” 整理 | 王娴 编辑 | 云舒 出品|极新 2023年11月28日,极新AIGC行业峰会在北京东升国际科学园顺利召开,行行AI董事长李明顺先生在会上做了题为《从大模型…

解决CentOS下PHP system命令unoconv转PDF提示“Unable to connect or start own listener“

centos系统下,用php的system命令unoconv把word转pdf时提示Unable to connect or start own listene的解决办法 unoconv -o /foo/bar/public_html/upload/ -f pdf /foo/bar/public_html/upload/test.docx 2>&1 上面这个命令在shell 终端能执行成功&#xff0c…

BootStrap完整页面尝试(感兴趣的同学可以做)

试采用BootStrap技术或者htmlcss,完成以下页面。 题目为选做,有兴趣的同学可以尝试。

C++:类和对象(中)

1.类的6个默认成员函数: 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现&#xff…

Linux常用命令——cd命令

文章目录 1. 简介2. 命令参数3. 常见用法与实例3.1 基本用法3.2 使用绝对路径或相对路径3.3 使用特殊字符3.4 使用参数 4. 总结 1. 简介 cd命令是Linux系统中最基础且频繁使用的命令之一,用于改变当前工作目录。它是“change directory”的缩写,对于任何…

Java中的JMX的使用

文章目录 1. 定义和存在的意义2. 架构2.1 Instrumentation2.2 JMX Agent2.3 Remote Management 3. 启动和连接3.1 注册MBean3.2 有两个方式启动JMX Agent3.3 Remote Management(客户端) 4. MBeanServerConnection使用4.1 列出所有的MBean4.2 列出所有的Domain4.3 MBean计数4.4 …

拼多多工作制;奥特曼回归;拼多多市值;雷军回应组装厂;| 每日科技小评

今日科技圈速览 马斯克称人工智能比核弹更危险奥特曼完整备忘录曝光 :未来发展有三大优先事项AI(人工智能)新锐巨头OpenAI的新董事会或许没有给投资者留下一席之地阿里巴巴市值又反超拼多多,长远来看拼多多和阿里巴巴哪个市值高&…

【教学类-06-12】20231126 (一)二位数 如何让加减乘除题目从小到大排序(以1-20之间加法为例,做正序排列用)

结果展示 优化后 优化前 背景需求: 生成列表 单独抽取显示题目排序方法 存在问题: 我希望 00 01 02……这样排序,但是实际上,除了第一个加数会从小到大排序,第二个被加数的第十位数和个位数都会从小到大排序,也就是…

防爆执法记录仪、防爆智能安全帽助力海上钻井平台远程可视化监管平台建设

推动远程安全管理,海上钻井"视"界拓新—防爆执法记录仪与防爆智能安全帽的创新应用 在海上钻井作业领域,安全生产一直是萦绕在每一个业者心头的重大课题。由于环境的恶劣及作业的特殊性,一旦发生安全事故,其后果往往极…