2021 年 4 月份,京东算法岗面试题 4 道

文末彩蛋:七月在线干货组最新升级的《2021 大厂最新 AI 面试题 [含答案和解析, 更新到前 105 题]》免费送!

问题 1:介绍逻辑回归,逻辑回归是一个分类算法,那么它是在回归什么呢?

逻辑回归是在数据服从伯努利分布的假设下,通过极大似然的方法,运用梯度下降法来求解参数,从而达到将数据二分类的目的。

逻辑回归就是一种减小预测范围,将预测值限定为[0,1]间的一种广义线性回归模型,解决的是分类问题。

更多请看七月在线题库里的这题:
https://www.julyedu.com/questions/interview-detail?kp_id=23&cate=%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0&quesId=983

问题 2:编程题:颜色分类(leetcode 75)

思路一:单指针

对数组进行两次遍历,考虑使用单指针 ptr 进行遍历,第一次遍历中需要把所有的 0 交换到数组的头部,每交换一次,ptr 向右移动一位,直到遍历结束,此时 ptr 之前的元素都为 0;第二次遍历从 ptr 开始遍历,将所有的 1 交换到中间位置,每交换一次,ptr 向后移动一位,直到遍历结束,此时 ptr 之后(包括 ptr)的元素都为 2,排序完成。

代码:

2021 年 4 月份,京东算法岗面试题 4 道

时间复杂度:O(n),其中 nn 是数组 nums 的长度。

空间复杂度:O(1)。

思路二:双指针

相比单指针只需要一次遍历即可完成。需要指针 p0 来交换等于 0 的元素,指针 p1 来交换等于 1 的元素,需要特别注意的如下:

先判断元素是否等于 1,满足等于 1 就进行交换,并将 p1 + 1,再判断是否等于 0 ,如果等于 0 也相应进行交换,另外需要判断 p0 和 p1 的关系,如果满足 p0 < p1,还需要再次进行交换,完成后将 p0 和 p1 同时 +1。

代码如下:

2021 年 4 月份,京东算法岗面试题 4 道

时间复杂度:O(n),其中 nn 是数组 nums 的长度。

空间复杂度:O(1)。



问题 3:GBDT 了解吗?基分类器用的什么?分类时也是用的那个吗?

GBDT 是梯度提升决策树,是一种基于 Boosting 的算法,采用以决策树为基学习器的加法模型,通过不断拟合上一个弱学习器的残差,最终实现分类或回归的模型。关键在于利用损失函数的负梯度在当前模型的值作为残差的近似值,从而拟合一个回归树。

GBDT 的基分类器用的是决策树,分类时也是用的决策树。那也不得够花呀

对于分类问题:常使用指数损失函数;对于回归问题:常使用平方误差损失函数(此时,其负梯度就是通常意义的残差),对于一般损失函数来说就是残差的近似。

更多请看七月在线题库里的这题:
https://www.julyedu.com/questions/interview-detail?quesId=2591&cate=%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0&kp_id=23

问题 4:XGBoost 相对 GBDT 原理上有哪些改进。

改进主要为以下方面:

传统的 GBDT 以 CART 树作为基学习器,XGBoost 还支持线性分类器,这个时候 XGBoost 相当于 L1 和 L2 正则化的逻辑斯蒂回归(分类)或者线性回归(回归);

传统的 GBDT 在优化的时候只用到一阶导数信息,XGBoost 则对代价函数进行了二阶泰勒展开,得到一阶和二阶导数;

XGBoost 在代价函数中加入了正则项,用于控制模型的复杂度。从权衡方差偏差来看,它降低了模型的方差,使学习出来的模型更加简单,放置过拟合,这也是 XGBoost 优于传统 GBDT 的一个特性;

shrinkage(缩减),相当于学习速率(XGBoost 中的 eta)。XGBoost 在进行完一次迭代时,会将叶子节点的权值乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。(GBDT 也有学习速率);

列抽样:XGBoost 借鉴了随机森林的做法, 支持列抽样, 不仅防止过 拟合,还能减少计算;

对缺失值的处理: 对于特征的值有缺失的样本,XGBoost 还可以自动 学习出它的分裂方向;

XGBoost 工具支持并行。Boosting 不是一种串行的结构吗?怎么并行 的?注意 XGBoost 的并行不是 tree 粒度的并行,XGBoost 也是一次迭代完才能进行下一次迭代的(第 t 次迭代的代价函数里包含了前面 t-1 次迭代的预测值)。XGBoost 的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost 在训练之前,预先对数据进行了排序,然后保存为 block 结构,后面的迭代 中重复地使用这个结构,大大减小计算量。这个 block 结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。

更多请看七月在线题库里的这题:
https://www.julyedu.com/questions/interview-detail?kp_id=23&cate=%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0&quesId=3146

评论区回复 “105”,七月在线干货组最新升级的《2021 大厂最新 AI 面试题 [含答案和解析, 更新到前 105 题]》,免费送!

持续无限期更新大厂最新面试题,AI 干货资料,目前干货组汇总了今年 3 月-6 月份,各大厂面试题。

2021 年 4 月份,京东算法岗面试题 4 道

2021 年 4 月份,京东算法岗面试题 4 道PDF 部分截图如上


本文地址:https://www.6aiq.com/article/1626197366563
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出