IT评测·应用市场-qidao123.com

标题: 大数据最全算法工程师口试八股(搜广推方向)_算法岗八股,2024年最新网易 [打印本页]

作者: 火影    时间: 2024-8-1 19:18
标题: 大数据最全算法工程师口试八股(搜广推方向)_算法岗八股,2024年最新网易


网上学习资料一大堆,但如果学到的知识不成体系,遇到题目时只是浅尝辄止,不再深入研究,那么很难做到真正的技能提升。
必要这份系统化资料的朋友,可以戳这里获取
一个人可以走的很快,但一群人才华走的更远!不论你是正从事IT行业的老鸟或是对IT行业感爱好的新人,都接待参加我们的的圈子(技能交换、学习资源、职场吐槽、大厂内推、口试辅导),让我们一起学习成长!
E
w
,
b
=

i
=
1
m
(
y
i

1
1

e

(
w
T
x
i

b
)
)
2
E_{w,b}=\sum_{i=1}^{m}\left ( y_{i}-\frac{1}{1+e^{-\left ( w^{T}x_{i}+b \right )}}\right )^2
Ew,b​=∑i=1m​(yi​−1+e−(wTxi​+b)1​)2 ,黑白凸的,不容易求解,会得到局部最优。

l
w
,
b
=

i
=
1
m
(

y
i
(
w
T
x
i

b
)

l
n
(
1

e
w
T
x
i

b
)
)
l_{w,b}=\sum_{i=1}^{m}\left ( -y_{i}\left ( w^{T}x_{i}+b \right )+ln\left ( 1+e{w{T}x_{i}+b} \right ) \right )
lw,b​=∑i=1m​(−yi​(wTxi​+b)+ln(1+ewTxi​+b)) ,是关于 (w,b) 的高阶一连可导凸函数,可以方便通过一些凸优化算法求解,比如梯度下降法、牛顿法等。
优点:
缺点:
推导:

从零开始学会逻辑回归(一)
二分类和多分类的丧失函数

分类题目输出层激活函数丧失函数说明二分类Sigmoid二分类交叉熵丧失函数(binary_crossentropy)sigmoid作为最后一层输出,不能把最后一层的输出看作成一个分布,因为加起来不为1。应将最后一层的每个神经元看作一个分布多分类Softmax多类别交叉熵丧失函数(categorical_crossentropy)Softmax后最后一层输出概率相加为1多标签分类Sigmoid二分类交叉熵丧失函数(binary_crossentropy)计算一个样本各个标签的丧失取平均值。把一个多标签题目转化为在每个标签上的二分类题目
L
=
1
N

i
L
i
=
1
N

i
[
y
i
l
o
g
(
p
i
)

(
1

y
i
)
l
o
g
(
1

p
i
)
]
L=\frac{1}{N}\sum_iL_i=\frac{1}{N}\sum_i[y_ilog(p_i)+(1-y_i)log(1-p_i)]
L=N1​∑i​Li​=N1​∑i​[yi​log(pi​)+(1−yi​)log(1−pi​)]

L
=
1
N

i
L
i
=

1
N

i

c
=
1
M
y
i
c
l
o
g
(
p
i
c
)
L=\frac{1}{N}\sum_iL_i=-\frac{1}{N}\sum_i \sum^M_{c=1}y_{ic}log(p_{ic})
L=N1​∑i​Li​=−N1​∑i​∑c=1M​yic​log(pic​)
二分类和多分类的激活函数和丧失
二分类为什么用交叉熵丧失而不消MSE丧失?


偏差与方差

令y表现数据的label,f(x)表现测试数据的预测值,
f
(
x
)

\overline{f(x)}
f(x)​表现学习算法对所有数据集的期望预测值。则偏差表现期望预测值
f
(
x
)

\overline{f(x)}
f(x)​与标志y之间的差距,差距越大说明偏差越大;而方差是测试预测值f(x)与预测值的期望值
f
(
x
)

\overline{f(x)}
f(x)​之间的差距,差距越大说明方差越大。偏差表征模子对数据的拟合能力;而方差表征数据集的变动导致的学习性能的变化,也就是泛化能力。
Layer Normalization 和 Batch Normalization

“独立同分布”的数据能让人很快地发觉数据之间的关系,因为不会出现像过拟合等题目。为相识决ICS(internal covarivate shift内部协变量漂移)题目,即数据分布会发生变化,对下一层网络的学习带来困难。一般在模子练习之前,必要对数据做归一化。
LayerNorm,对单个样本的所有维度特征做归一化,对模子中每个子层的输入归一化处置惩罚,使得每个特征的均值为0,方差为1。有助于缓解内部协变量偏移的题目,进步模子的练习服从和鲁棒性。
batch normalization是对一批样本的同一纬度特征做归一化。强行将数据转为均值为0,方差为1的正态分布,使得数据分布一致,而且避免梯度消失。而梯度变大意味着学习收敛速度快,能够进步练习速度。设batch_size为m,网络在向前传播时,网络 中每个神经元都有m个输出,BN就是将每个神经元的m个输出进行归一化处置惩罚。

