Linear regression 模型在数据科学岗位日常工作中有广泛应用, 同时它也是数据科学岗位面试的常见考点。在资深面试官眼中的数据科学案例分析面试一文中,我们多次提到面试中非常注重求职者对机器学习基础知识点的深刻理解,而 linear regression 就是最重要的基础知识考点之一。在本文中,我们会结合面试例题给大家精炼梳理 linear regression 相关知识,在随后的系列文章中, 我们会逐一讨论与 linear regression 有紧密联系的 logistic regression, softmax regression 等内容。

资深面试官眼中的数据科学案例分析面试
如果你正为数据科学案例分析面试发愁,这篇帮助过上千名求职者的干货文章会为你指明方向. 下面咱们结合广告推荐系统高频题讲讲案例分析面试考什么, 怎么答, 如何准备.

如果你想跟我 (汪淼) 一起体验数据科学面试流程, 为你指导面试备考或者答题过程中的问题, 欢迎报名参加爱思备受好评的数据科学模拟面试服务. 我会结合相应目标公司的出题特点和要求, 根据过去多年的工作/面试经验给同学做针对性辅导, 力求给大家带来最真实的数据科学面试体验和最详尽的面试反馈. 如果你在数据科学领域学习过程中有任何问题, 也欢迎扫描下方的二维码或者搜索 TonyCoding20 添加我的微信, 期待和大家的沟通!

爱思数据科学模拟面试服务
爱思数据科学主讲人汪淼结合十余年硅谷面试官经验, 为你带来最专业的数据科学案例分析模拟面试. 汪淼作为受试者曾斩获FLAGUAP大多数公司数据科学岗位offer, 面试辅导经验丰富, 对数据科学各领域知识理解深刻, 讲课通俗易懂, 曾帮助众多同学斩获大厂offer, 广受好评. 模拟面试限时$299, 等你来约!

Image Description

1. Linear Regression概念介绍

首先,我们用一个非常简单的例子回顾一下 linear regression 的基本概念。以下表格展示了广告 Cost  (daily spend on certain ads platform) 和 Conversions (daily conversion volume from this ads platform) 之间的数据关系:

Cost (x1) Conversions (y)
5488.1 43.2
3834.4 41.0
8326.2 50.8
... ...

在这里先对一些数据符号进行说明:我们用 \(  x^{(i)}_{1} \) 表示训练数据(training data)里第i行观测数据中的 cost。这里的上角标i表示第 \(  i \) 行数据,下角标 \(  1 \) 表示训练数据里的第1个 feature。在上述例子中,我们只有一个 feature  \(  x_{1} \),也就是广告 Cost。在现实应用中我们可以有很多 features, 比如广告的类别,广告的点击率等等,在那些情况下, 我们就会有 \(  x_{2} \), \(  x_{3} \) 等等。\(  y^{(i)} \) 表示训练数据中第i行对应的 Conversions。由于我们这里讨论 linear regression, 因此我们在数据建模时就用以下的 hypothesis function \(  h \) 来通过 \(  x \) 估计 \(  y \):\[ h(x) = \theta_{0} + \theta_{1}x_{1} \]

这里 \(  \theta \) 是函数 \(  h \) 里面的参数 (parameters)。进一步地,我们按照大部分教科书中的写法,把 intercept term \(  x_{0} \)简化为1,从而把 \(  h \) 简写为 \[ h(x) = \sum_{j=0}^{n} \theta_{j}x_{j} = \theta^{T}x \]

这里 n 是训练数据中 features 的个数(在上面的例子中,n的取值是1)。我们在建模过程中要做的, 就是基于选取的函数 \(  h \) 来估计参数的取值,从而对 \(  x \) 与 \(  y \) 之间的关系给出最“准确”的描述。我们用 loss function \(  J(\theta) \) 来描述我们对 \(  y_{i} \) 估计的准确程度。对于 linear regression problem, 我们有很多不同的方法可以用来构造 loss function \(  J(\theta) \),其中最常用的是 Ordinary Least Squares (OLS) 这个 estimator:\[ J(\theta) = \sum_{i=1}^{m} (h(x^{(i)}) - y^{(i)})^{2} \] 公式中 m 表示全部训练数据的行数。

