机器学习面试题汇总与解析——回归

本章讲解知识点

    1. 什么是回归分析?
    1. 为什么要使用回归分析?
    1. 线性回归
    1. 逻辑回归
    1. 逻辑回归和 Lasso 回归


  • 本专栏适合于Python已经入门的学生或人士,有一定的编程基础。

  • 本专栏适合于算法工程师、机器学习、图像处理求职的学生或人士。

  • 本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。这才是一份面试题总结的正确打开方式。这样才方便背诵

  • 如专栏内容有错漏,欢迎在评论区指出或私聊我更改,一起学习,共同进步。

  • 相信大家都有着高尚的灵魂,请尊重我的知识产权,未经允许严禁各类机构和个人转载、传阅本专栏的内容。


  • 关于机器学习算法书籍,我强烈推荐一本《百面机器学习算法工程师带你面试》,这个就很类似面经,还有讲解,写得比较好。

  • 关于深度学习算法书籍,我强烈推荐一本《解析神经网络——深度学习实践手册》,简称 CNN book,通俗易懂。

  • B站机器学习视频:https://space.bilibili.com/10781175/channel/detail?cid=133301



1. 什么是回归分析?

回归(Regression)是一种统计学习方法,用于预测和建立变量之间的关系。它通过建立一个数学模型来描述自变量(输入)和因变量(输出)之间的关系,以便根据已知的自变量值预测未知的因变量值

通常将这种技术用于预测分析、时间序列建模以及发现变量间的因果关系。例如,我们要研究司机的鲁莽驾驶和其交通事故数量之间的关系,最好的方法就是回归分析。

img

回归分析是建模和分析数据的重要工具。其核心思想是,通过将曲线或直线拟合到数据点,以使各数据点到曲线或直线的距离差最小化。

在回归分析中,常见的回归模型包括线性回归、多项式回归、岭回归、Lasso 回归、逻辑回归等。这些模型使用不同的数学函数和参数来拟合数据并预测因变量的值。


2. 为什么要使用回归分析?

如前所述,回归分析通常用于估计两个或多个变量间的关系。比如我们前面例举的农村主卖水果的例子,农场主希望能够根据水果的大小和成熟程度预测它们的价格。那么,使用回归分析,就可以将水果卖得一个好价钱。

使用回归分析主要有以下优点:

  1. 它可以表明自变量和因变量之间的显著关系

  2. 它可以表明多个自变量对一个因变量的不同影响强度

  3. 回归分析还允许我们去比较用不同尺度衡量的变量之间的相互影响,如价格变化与促销活动数量之间的联系

这些优点都有助于我们排除无关变量,并评估出一组用于构建预测模型的最佳变量。


3. 线性回归

通过市场调查,我们得到一些房屋面积和价格的相关数据。我们想知道,如果给一个新的房屋面积 130m2130m^2,能否根据已知的数据来预测其对应价格是多少呢?如图:

img

为了解决这个问题,我们引入线性回归模型。

首先,我们画出已知数据的散点图:

img

其次,我们模拟出一条直线,让已知的数据点尽量落在直线上或直线周围。如图:

img

最后,我们求出这条直线模型对应的函数公式,然后代入 x=130,即可求得其预测价格 f(x)。

而线性模型公式在这个例子中就是一条直线: f(xi)=wxi+bf(x_i)=wx_i+b。其中,ww 为系数,bb 为截距。

我们现在知道,线性回归就是要找一条直线,并且让这条直线尽可能地拟合图中的数据点。

那么如何得到 wwbb 从而构造这个公式呢?估计如果让 1000 个人来画这条线就会有 1000 种画法,比如:

img
img

所以,我们需要一个评判标准,来评判哪条直线才是最好的。

由此,我们引入损失函数来作为评判标准。

接上面的图两种拟合情况。对于拟合直线 y=0.7925x+15.353y=0.7925x+15.353,以及拟合直线 y=1.245225y=1.2452-25,到底哪一条直线才最“合适”呢?

由此我们引入残差,说白了就是真实值和预测值间的差值(也可以理解为差距、距离)。即算一下实际房价和根据拟合直线的预测房价之间的差距(距离)就行了。

当把所有实际房价和预测房价的差距(距离)算出来然后做个加和,我们就能量化预测房价和实际房价之间的残差。

例如下图中有很多红色小竖线,每一条就是实际房价和预测房价的差距(距离)。

img

残差公式:e=yif(xi)e=y_i-f(x_i)

其中,f(xi)f(x_i) 是预测房价,yiy_i 是真实房价。

损失函数/残差平方和/均方误差(MSE)/欧氏距离之和:

J(w,b)=i=1m(yif(xi))2=i=1m(yiwxib)2(.)J(w,b) =\sum_{i=1}^m (y_i-f(x_i) )^2 =\sum_{i=1}^m (y_i-wx_i-b )^2 \tag{.}

