算法工程师面试八股(搜广推方向)_算法岗八股,2024年最新成功入职头条月薪35K

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
img

正文

yi​。均值为 β,方差为 γ(其中偏移 β 和尺度变换 γ 为需要学习的参数)。该过程有利于数据分布和权重的互相协调。

区别:

  • 从操作上看:BN是对同一个batch内的所有数据的同一个特征数据进行操作;而LN是对同一个样本进行操作。
  • 从特征维度上看:BN中,特征维度数=均值or方差的个数;LN中,一个batch中有batch_size个均值和方差。

关系:

  • BN 和 LN 都可以比较好的抑制梯度消失和梯度爆炸的情况。BN不适合RNN、transformer等序列网络,不适合文本长度不定和batchsize较小的情况,适合于CV中的CNN等网络;
  • 而LN适合用于NLP中的RNN、transformer等网络,因为sequence的长度可能是不一致的。
  • 如果把一批文本组成一个batch,BN就是对每句话的第一个词进行操作,BN针对每个位置进行缩放就不符合NLP的规律了。

小结:

  • 经过BN的归一化再输入激活函数,得到的值大部分会落入非线性函数的线性区,导数远离导数饱和区,避免了梯度消失,这样来加速训练收敛过程。
  • 归一化技术就是让每一层的分布稳定下来,让后面的层能在前面层的基础上“安心学习”。BatchNorm就是通过对batch size这个维度归一化来让分布稳定下来(但是BN没有解决ISC问题)。LayerNorm则是通过对Hidden size这个维度归一。

【深度学习】batch normalization和layer normalization区别

SVM

为什么要从原问题转换为对偶问题求解?

  • 不等式约束方程需要写成min max的形式来得到最优解。而这种写成这种形式对x不能求导,这种形式只能对拉格朗日乘子

α

\alpha

α求导,所以我们需要转换成max min的形式,这时候,x就在里面了,这样就能对x求导了。而为了满足这种对偶变换成立,就需要满足KKT条件(KKT条件是原问题与对偶问题等价的必要条件,当原问题是凸优化问题时,变为充要条件)。只用求解

α

\alpha

α系数,而

α

\alpha

α系数只有支持向里才非0,其它全部为0。

  • 对偶问题将原始问题中的约束转为了对偶问题中的等式约束
  • 方便核函数的引入,推广到非线性分类问题
  • 改变了问题的复杂度。由求特征向量w转化为求比例系数a,在原始问题下,求解的复杂度与样本的维度有关,即w的维度。在对偶问题下,只与样本数量有关。

SVM从原始问题到对偶问题的转换及原因
SVM中,高斯核为什么会把原始维度映射到无穷多维?

数据不均衡

数据不均衡(如正例很少,负例很多)解决办法:

  1. 欠采样:对负例进行欠采样。一种代表性算法是将负例分成很多份,每次用其中一份和正例一起训练,最后用集成学习综合结果。
  2. 过采样:对正例进行过采样。一种代表性方法是对正例进行线性插值来获得更多的正例。
  3. 调整损失函数:训练时正常训练,分类时将数据不均衡问题加入到决策过程中。例如在我做的文本检测项目中,正常训练,但是判断某个像素是否是文本时

L

o

s

s

=

β

Y

l

o

g

Y

^

(

1

β

)

(

1

Y

)

l

o

g

(

1

Y

^

)

Loss=-\beta{Y}log\hat{Y}-(1-\beta)(1-Y)log(1-\hat{Y})

Loss=−βYlogY−(1−β)(1−Y)log(1−Y),其中Y是样本的标记,

Y

^

\hat{Y}

Y^是预测值,β是负样本和总体样本的比值。通过加入 β和1−β使得数量较少的正样本得到更多的关注,不至于被大量的负样本掩盖。
4. 组合/集成学习:例如正负样本比例1:100,则将负样本分成100份,正样本每次有放回采样至与负样本数相同,然后取100次结果进行平均。
5. 数据增强:单样本增强如几何变换、颜色变换、增加噪声;多样本组合增强如Smote类、SamplePairing、Mixup等方法在特征空间内构造已知样本的邻域值样本;基于深度学习数据增强

