卷了两年,终上岸滴滴机器学习算法岗!
↓推荐关注↓
大家好,我是城哥。
今天分享一位星球成员的算法岗上岸之旅,他没有985的背景,但很喜欢算法岗,最终成功拿下滴滴机器学习算法岗。
我把面试题进行了梳理,分享给大家,希望对后续找工作的朋友有所帮助。喜欢记得点赞、收藏、关注。更多技术交流&面经学习,可以文末加入我们交流群。
问题1:样本不平衡问题怎么处理的,有什么方法?
-
重采样方法:通过欠采样(随机删除多数类样本)或过采样(复制少数类样本或生成合成样本)来平衡样本分布。常见的方法包括随机欠采样、SMOTE(Synthetic Minority Over-sampling Technique)等。
-
类别权重调整:通过调整分类算法中不同类别的权重,使得分类器更加关注少数类样本。一些分类算法(如逻辑回归、支持向量机)提供了设置类别权重的参数。
-
集成方法:使用集成学习算法,如随机森林或梯度提升树(例如XGBoost和LightGBM),能够处理样本不平衡问题。这是因为集成算法可以从多个子模型中综合考虑不同类别的情况。
问题2:快速排序时间复杂度?稳定性怎么样?为什么是不稳定的
快速排序(QuickSort)的平均时间复杂度为O(n log n),最坏情况下的时间复杂度为O(n^2)。快速排序的稳定性取决于具体的实现方式。通常情况下,快速排序是不稳定的,因为在分区过程中,元素的相对顺序可能会改变。
快速排序的不稳定性是由于分区过程中的元素交换操作引起的。在分区过程中,我们选择一个基准元素(通常是第一个或最后一个元素),将小于基准的元素放在基准的左边,大于基准的元素放在基准的右边。在交换元素的过程中,相等元素的相对顺序可能发生改变,从而导致排序结果的不稳定性。
问题3:各种评估指标
-
准确率(Accuracy):分类正确的样本数与总样本数之比。
-
精确率(Precision):在被分类为正例的样本中,真正例的比例。
-
召回率(Recall):在所有正例中,被正确分类为正例的比例。
-
F1分数(F1 Score):精确率和召回率的调和均值,综合考虑了两者。
-
ROC曲线(Receiver Operating Characteristic curve)和AUC(Area Under the Curve):绘制真正例率(TPR)和假正例率(FPR)之间的关系曲线,并计算曲线下面积。
-
混淆矩阵(Confusion Matrix):展示分类结果的四个统计数字:真正例(True Positive, TP)、假正例(False Positive, FP)、真反例(True Negative, TN)和假反例(False Negative, FN)。
问题4:xgboost算法介绍?
XGBoost是一种基于梯度提升树(Gradient Boosting Tree)算法的集成学习模型,它在梯度提升树的基础上进行了优化和改进。
XGBoost的主要特点和优势包括:
-
正则化:XGBoost引入了正则化项来控制模型的复杂度,防止过拟合。它通过控制叶子节点的权重以及树的复杂度来实现正则化,避免单棵树过于复杂。
-
自定义损失函数:XGBoost允许用户自定义损失函数,从而能够灵活地适应不同的任务需求。
-
特征选择:XGBoost通过计算特征的重要性得分,可以帮助识别和选择最具预测能力的特征。
-
高效并行:XGBoost在训练过程中支持并行计算,可以利用多线程和分布式计算加速模型的训练。
-
缺失值处理:XGBoost能够自动学习如何处理缺失值,无需对缺失值进行特殊处理。
-
特征交叉:XGBoost支持特征交叉,可以通过组合特征创建新的特征,提升模型的表达能力。
问题5:评分卡建模全流程?
-
数据准备:收集并清洗需要建模的数据,包括缺失值处理、异常值处理、变量转换等。
-
变量选择:通过特征分析、相关性分析、变量筛选方法(如IV值、WOE值)等,选择最具预测能力的变量作为建模输入。
-
数据切分:将数据集切分为训练集和验证集(测试集),用于模型训练和验证。
-
建立评分卡模型:根据业务需求选择适当的分类算法,如逻辑回归、决策树等,建立评分卡模型。在建模过程中,需要进行特征工程、变量转换、变量融合等步骤。
-
模型评估和验证:使用验证集对模型进行评估,包括计算评分卡的各项指标,如准确率、精确率、召回率、F1分数等。根据评估结果对模型进行调优和验证。
问题6:是否熟悉 transformer 的架构
Transformer 本身是一个典型的encoder-decoder模型,Encoder端和Decoder端均有6个Block,Encoder端的Block包括两个模块,多头self-attention模块以及一个前馈神经网络模块;Decoder端的Block包括三个模块,Masked多头self-attention模块,多头Encoder-Decoder attention交互模块,以及一个前馈神经网络模块;需要注意:Encoder端和Decoder端中的每个模块都有残差层和Layer Normalization层。
问题7:transformer 输出层的 softmax 有什么用
Transformer输出层的softmax用于将模型的输出转换为概率分布,以便进行分类任务。它将模型的最后一层的隐藏状态映射到一个多类别分类任务上的概率分布,使得模型可以计算每个类别的概率,并选择概率最高的类别作为预测结果。
问题8:一个数组返回所有和为k的组合
给定一个数组,返回所有和为k的组合可以通过回溯法或动态规划来实现。以下是一个示例的伪代码,演示如何使用回溯法来找到和为k的组合:
def find_combinations(nums, k):
def backtrack(start, target, path):
if target == 0:
result.append(path)
return
for i in range(start, len(nums)):
if nums[i] <= target:
backtrack(i, target - nums[i], path + [nums[i]])
result = []
backtrack(0, k, [])
return result
- EOF -
作者简介
城哥,公众号9年博主,一线互联网工作10年、公司校招和社招技术面试官,主导多个公司级实战项目(Python、数据分析挖掘、算法、AI平台、大模型等)。
关注我,陪你一起成长,遇见更好的自己。
星球服务
会不定期发放知识星球优惠券,加入星球前可以添加城哥微信:dkl88191,咨询优惠券问题。
加入知识星球后,可以享受7大福利与服务:免费获取海量技术资料、向我 1 对 1 技术咨询、求职指导,简历优化、历史文章答疑(源码+数据)、综合&专业技术交流社群、大模型技术分享、定制专属学习路线,帮你快速成长、告别迷茫。
原创不易,技术学习资料如下,星球成员可免费获取,非星球成员,添加城哥微信:dkl88191,请城哥喝杯星巴克。