13. 机器学习——回归

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

本章讲解知识点

    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. 线性回归

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

img

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

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

img

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

img

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

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

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

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

img
img

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

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

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

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

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

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

img

残差公式: e = y i f ( x i ) e=y_i-f(x_i)

其中, f ( x i ) f(x_i) 是预测房价, y i y_i 是真实房价。

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

J ( w , b ) = i = 1 m ( y i f ( x i ) ) 2 = i = 1 m ( y i w x i b ) 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 ( x i ) f(x_i) 是预测值, y i y_i 是真实值。

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

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

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

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

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

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

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

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

w = i = 1 m y i ( x i x ˉ ) i = 1 m x i 2 1 m ( i = 1 m x i ) 2 b = 1 m i = 1 m ( y i w x i ) (.) 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{.}

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

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

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

h ( x ) = j = 0 n w j x j J ( w ) = 1 2 m i = 1 m ( y i h w ( x i ) ) 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{.}

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

w j = J ( w ) w j = 1 m i = 1 m ( y i h w ( x i ) ) x j i (.) \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{.}

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

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

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


4. 逻辑回归

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

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

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

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

公式如下:

z = w T x + b z=w^Tx+b

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

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

损失函数推导

对于分类任务:

P ( y = 1 x ; θ ) = h θ ( x ) P ( y = 0 x ; θ ) = 1 h θ ( x ) P ( y x ; θ ) = ( h θ ( x ) ) y ( 1 h θ ( x ) ) 1 y (.) 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 = 1 m ( h θ ( x i ) ) y i ( 1 h θ ( x i ) ) 1 y i L(\theta)=\prod_{i = 1}^{m}(h_{\theta}(x_i))^{y_i}(1-h_{\theta}(x_i))^{1-y_i}

对数似然: l o g L ( θ ) = i = 1 m [ y i l o g h θ ( x i ) + ( 1 y i ) l o g ( 1 h θ ( x i ) ) ] logL(\theta)=\sum_{i=1}^m[y_ilogh_{\theta}(x_i)+(1-y_i)log(1-h_{\theta}(x_i))]

引入 1 m -\frac{1}{m} ,得到损失函数: L o s s = 1 m i = 1 m [ y i l o g h θ ( x i ) + ( 1 y i ) l o g ( 1 h θ ( x i ) ) ] Loss =-\frac{1}{m} \sum_{i=1}^m[y_ilogh_{\theta}(x_i)+(1-y_i)log(1-h_{\theta}(x_i))]

梯度求导

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

J ( θ ) θ = J ( θ ) h θ ( x ) h θ ( x ) θ = 1 m i = 1 m [ y i 1 h θ ( x i ) h θ ( x i ) θ ( 1 y i ) 1 1 h θ ( x i ) h θ ( x i ) θ ] = 1 m i = 1 m [ y i h θ ( x i ) ( 1 y i ) 1 h θ ( x i ) ] h θ ( x i ) ( 1 h θ ( x i ) ) x i = 1 m i = 1 m [ y i ( 1 h θ ( x i ) ) ( 1 y i ) h θ ( x i ) ] x i = 1 m i = 1 m [ h θ ( x i ) y i ) ] x i (.) \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 α 1 m i = 1 m [ h θ ( x i ) y i ) ] x i (.) \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 = 1 m ( y i x i T w ) 2 (.) f(w) =\sum_{i=1}^m (y_i-x_i^Tw )^2 \tag{.}

岭回归:

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

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

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



面试题

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

参考回答

1.基本条件

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

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

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

2.损失函数推导

对于分类任务:

P ( y = 1 x ; θ ) = h θ ( x ) P ( y = 0 x ; θ ) = 1 h θ ( x ) P ( y x ; θ ) = ( h θ ( x ) ) y ( 1 h θ ( x ) ) 1 y (.) 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 = 1 m ( h θ ( x i ) ) y i ( 1 h θ ( x i ) ) 1 y i L(\theta)=\prod_{i = 1}^{m}(h_{\theta}(x_i))^{y_i}(1-h_{\theta}(x_i))^{1-y_i}

对数似然:

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

- 本专栏适合于Python已经入门的学生或人士,有一定的编程基础。 - 本专栏适合于算法、机器学习求职的学生或人士。 - 本专栏特点: - 本专栏囊括了深度学习、机器学习、NLP、特征工程等一系列知识点的讲解,并且最后总结出了高频面试考点(附有答案)共301道,知识点讲解全面,事半功倍,为大家春秋招助力。不仅如此,教程还讲解了简历制作、笔试面试准备、面试技巧等内容。

全部评论

相关推荐

10-05 11:11
海南大学 Java
投票
理想江南137:感觉挺真诚的 感觉可以试一试
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务