其中,J(w,b)J(w,b) 是损失函数,m 表示样本个数,f(xi)f(x_i) 是预测值,yiy_i 是真实值。

总结,损失函数是衡量回归模型误差的函数,也就是我们要的“直线”的评价标准。

这个函数的值越小,说明直线越能拟合我们的数据。

好了,到这里,我们通过损失函数公式,结合两条直线的参数 w=0.7925,b=15.353w=0.7925, b=15.353w=1.2452,b=25w=1.2452, b=-25,得到第一条拟合线的损失函数 J(w,b)J(w,b) 要比第二条拟合线的损失函数 J(w,b)J(w,b) 小。所以,可以说明,第一条拟合线要比第二条拟合线更“合适”。

但是,我们不应该止步于此,我们要找的不是两者之间的更优解,而应该是所有拟合直线中的最“合适”。

由此,我们引出最小二乘法。

在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线上的欧式距离之和最小。

这套路,不就是已知函数 J(w,b)=i=1m(yif(xi))2=i=1m(yiwxib)2J(w,b) =\sum_{i=1}^m (y_i-f(x_i) )^2 =\sum_{i=1}^m (y_i-wx_i-b )^2,它有两个自变量 wwbb,我们要求解 wwbb,使得这个函数的值最小。求解 wwbb 的过程,美名其曰线性回归模型的最小二乘”参数估计“。

其求解过程无非就是微积分中,将 J(w,b)J(w,b)分别对 wwbb 求导,然后令其导数为 0,便可得到 wwbb 的最优解。此处过程略去,得到:

w=i=1myi(xixˉ)i=1mxi21m(i=1mxi)2b=1mi=1m(yiwxi)(.)w=\frac{\sum_{i=1}^m y_i(x_i-\bar{x})}{\sum_{i=1}^m x_i^2-\frac{1}{m}(\sum_{i=1}^m x_i)^2} \\ b=\frac{1}{m} \sum_{i=1}^m (y_i-wx_i) \tag{.}

wwbb 代入直线公式中 f(xi)=wxi+bf(x_i)=wx_i+b,就得到我们的线性回归模型了。

当然,我们也可以采用梯度下降法来求得参数:

假设 h(x)h(x) 是我们的模型函数, nn 表示参数个数, mm 表示训练集的样本个数,J(w)J(w) 是我们的损失函数,即待优化的目标函数。

h(x)=j=0nwjxjJ(w)=12mi=1m(yihw(xi))2(.)h(x) =\sum_{j=0}^n {w}_j x_j \\ J(w) =\frac{1}{2m} \sum_{i=1}^m (y^i-h_{w}(x^i) )^2 \\ \tag{.}

ww 求偏导,可以得到每个 ww 对应的梯度:

wj=J(w)wj=1mi=1m(yihw(xi))xji(.)\nabla_{w_j}=\frac{\partial J(w)}{\partial {w}_j} =-\frac{1}{m} \sum_{i=1}^m (y^i-h_{w}(x^i) )x_j^i \\ \tag{.}

接着按每个 ww负梯度来更新每个 ww

wj=wj+ηwj(.){w}_j^{*} =w_j + \eta \cdot \nabla_{w_j} \\ \tag{.}

η\eta 是学习率,根据计算得到的梯度信息,按照一定的学习率(learning rate)确定参数更新的步长,然后更新模型的参数。


4. 逻辑回归

关于逻辑回归,可以用一句话来总结:逻辑回归假设数据服从伯努利分布,通过极大似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。

逻辑回归就是基于 sigmoid 函数构建的模型。

前面理解了线性回归后,逻辑回归就很好理解,就是在线性回归输出结果经过 sigmoid 函数,就是逻辑回归

sigmoid 在神经网络中用于二分类,那线性回归输出结果经过 sigmoid 函数是不是就起到了分类的作用了?所以逻辑回归的作用就是分类

公式如下:

z=wTx+bz=w^Tx+b

sigmoid函数:g(z)=11+ezg(z)=\frac{1}{1+e^{-z}}

逻辑回归:hθ(x)=11+ewTxbh_{\theta}(x)=\frac{1}{1+e^{-w^Tx-b}}

损失函数推导

对于分类任务:

P(y=1x;θ)=hθ(x)P(y=0x;θ)=1hθ(x)P(yx;θ)=(hθ(x))y(1hθ(x))1y(.)P(y=1|x;\theta)=h_{\theta}(x) \\ P(y=0|x;\theta)=1-h_{\theta}(x) \\ P(y|x;\theta)=(h_{\theta}(x))^y(1-h_{\theta}(x))^{1-y} \\ \tag{.}