特征选择

目标是从原始特征集中选择最相关、最有用的特征,以提高模型性能和泛化能力。常用特征选择方法:

  • 过滤式:独立于学习算法,据特征的统计属性对特征评估和排序。包括相关系数、卡方检验、信息增益、互信息法等。过滤式方法计算快速、简单,适用于高维数据,但可能忽略特征之间的相互关系。
    • 方差选择:计算特征在数据中的方差来判断是否保留。特征方差低于预先设定的阈值,这个特征可能没有足够的变化,对分类回归任务可能没有太大贡献,可以被移除。
    • 相关系数:用来衡量两个变量之间线性关系强度的指标。计算特征与目标变量之间的相关系数,选择与目标变量具有较高相关性的特征。
    • 卡方检验:适用于分类问题中的特征选择。计算特征与目标变量之间的卡方统计量,来衡量特征和目标之间的独立性。选择卡方值较大的特征,与目标变量更相关。
    • 互信息:衡量两个变量之间相关性的指标。计算特征与目标变量之间的互信息,选择与目标变量具有较高互信息的特征。
  • 嵌入式(Embedded):特征选择与学习算法的训练过程结合,特征选择作为学习算法的一部分。在学习算法中直接考虑特征的重要性,通过正则化、惩罚项或决策树剪枝等方式选择特征。嵌入式方法包括L1正则化(Lasso)、决策树的特征重要性、正则化的线性模型等。嵌入式方法可以在模型训练过程中自动选择特征,减少了特征选择的额外计算开销。
  • 包裹式(Wrapper):使用机器学习模型评估特征的重要性。在特征子集上进行交叉验证,选择性能最好的特征子集进行特征选择。基于树模型的方法(如决策树和随机森林)可以评估特征的重要性。树模型通过计算特征在树中的分裂次数和平均分裂增益衡量特征对模型的贡献。它直接使用最终学习算法对每个特征子集进行评估,可以更好地捕捉特征之间的相互作用。包裹式方法包括递归特征消除和遗传算法等。包裹式方法计算开销大、耗时长,适用于小规模数据和特定问题。

排序模型

旨在根据用户偏好和上下文信息,预测每个项目的相关性或排名,为用户提供最相关和个性化的结果。模型输入包括:

  • 特征:描述每个项目的属性和上下文信息,如项目标签、关键词、评分、发布时间、用户特征等。特征可以是离散的、连续的或文本类型的。
  • 用户信息:包括用户历史行为、兴趣偏好、地理位置等,用于个性化推荐和排序。
  • 上下文信息:指在排序过程中可能影响用户偏好的其他因素,如时间、设备类型、浏览环境等。

常见排序模型包括:

  • 点击率预测模型:通过预测用户点击每个项目的概率进行排序。包括逻辑回归、梯度提升树、神经网络等。
  • 排序神经网络:使用神经网络来学习项目之间的相对排名关系。包括RankNet、LambdaRank和ListNet等。
  • 线性模型和特征工程:基于线性模型结合特征工程技术学习特征权重和组合。包括线性回归、排序SVM等。
  • 排序树模型:使用决策树排序,如LambdaMART和GBDT等。
    模型训练中常用损失函数包括交叉熵损失函数、均方误差损失函数、排序损失函数(如NDCG)等。为提高排序模型性能,可以采用特征选择、特征组合、正则化等技术。

树模型进行特征工程的原因

  • 改善模型性能: 特征工程有助于提取更具预测性的特征,可以帮助模型更好地拟合数据,提升模型的预测性能。
  • 降低过拟合风险: 合适的特征工程可以帮助模型更好地泛化到新的数据集上,降低过拟合的风险,提高模型的稳定性和泛化能力。
  • 减少计算复杂度: 特征工程有助于减少特征空间的维度,从而减少计算复杂度,并加速模型的训练和预测过程。
  • 提高可解释性: 通过合理的特征工程,可以使得模型更易于解释和理解,有助于深入理解数据特征对模型预测的影响。
  • 解决特征相关性和噪音问题: 特征工程有助于发现和处理特征之间的相关性和噪音,使模型更加健壮。