Notes 1: 我们求解 linear regression 中参数的时候, 并不一定要用 Ordinary Least Squares 这个 estimator。Ordinary Least Squares 只是 Least Squares estimation 中的一种方法,除此之外我们还可以用 Weighted Least Squares (WLS),Generalized Least Squares (GLS) 等方法,我们甚至可以抛弃Least Squares, 改用 Least Absolute Deviations (LAD) 来解决 linear regression问题。因此,大家要注意,在我们选用 linear regression作为 model 之后,我们可以选择任意estimator作为 loss function 的定义方法,Ordinary Least Squares不是唯一方法。

基于上面构造出的 loss function \(  J(\theta) \),我们需要利用数值优化方法求出能使 \(  J(\theta) \) 取最小值的参数解 \(  \theta \),相关内容我们会放在文章最后讨论。在这里我们首先需要回答一个问题:为什么 Ordinary Least Squares 是 linear regression 最常用的 loss function 构造方法?下面我们从概率论参数估计方法的角度给出一种解释。

2. 从概率角度理解OLS Linear Regression

首先,我们给出以下3个概率假设 (probabilistic assumptions) [面试常考点]

  1. The dependent variable \(  y \) and independent variable \(  x \) follow the linear form \( y = \theta^{T}x + \epsilon \), where \(  \epsilon \) represents unpredictable random noise.
  2. The error term \(  \epsilon \)  is independently and identically distributed. Additionally, the error term \(  \epsilon \) has a population mean of zero and a constant variance, i.e. \( E(\epsilon) = 0 \), \( Var(\epsilon) = \sigma ^{2} \) .
  3. (Optional) The error term \(  \epsilon \) follows a normal distribution with mean zero and constant variance  \( \sigma ^{2} \).
Note 2: 在assumption 1中我们对error term的unpredictable random noise的定义也同时默认表示there is no correlation between the independent variables \(  x \) and the error term \(  \epsilon \)。在有些资料中,no correlation这一点会被单独列出来。
Note 3: Assumption 3 中对 error term 的 normal distribution assumption 并不是OLS linear regression必需的。只不过 normally distributed error term会使得 OLS 成为 the most efficient linear regression estimator。建议大家在面试时可以直接把这个3个 assumption 都讲出来,在绝大多数情况下面试官是会满意的。 极个别情况下,如果面试官对这个答案提出质疑, 我们可以再进一步讨论第3个 assumption 是 optimal 的。在后文中,我们会默认同时使用这3个 assumptions。

下面我们利用 Maximum Likelihood Estimation 参数估计方法证明:基于上述3个 probabilistic assumptions 得到的 linear regression loss function 与 Ordinary Least Squares estimator 给出的表达式是完全等价的。以下是简化版证明过程[面试常考点]

Given the assumption \( \epsilon \sim N(0, \sigma ^{2}) \), we can get its probability density function as \[ p(\epsilon) =  \frac{1}{\sigma\sqrt{2\pi}}exp\left(-\frac{\epsilon^2}{2\sigma^2}\right).\] It implies that \[ p(y|x;\theta) =  \frac{1}{\sigma\sqrt{2\pi}}exp\left(-\frac{(\theta^{T}x - y)^2}{2\sigma^2}\right).\] Based on the principal of maximum likelihood estimation, we should choose \( \theta \) so as to maximize likelihood function \[ L(\theta) =\prod_{i=1}^{m}  p(y^{(i)}|x^{(i)};\theta). \] In order to simplify our derivations, we maximize its log likelihood as following: \[ \begin{aligned} log L(\theta)  &= mlog\frac{1}{\sigma\sqrt{2\pi}} - \frac{1}{2\sigma^2}\sum_{i=1}^{m}(\theta^{T}x^{(i)}-y^{(i)})^2\end{aligned} \] As we can see here, maximizing \( log L(\theta) \) is the same as minimizing \[\sum_{i=1}^{m}(\theta^{T}x^{(i)}-y^{(i)})^2.\]

我们可以看到这个结果与利用 Ordinary Least Squares estimator 得到的结果完全一致。注意,这并不表示 OLS 就一定是 linear regression 构造 loss function 最好的方法。它只能说明,我们使用 OLS 构造 loss function, 等价于接受了上述三个assumptions。其中第一个 assumption 对应于 linear form, 无需多言。而接受第2, 3个 assumption,就等价于认为数据中的噪声服从 \( \epsilon \sim N(0, \sigma ^{2}) \)。而这个噪声分布在自然界中是最常见(大家可以思考一下, 有什么定理可以支持这个观点?),这就是为什么 OLS 是 linear regression “最常用”的estimator。当然, 如果你通过某些方法了解到你处理的数据中的噪声分布与 normal distribution 差别很大,那么在使用 linear regression 建模时,OLS可能就不是最好的构造 loss function 的方法了。

3. Loss function数值求解

前面我们主要讨论了 linear regression loss function 的构造方法及其合理性。进一步要完成建模过程,我们需要利用数值优化方法求出能使\(  J(\theta) \)取最小值的参数解\(  \theta \),这涉及到 directional derivative, gradient descent algorithm 等相关知识。这部分内容在Data Analyst面试中几乎不会出现,在 Data Scientist 经典机器学习面试中也不是重点内容,但在涉及到 neural network model 的面试,或者 Machine Learning Engineer 面试 ML theory 轮次中会作为考点出现。在本文中,我们不会细致介绍 gradient descent 的概念和公式推导过程,而是主要针对公式结论的物理意义进行一些讨论。

之前我们构造出了 loss function \( J(\theta) = \sum_{i=1}^{m} (h(x^{(i)}) - y^{(i)})^{2}\), 其中 \( h(x^{(i)}) = \sum_{j=0}^{n} \theta_{j}x_{j}^{(i)} \)。下面我们根据 gradient descent 方法的定义,用如下迭代公式求出能使 \( J(\theta) \)取最小值的 \( \theta \): \[ \theta_{j} := \theta_{j} - \alpha \frac{\partial}{\partial \theta_j}J(\theta) \] 这里我们省略掉中间推导过程, 直接给出结论:\[ \theta_{j} := \theta_{j} + \alpha \sum_{i=1}^{m} (y^{(i)} -  h(x^{(i)}))x_{j}^{(i)} \] 这里 \( \alpha\)是learning rate, 它是一个可以调整参数取值更新步长的 hyper-parameter. 这个递推公式有非常直观的物理意义:在每次参数 \(\theta_{j}\) 取值更新时,我们会检查由该参数取值构造出的模型在每一行数据上产生的估计误差 \( (y^{(i)} -  h(x^{(i)})) \)。 如果这个误差大,那么这一行数据就会对参数 \(\theta_{j}\) 的更新产生较大影响。此外,如果在这一行数据中,对应参数 \(\theta_{j}\) 的自变量\( x_{j}^{(i)} \)取值很大, 代表这个自变量很重要,那么 \( x_{j}^{(i)} \) 的取值也会对参数 \(\theta_{j}\) 的更新产生较大影响。类似形式的迭代公式我们在 logistic regression model 中也会见到,在后续文章中会给大家做全面总结。

另外, 在上面的公式中,每一次迭代做参数更新都是使用全部的训练数据(共m行),这种方法对应于 batch gradient descent。为了加速参数求解过程,我们可以减小每次参数更新时使用的训练数据个数,这些方法对应着 mini-batch gradient descent 或者 stochastic gradient descent。这部分内容在面试中有两种考法, 一种是要求写出参数递推公式,另一种是要求通过编程实现整个参数求解过程。其中编程实现的代码并不长,只需要根据递推公式写出for loop循环即可, 因此关键是对参数递推公式的理解。

4. 总结


Linear regression虽然是最简单的机器学习模型,但在数据科学岗位面试中出现的频率并不低,考点主要涉及 model assumptions 的细节以及 loss function 的相关推导和概念理解。本文从统计机器学习角度把相关常见考点进行了梳理汇总, 至于对 Linear regression 参数估计结果的 statistical hypothesis testing 等数理统计的内容,我们会在后续的文章中继续讨论。最后给大家留一个思考题:

Question: 基于本文中提到的 OLS linear regression 的3个基本假设(包含第三个assumption: the error term follows normal distribution), 我们是否可以认为:linear regression assumes the dependent variable \( y \) itself follows normal distribution?

感兴趣的同学可以把你的思路写在下面的留言区。如果大家对于 linear regression 有任何其他问题,也欢迎在下面的留言区一起讨论。也欢迎扫描下方的二维码或者搜索 TonyCoding20 添加我的微信, 期待和大家的沟通!

Image Description