似然函数:L(θ)=i=1m(hθ(xi))yi(1hθ(xi))1yiL(\theta)=\prod_{i = 1}^{m}(h_{\theta}(x_i))^{y_i}(1-h_{\theta}(x_i))^{1-y_i}

对数似然:logL(θ)=i=1m[yiloghθ(xi)+(1yi)log(1hθ(xi))]logL(\theta)=\sum_{i=1}^m[y_ilogh_{\theta}(x_i)+(1-y_i)log(1-h_{\theta}(x_i))]

引入1m-\frac{1}{m},得到损失函数:Loss=1mi=1m[yiloghθ(xi)+(1yi)log(1hθ(xi))]Loss =-\frac{1}{m} \sum_{i=1}^m[y_ilogh_{\theta}(x_i)+(1-y_i)log(1-h_{\theta}(x_i))]

梯度求导

目标函数为J(θ)=1mlogL(θ)J(\theta)=-\frac{1}{m}logL(\theta),求最小值:

J(θ)θ=J(θ)hθ(x)hθ(x)θ=1mi=1m[yi1hθ(xi)hθ(xi)θ(1yi)11hθ(xi)hθ(xi)θ]=1mi=1m[yihθ(xi)(1yi)1hθ(xi)]hθ(xi)(1hθ(xi))xi=1mi=1m[yi(1hθ(xi))(1yi)hθ(xi)]xi=1mi=1m[hθ(xi)yi)]xi(.)\frac{\partial J(\theta)}{\partial \theta}=\frac{\partial J(\theta)}{\partial h_{\theta}(x)} \cdot \frac{\partial h_{\theta}(x)}{\partial\theta}\\ =-\frac{1}{m} \sum_{i=1}^m[y_i \frac{1}{h_{\theta}(x_i)} \frac{\partial h_{\theta}(x_i)}{\partial \theta} - (1-y_i)\frac{1}{1-h_{\theta}(x_i)} \frac{\partial h_{\theta}(x_i)}{\partial \theta}] \\ =-\frac{1}{m} \sum_{i=1}^m[ \frac{y_i}{h_{\theta}(x_i)} - \frac{(1-y_i)}{1-h_{\theta}(x_i)} ] h_{\theta}(x_i)(1-h_{\theta}(x_i))x_i \\ =-\frac{1}{m} \sum_{i=1}^m[ y_i(1-h_{\theta}(x_i)) - (1-y_i)h_{\theta}(x_i)] x_i \\ =-\frac{1}{m} \sum_{i=1}^m[ h_{\theta}(x_i) - y_i)] x_i \\ \tag{.}

每次梯度下降,迭代后的参数:

θj=θjα1mi=1m[hθ(xi)yi)]xi(.)\theta_j^*=\theta_j-\alpha \frac{1}{m} \sum_{i=1}^m[ h_{\theta}(x_i) - y_i)] x_i \tag{.}

α\alpha为学习率


5. 岭回归和 Lasso 回归

多元线性回归:

f(w)=i=1m(yixiTw)2(.)f(w) =\sum_{i=1}^m (y_i-x_i^Tw )^2 \tag{.}

岭回归:

f(w)=i=1m(yixiTw)2+λi=1nwi2(.)f(w) =\sum_{i=1}^m (y_i-x_i^Tw )^2+\lambda \sum_{i=1}^n w_i^2 \tag{.}

从数学表示上看我们可以看出明显的相似性,岭回归的数学表示仅仅是在多元线性回归的基础上增加了一个 L2 惩罚项。

Lasso 回归则是将 λi=1nwi2\lambda \sum_{i=1}^n w_i^2 变为 λi=1nwi\lambda \sum_{i=1}^n |w_i|,即在多元线性回归的基础上增加了一个 L1 惩罚项。



面试题

1. 逻辑回归 LR 详细推导⭐⭐⭐⭐⭐

参考回答

1.基本条件

线性回归:i=0mθixi\sum_{i=0}^m \theta_i x_i

sigmoid函数:g(z)=11+ezg(z)=\frac{1}{1+e^{-z}},求导:g(z)=g(z)(1g(z))g(z)^{'}=g(z)(1-g(z))

逻辑回归:hθ(x)=11+eθTxh_{\theta}(x)=\frac{1}{1+e^{-\theta^T x}}

2.损失函数推导

对于分类任务:

P(y=1x;θ)=hθ(x)P(y=0x;θ)=1hθ(x)P(yx;θ)=(hθ(x))y(1hθ(x))1y(.)P(y=1|x;\theta)=h_{\theta}(x) \\ P(y=0|x;\theta)=1-h_{\theta}(x) \\ P(y|x;\theta)=(h_{\theta}(x))^y(1-h_{\theta}(x))^{1-y} \\ \tag{.}