GBDT

一种基于boosting增强策略的加法模型,训练时采用前向分布算法进行贪婪学习,迭代地训练一系列弱学习器,并将它们组合成一个强大的集成模型。每次迭代都学习一棵CART树来拟合之前t-1棵树的预测结果与训练样本真实值的残差。

LR和GBDT

LR是线性模型,可解释性强,很容易并行化,但学习能力有限,需要大量的人工特征工程。GBDT是非线性模型,具有天然的特征组合优势,特征表达能力强,但是树与树之间无法并行训练,且树模型很容易过拟合;当在高维稀疏特征的场景下,LR的效果一般会比GBDT好。

RF和GBDT

相同点:都是由多棵树组成,最终的结果都是由多棵树一起决定。
不同点:

  • 集成学习:RF属于bagging思想,而GBDT是boosting思想
  • 偏差-方差权衡:RF不断的降低模型的方差,而GBDT不断的降低模型的偏差
  • 训练样本:RF每次迭代的样本是从全部训练集中有放回抽样形成的,而GBDT每次使用全部样本
  • 并行性:RF的树可以并行生成,而GBDT只能顺序生成(需要等上一棵树完全生成)
  • 最终结果:RF最终是多棵树进行多数表决(回归问题是取平均),而GBDT是加权融合
  • 数据敏感性:RF对异常值不敏感,而GBDT对异常值比较敏感
  • 泛化能力:RF不易过拟合,而GBDT容易过拟合

XGBoost

eXtreme Gradient Boosting用于解决分类和回归问题。基于梯度提升框架,集成多个弱学习器(决策树)逐步改善模型的预测能力。原理:

  • 损失函数:回归问题常用平方损失函数;分类问题常用对数损失函数。
  • 弱学习器:用决策树作弱学习器。决策树是一种基于特征的分层划分,每个节点对应一个特征及其划分条件。XGBoost中决策树通过贪婪算法生成,每次选择最大程度降低损失函数的特征和划分点。
  • 梯度提升:使用梯度提升法集成多个弱学习器。每轮迭代中根据当前模型的预测结果计算损失函数的梯度,并将其作为新目标训练。新弱学习器通过拟合当前目标逐步改进模型预测能力。为控制每个弱学习器的贡献,引入了学习率缩小每轮迭代的步长。
  • 正则化:防止模型过拟合。正则化项由两部分组成:L1正则化(Lasso)和L2正则化(Ridge)。L1正则化使部分特征权重变零,实现特征选择;L2正则化对权重惩罚,降低模型的复杂度。
  • 树剪枝:构建决策树采用自动树剪枝策略。计算每个叶节点的分数与正则化项比较,决定是否剪枝。剪枝过程从树的底部开始,逐步向上剪除对模型贡献较小的分支。
  • 特征重要性评估:提供一种度量特征重要性的方法,评估每个特征对模型预测的贡献程度。训练中会跟踪每个特征被用于划分的次数及划分后带来的增益。计算特征的重要性得分。
二阶泰勒展开优势
  • xgboost是以MSE为基础推导出来的,xgboost的目标函数展开就是一阶项(残差)+二阶项的形式,而其他类似logloss这样的目标函数不能表示成这种形式。为了后续推导的统一,将目标函数进行二阶泰勒展开,就可以直接自定义损失函数了,只要二阶可导即可,增强了模型的扩展性。
  • 二阶信息能够让梯度收敛的更快更准确,类似牛顿法比SGD收敛更快。一阶信息描述梯度变化方向,二阶信息可以描述梯度变化方向是如何变化的。
    xgboost是用二阶泰勒展开的优势在哪?
为什么快<
  • 19
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值