x
ˉ
i
\bar{x}_{i}
xˉi​

y
i
y_i
yi​。均值为 β,方差为 γ(其中偏移 β 和尺度变换 γ 为必要学习的参数)。该过程有利于数据分布和权重的相互和谐。
区别:

关系:

小结:

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

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

α
\alpha
α求导,以是我们必要转换成max min的形式,这时候,x就在里面了,这样就能对x求导了。而为了满足这种对偶变换建立,就必要满足KKT条件(KKT条件是原题目与对偶题目等价的必要条件,当原题目是凸优化题目时,变为充要条件)。只用求解
α
\alpha
α系数,而
α
\alpha
α系数只有支持向里才非0,其它全部为0。

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

数据不均衡(如正例很少,负例很多)办理办法:
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等方法在特征空间内构造已知样本的邻域值样本;基于深度学习数据加强
特征选择

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

排序模子

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

常见排序模子包罗:

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


GBDT

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

LR是线性模子,可表明性强,很容易并行化,但学习能力有限,必要大量的人工特征工程。GBDT黑白线性模子,具有天然的特征组合优势,特征表达能力强,但是树与树之间无法并行练习,且树模子很容易过拟合;当在高维希罕特征的场景下,LR的效果一般会比GBDT好。
RF和GBDT

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

XGBoost

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

二阶泰勒展开优势


为什么快


防止过拟合


处置惩罚缺失值


树停止生长条件


处置惩罚不平衡数据


树剪枝


选择最佳分裂点

XGBoost在练习前预先将特征按照特征值进行了排序,并存储为block布局,以后在结点分裂时可以重复利用该布局。因此,可以接纳特征并行的方法利用多个线程分别计算每个特征的最佳分割点,根据每次分裂后产生的增益,最终选择增益最大的谁人特征的特征值作为最佳分裂点。
如果在计算每个特征的最佳分割点时,对每个样本都进行遍历,计算复杂度会很大,这种全局扫描的方法并不适用大数据的场景。
XGBoost提供了一种直方图近似算法,利用weighted quantile sketch算法近似地找到best split,对特征排序后仅选择常数个候选分裂位置作为候选分裂点。
按比例来选择,从n个样本中抽取k个样本来进行计算,取k个样本中的最优值作为split value,这样就大大镌汰了运算数量。按样本均分会导致loss分布不匀称,取到的分位点会有偏差。我们要均分的是loss,而不是样本的数量。将样本对应的残差二阶导h作为划分依据,将同范围h占比的特征值划分到同一范围内。残差二阶导差别越大的地方,样本分布越希罕,反之则稠密。加权意义在于把候选节点选取的时机更多地让于二阶导更大的地方,同时忽略导数差别小的节点。
Scalable性


当数据量太大不能全部放入主内存的时候,为了使得out-of-core计算称为大概,将数据划分为多个Block并存放在磁盘上。计算时利用独立的线程预先将Block放入主内存,因此可以在计算的同时读取磁盘。但是由于磁盘IO速度太慢,通常更不上计算的速度。因此,必要提升磁盘IO的销量。Xgboost接纳了2个策略:

特征紧张性


调参步调

首先需初始化一些基本变量,如:max_depth = 5, min_child_weight = 1, gamma = 0, subsample, colsample_bytree = 0.8, scale_pos_weight = 1,确定learning rate和estimator的数量 lr可先用0.1,用xgboost.cv()来探求最优的estimators。

过拟合办理方案

有两类参数可以缓解:
直接减小learning rate,但必要同时增加estimator参数。
对缺失值不敏感

对存在缺失值的特征,一般的办理方法是:

一些模子如SVM和KNN,其模子原理中涉及到了对样本距离的度量,如果缺失值处置惩罚不妥,最终会导致模子预测效果很差。而树模子对缺失值的敏感度低,大部分时候可以在数据缺失时时利用。原因是,一棵树中每个结点在分裂时,探求的是某个特征的最佳分裂点(特征值),完全可以不思量存在特征值缺失的样本,如果某些样本缺失的特征值缺失,对探求最佳分割点的影响不是很大。
XGBoost对缺失数据有特定的处置惩罚方法, 因此,对于有缺失值的数据在颠末缺失处置惩罚后:

XGBoost和RF单棵树哪个更深?

RF单颗树更深。Boosting紧张关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成;Bagging紧张关注降低方差,因此它在不剪枝的决策树、神经网络等学习器上效用更为明显。
Bagging算法会并行地练习很多不同的分类器来降低方差variance:
E
[
h

E
(
h
)
]
E[h−E(h)]
E[h−E(h)],因为接纳了相互独立的基分类器多了以后,h的值自然就会靠近E(h)。以是对于每个基分类器来说,目标就是降低偏差bias,以是会接纳深度很深乃至不剪枝的决策树。对于Boosting来说,每一步会在上一轮的基础上更加拟合原数据,以是可以保证偏差bias,以是对于每个基分类器来说,题目就在于怎样选择variance更小的分类器,即更简单的分类器,以是我们选择了深度很浅的决策树。
XGBoost和GBDT


区别:

XGBoost和LightGBM


区别: