概述
机器学习岗面试题目汇总「持续更新」
- 前情提要
- 交叉熵损失为什么要取log?
- ????逻辑回归LR损失函数梯度推导过程?
- 逻辑回归LR为什么要使用交叉熵损失而不使用均方误差?
- 生成模型与判别模型区别是什么?
- [-] 大规模LR参数稀疏解怎么求?
- 最小二乘法解推导?
- ????最小二乘法和极大似然估计在什么情况下等价?
- 朴素贝叶斯的思想是什么?
- ????Xgboost和GBDT的区别?
- 决策树节点划分方法有哪些?
- 决策树如何剪枝?
- ????说一说SVM?
- LR和SVM的区别?
- 说说传统推荐算法的演化?
- 协同过滤算法了解吗?
- 隐语义模型怎么理解?
- ????说说FM算法?
- TF-IDF算法?
- GBDT+LR的推荐算法思想是怎样的?
- 推荐系统中精度和召回是什么意思?
- 说说推荐系统中的排序算法?
- 怎么解决推荐系统中的冷启动问题?
- Deep & Wide是什么?
- ????DeepFM原理解释?
- Deep & Cross模型?
- NFM模型是哪方面的改进?
前情提要
- 既然都来看面试题目了,默认是有一定基础的,有些简单的东西就不列出来了;
- 有的问题可能我还没有找到合适的解答,就放着了,如果读者有觉得合适的答案,可以评论留言;
- 我就不按照题目内容进行分类了,直接
ctrl+f
就能找到相应的内容; - 我总结了一个word,还挺全面的,包含的内容有C++、Python、机器学习、CV的一些常见面试题,但是还不是很完善,需要,自取https://download.csdn.net/download/weixin_42065178/85192930
- 给大家推荐一个面试大题收录的网站,觉得还不错https://www.julyedu.com/questions/written,只能说比我讲的全面多了,但是答案质量有点参差不齐;
交叉熵损失为什么要取log?
对数的函数图如下(截图来自WolframAlpha),当一个真实标签为1类的样本被预测为0类,我们应该对其进行惩罚,预测概率与真实标签之间的差距越大,也就是x越趋近于0,我们应该赋予它更大的损失,对数函数正好能完成这个任务。
????逻辑回归LR损失函数梯度推导过程?
这个一个很基础的问题,如果答不出来会很掉分。首先要明确,LR使用的激活函数是Sigmoid,它将模型输出值压缩到(0,1)区间,输出一个预测概率值,从而实现分类。使用的损失函数是BCE。我们需要知道Sigmoid的函数:
S
i
g
m
o
i
d
(
z
)
=
1
1
+
e
−
z
,
其
中
z
=
w
x
+
b
Sigmoid(z) = frac{1}{1+e^{-z}}, 其中z=wx+b
Sigmoid(z)=1+e−z1,其中z=wx+b
那么Sigmoid的导数求解为:
S
i
g
m
o
i
d
′
(
z
)
=
1
(
1
+
e
−
z
)
2
∗
(
−
e
−
z
)
=
1
1
+
e
−
z
∗
−
e
−
z
1
+
e
−
z
=
1
1
+
e
−
z
∗
(
1
−
1
1
+
e
−
z
)
=
S
i
g
m
o
i
d
(
z
)
∗
(
1
−
S
i
g
m
o
i
d
(
z
)
)
Sigmoid^{'}(z)=frac{1}{(1+e^{-z})^{2}}*(-e^{-z})\ =frac{1}{1+e^{-z}}*frac{-e^{-z}}{1+e^{-z}}\ =frac{1}{1+e^{-z}}*(1-frac{1}{1+e^{-z}})\ =Sigmoid(z)*(1-Sigmoid(z))
Sigmoid′(z)=(1+e−z)21∗(−e−z)=1+e−z1∗1+e−z−e−z=1+e−z1∗(1−1+e−z1)=Sigmoid(z)∗(1−Sigmoid(z))
BCE的表达式为:
−
B
C
E
=
y
l
o
g
y
^
+
(
1
−
y
)
l
o
g
(
1
−
y
^
)
,
其
中
y
^
=
S
i
g
m
o
i
d
(
z
)
-BCE = ylog ŷ +(1−y)log(1−ŷ ),其中ŷ =Sigmoid(z)
−BCE=ylogy^+(1−y)log(1−y^),其中y^=Sigmoid(z)
面试的时候要真问到这个题,就只写一个样本的推导过程:
−
∂
B
C
E
∂
w
=
∂
B
C
E
∂
y
^
∗
∂
y
^
∂
z
∗
∂
z
∂
w
=
(
y
y
^
+
−
(
1
−
y
)
1
−
y
^
)
∗
S
i
g
m
o
i
d
′
∗
∂
z
∂
w
=
(
y
y
^
+
−
(
1
−
y
)
1
−
y
^
)
∗
(
y
^
∗
(
1
−
y
^
)
)
∗
∂
z
∂
w
=
(
y
∗
(
1
−
y
^
)
−
y
^
∗
(
1
−
y
)
)
∗
x
=
(
y
−
y
^
)
∗
x
=
(
y
−
S
i
g
m
o
i
d
(
z
)
)
∗
x
-frac{partial BCE}{partial w} = frac{partial BCE}{partial ŷ}*frac{partial ŷ}{partial z}*frac{partial z}{partial w}\ =(frac{y}{ŷ}+frac{-(1-y)}{1-ŷ})*Sigmoid^{'}*frac{partial z}{partial w}\ =(frac{y}{ŷ}+frac{-(1-y)}{1-ŷ})*(ŷ *(1-ŷ ))*frac{partial z}{partial w}\ =(y*(1-ŷ)-ŷ*(1-y))*x\ =(y-ŷ)*x\ =(y-Sigmoid(z))*x
−∂w∂BCE=∂y^∂BCE∗∂z∂y^∗∂w∂z=(y^y+1−y^−(1−y))∗Sigmoid′∗∂w∂z=(y^y+1−y^−(1−y))∗(y^∗(1−y^))∗∂w∂z=(y∗(1−y^)−y^∗(1−y))∗x=(y−y^)∗x=(y−Sigmoid(z))∗x
由于在前面取的负数,所以将负号放到等式另一边,最终的BCE导数为下式子,在计算BCE的梯度时,知道输入的值,输入的类别,以及预测概率值,便能计算得到BCE的梯度。且BCE的梯度和激活函数的梯度无关:
B
C
E
′
=
(
S
i
g
m
o
i
d
(
z
)
−
y
)
∗
x
BCE^{'}=(Sigmoid(z)-y)*x
BCE′=(Sigmoid(z)−y)∗x
逻辑回归LR为什么要使用交叉熵损失而不使用均方误差?
结合逻辑回归LR损失函数梯度推导过程,我们也可以对LR使用均方误差时的梯度进行一番推导。依然只考虑一个样本,均方误差为:
M
S
E
=
1
2
∗
(
y
^
−
y
)
2
=
(
y
^
−
y
)
∗
S
i
g
m
o
i
d
′
∗
∂
z
∂
w
=
(
y
^
−
y
)
∗
S
i
g
m
o
i
d
′
∗
x
MSE = frac{1}{2}*(ŷ-y)^2\ =(ŷ-y)*Sigmoid^{'}*frac{partial z}{partial w}\ =(ŷ-y)*Sigmoid^{'}*x
MSE=21∗(y^−y)2=(y^−y)∗Sigmoid′∗∂w∂z=(y^−y)∗Sigmoid′∗x
可以看到,推导到这一步便不可以再往下化简了。推出来的式子和Sigmoid的导数有关,我们知道Sigmoid是存在梯度消失的情况的,当z的值很大时,Sigmoid导数趋近于0,那么我们的参数更新得就会特别慢,这就是问题的原因。
生成模型与判别模型区别是什么?
有个个人观点:面试有些问题其实可以说的不那么深,比如说这个问题,就单纯地把它的区别说出来就好了。所以没必要知道这两者的全部区别,毕竟面试官也记不住全部区别(欢迎讨论)。
-
生成模型
从统计角度出发,估计的是联合概率分布。因为它关注的是数据的产生过程,即x与y的生成关系,不考虑决策边界到底在哪里,只需要找到满足数据的分布模型即可,因而称之为生成模型。常见的生成模型有朴素贝叶斯分类器、马尔可夫模型、高斯混合模型、限制波尔曼机。 -
判别模型
学习的是条件概率分布,希望能找到一个决策边界能够将数据正确分类。常见的判别模型有kNN、决策树、LR、SVM、Boosting方法。
根据两种方法种类多少,我们也能感受到,判别式模型实践性能是要比生成式模型要好的。
[-] 大规模LR参数稀疏解怎么求?
最小二乘法解推导?
最小二乘法使用的是均方误差作为损失函数,如下:
L
o
s
s
=
∑
i
=
1
n
(
a
x
i
+
b
−
y
i
)
2
Loss = sum_{i=1}^{n}(ax_{i}+b-y_{i})^2
Loss=i=1∑n(axi+b−yi)2
a和b的求解,其实就是分别对a和b求导,令导数为0,提取出a和b的表达式即可,建议自己手动推到一遍,别光看别人的解答。
????最小二乘法和极大似然估计在什么情况下等价?
默认极大似然估计是掌握了的。
y是存在随机性的或者说有噪声,我们假设噪声
ε
varepsilon
ε服从高斯分布
N
(
0
,
σ
2
)
N(0,{sigma ^2})
N(0,σ2),那么y表示为
y
=
w
T
x
+
ε
y = w^{T}x + varepsilon
y=wTx+ε,所以条件概率
P
(
y
∣
w
,
x
)
P(y|w,x)
P(y∣w,x)是服从高斯分布的,期望为
w
T
x
w^{T}x
wTx,方差为
σ
2
sigma ^2
σ2,因此我们可以构造出极大似然估计方程:
L
=
∑
i
=
1
N
l
o
g
P
(
y
i
∣
x
i
)
=
∑
i
=
1
N
l
o
g
(
1
2
π
σ
∗
e
x
p
(
−
(
y
−
w
T
x
)
2
2
σ
2
)
)
=
∑
i
=
1
N
l
o
g
(
1
2
π
σ
)
−
(
y
−
w
T
x
)
2
2
σ
2
L = sum_{i=1}^{N}logP(y_{i}|x_{i})\ =sum_{i=1}^{N}log(frac{1}{sqrt{2pi}sigma}*exp(-frac{(y-w^{T}x)^2}{2sigma^2}))\ =sum_{i=1}^{N}log(frac{1}{sqrt{2pi}sigma})-frac{(y-w^{T}x)^2}{2sigma^2}
L=i=1∑NlogP(yi∣xi)=i=1∑Nlog(2πσ1∗exp(−2σ2(y−wTx)2))=i=1∑Nlog(2πσ1)−2σ2(y−wTx)2
如果我们要最大化似然函数,就相当于最小化
(
y
−
w
T
x
)
2
2
σ
2
frac{(y-w^{T}x)^2}{2sigma^2}
2σ2(y−wTx)2,可以看到,这一项就是最小二乘法要优化的东西。所以我们可以得出结论:当噪声服从均值为0的高斯分布的时候,最小二乘法LSE和极大似然估计法MLE是等价的。
朴素贝叶斯的思想是什么?
朴素贝叶斯方法是在贝叶斯算法的基础上进行了相应的简化,即假定给定目标值时属性之间相互条件独立。也就是说没有哪个属性变量对于决策结果来说占有着较大的比重,也没有哪个属性变量对于决策结果占有着较小的比重。
????Xgboost和GBDT的区别?
Xgboost是基于GBDT改进的梯度提升算法。他们主要有如下区别:
- 传统 GBDT 以 CART (采用 gini 系数计算增益的回归树)作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。
- 传统 GBDT 在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。
- xgboost 在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数等,正则项降低了模型的 方差,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。
- 列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统GBDT的一个特性。
决策树节点划分方法有哪些?
总的来说,划分方法有三种:
- 信息增益,使用信息增益做为节点划分方法的决策树算法叫ID3;
- 信息增益率,使用信息增益率做为节点划分的决策树算法叫C4.5;
- GINI系数,使用GINI系数做为节点划分的决策树算法叫CART;
构建决策树时,每次选择所以还没有作为划分的节点,计算以他们为划分节点时的信息增益、信息增益率、GINI系数,选择使得这些值最大的节点作为当前的划分节点,直到运行到最大的迭代次数或者决策树已经构建到了最大深度时停止迭代。
决策树如何剪枝?
为什么要进行决策树剪枝呢?因为使用训练数据构造的决策树可能对训练集的拟合效果特别好,因为树枝很多,但这样往往会导致对未见过的数据拟合能力差,也就是产生过拟合的现象。我们将简化决策树的过程就叫剪枝。
西瓜书上说明了两种方法(第80页),预剪枝和后剪枝:
- 预剪枝
主要思想是,在生成决策树的过程中,当选择一个划分节点之后,使用验证集决定是否要做这一次划分,如果当前划分能够使得验证集的分类精度没有提升,则禁止划分,如果当前划分能够使得验证集的分类精度提升,则允许划分; - 后剪枝
主要思想是,在决策树生成完成之后,自底向上地对每一个非叶子结点进行考察,也是使用验证集来进行辅助剪枝。决策树已经生成完成,每个划分都是已经确定好了,自底向上,如果当前划分能够使得验证集的分类精度没有提升,则禁剪枝,如果当前划分能够使得验证集的分类精度提升,则允许划分,不做任何操作。
《统计学习方法》的第78页也描述了一个思想,我觉得也可以作为一种剪枝策略:比如说Xgboost中加入的对树叶子结点数的惩罚项,就是希望我们得到的决策树模型不那么复杂,这不就是剪枝的思想吗?
????说一说SVM?
如果说是问,说一说SVM,那么就要知道SVM有哪些主要的方面:思想、推导过程、核函数,以下说说自己对SVM的理解,可能不太对,指正之。
-
思想:在保证能够正确划分数据集的情况下,使得决策边界离支持向量尽可能远。根据思想就可以得到目标函数:
min w , b 1 2 ∣ ∣ w ∣ ∣ 2 s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , ⋅ ⋅ ⋅ , m min_{w,b}frac{1}{2}||w||^{2}\ s.t. y_{i}(w^Tx_{i}+b)ge1,i=1,2,···,m w,bmin21∣∣w∣∣2s.t. yi(wTxi+b)≥1,i=1,2,⋅⋅⋅,m
目标函数中就包含了最大化间隔的思想,这是硬间隔,因为它不容忍样本被划分错误,所有的样本不能被划分到隔离带当中(也就是下图中的margin,图源);当容忍样本划分错误时,这是软间隔,引入一个松弛因子,这个时候样本就能够被划分到下图的margin中。
-
推导:第一步,构造拉格朗日函数;第二步,对w和b求导,并令导数为0,带入原式,可消除w和b,对偶转化,最大化一个不包含参数w和b的式子;第三步,根据KKT条件求解w和b。
- 第一步,拉格朗日函数如下:
L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) ) L(w,b,alpha)=frac{1}{2}||w||^2+sum_{i=1}^{m}alpha_{i}(1-y_{i}(w^Tx_{i}+b)) L(w,b,α)=21∣∣w∣∣2+i=1∑mαi(1−yi(wTxi+b))
其中, α i alpha_{i} αi是拉格朗日乘子,一共有m个,因为有m个样本 - 第二步,求导,对w和b求导的过程就省略了,令导数为0,得到:
w = ∑ i = 1 m α i y i x i b = ∑ i = 1 m α i y i w=sum_{i=1}^{m}alpha_{i}y_{i}x_{i}\ b=sum_{i=1}^{m}alpha_{i}y_{i} w=i=1∑mαiyixib=i=1∑mαiyi
将上面两个式子带入拉格朗日函数,对偶转化(极小问题转化为极大问题),可以得到下式,建议自己手动带入一波:
max α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j s . t . ∑ i = 1 m α i y i = 0 max_{alpha}sum_{i=1}^{m}alpha_{i}-frac{1}{2}sum_{i=1}^{m}sum_{j=1}^{m}alpha_{i}alpha_{j}y_{i}y_{j}x_{i}^Tx_{j}\ s.t. sum_{i=1}^{m}alpha_{i}y_{i}=0\ αmaxi=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxjs.t. i=1∑mαiyi=0 - 第三步:使用KKT条件,可得到一些约束条件,说老实话,看了这么多遍,确实没看懂,就不纠结它了。但是可以说说他的思想:KKT约束条件是说,要么拉格朗日乘子为0,这个时候,对应的样本不会用于计算;要么是支持向量,就是位于最大间隔边上的点会纳入计算。这样,在训练完成后,大部分的样本都不需要保留,只有支持向量会被留下。可解出对应的拉格朗日乘子。最后得出的解是:
w = ∑ i = 1 m α i y i x i b = y j − ∑ i = 1 m α i y i ( x i ∗ x j ) w=sum_{i=1}^{m}alpha_{i}y_{i}x_{i}\ b=y_{j}-sum_{i=1}^{m}alpha_{i}y_{i}(x_{i}*x_{j}) w=i=1∑mαiyixib=yj−i=1∑mαiyi(xi∗xj)
但是我觉得,可能大家都觉得,从吴恩达的机器学习教程中使用铰链损失方面来理解更容易。也就是推导过程中第一步的拉格朗日函数可以理解为,铰链损失加一个正则化项,希望优化这个函数。
- 核函数
在现实任务中,原始样本空间也许并不存在一个能正确划分两类样本的超平面。幸运的是,如果原始空间是有限维,那么一定存在一个高维特征空间使样本可分。这就引出了核函数,它能够将样本映射到更高维度的空间。
SVM关键是选取核函数的类型,主要有线性内核,多项式内核,径向核函数(RBF),sigmoid核。
LR和SVM的区别?
- 相同点:
- LR和SVM都是分类算法
- 如果不考虑核函数,LR和SVM都是线性分类算法,也就是说他们的决策边界都是线性的
- LR和SVM都是监督算法、判别模型
- LR和SVM在学术界和工业界都广为人知并且应用广泛
- 不同点:
- 本质上是loss function不同,LR是对数损失,SVM是hinge损失。loss不同,就有不同的假设前提
- SVM只考虑决策附近的支持向量,而LR则考虑全局的点。这一点我们可以从SVM的损失函数来理解,假设一个样本类别为1,那么,SVM输出大于1的时候,这个样本对损失是没有贡献的,也就是对决策边界无贡献
- 在遇到非线性问题的时候,SVM可采用核函数来解决,但是LR通常情况下是不用这个策略的
- 线性SVM依赖数据表达的距离测度(因此对数据缺失值敏感),所以需要对数据先做normalization,LR不受其影响
- SVM自带正则,LR需要另外在损失函数中添加
说说传统推荐算法的演化?
这里只把图放在这里,后面会有很多推荐算法类的问题。
传统的推荐算法可以分成几个族:
- 协同过滤算法族
- 逻辑回归模型族
- 因子分解机模型族
- 组合模型族
协同过滤算法了解吗?
协同过滤算法(Collaborative Filtering)是最经典的推荐算法,核心思想是:根据用户之前的喜好以及其他兴趣相近的用户的选择来给用户推荐物品。一般选择用皮尔逊相关系数作为相似度度量。它有两种类型:
- 基于基于用户的协同过滤:
给用户推荐和他兴趣相似的其他用户喜欢的物品。比如有一个用户和物品之间的关系矩阵,行表示用户,列表示物品,那么基于用户的协同过滤算法就计算用户之间的相似度,选取相似度高的用户的值,赋予被推荐的用户。
但是基于用户的协同过滤存在一些问题:a、对于一个新用户,很难找到相似的其他用户;b、对于一个新物品,所有用户都没给他打分,怎么推荐?c、稀疏,计算量大。 - 基于物品的协同过滤算法:
给用户推荐和他之前喜欢的物品相似的物品。基于基于用户的协同过滤存在上述的缺陷,因为转为基于物品的协同过滤算法。还是有那么一个矩阵,我们这次计算物品之间的相似度,相似度高,则推荐给用户。
它存在如下优势:计算性能高,用户数大于物品数。
隐语义模型怎么理解?
隐语义模型LFM(Latent Factor Model),其核心思想就是通过隐含特征联系用户兴趣和物品。过程分为三个部分,将物品映射到隐含分类,确定用户对隐含分类的兴趣,然后选择用户感兴趣的分类中的物品推荐给用户。隐语义模型在Top-N推荐中的应用十分广泛。其中MF(矩阵分解、Matrix Factorization)是常用的隐语义模型。
还是那个用户和物品之间的关系矩阵V,我们令其为
V
=
W
∗
H
V=W*H
V=W∗H。其中,W的大小为m×r,H的大小为r×n。在隐语义模型中,W(i,j)被解释为用户i属于类别j的权重,H(a,b)被解释为物品b属于类别a的的权重,r为隐因子。对于一个用户,其权重最大的类别被看作是该用户的类别。由于设定共有r个隐含的分类,分类结果也是r个分类。模型要学习的就是W矩阵和H矩阵。人可能理解不了这两个矩阵,但是计算机能理解。
引申一点:这个有点像PCA降维,也用到了特征值分解、奇异值分解,具体什么关系,可以捋一捋。
????说说FM算法?
FM(Factorization Machine)是基于POLY2算法,引入矩阵分解的思想,解决POLY2的一些缺陷,比如特征稀疏的问题。这里给出两个算法的数学模型,首先是POLY2:
z
=
w
0
+
∑
j
=
1
n
w
j
x
j
+
∑
i
=
1
n
−
1
∑
j
=
i
+
1
n
w
i
j
x
i
x
j
z=w_{0}+sum_{j=1}^{n}w_{j}x_{j}+sum_{i=1}^{n-1}sum_{j=i+1}^{n}w_{ij}x_{i}x_{j}
z=w0+j=1∑nwjxj+i=1∑n−1j=i+1∑nwijxixj
然后是FM:
z
=
w
0
+
∑
j
=
1
n
w
j
x
j
+
∑
i
=
1
n
−
1
∑
j
=
i
+
1
n
<
v
i
,
v
j
>
x
i
x
j
z=w_{0}+sum_{j=1}^{n}w_{j}x_{j}+sum_{i=1}^{n-1}sum_{j=i+1}^{n}<v_{i},v_{j}>x_{i}x_{j}
z=w0+j=1∑nwjxj+i=1∑n−1j=i+1∑n<vi,vj>xixj
FM的数学基础是:当k足够大时,对于任意对称正定实矩阵W,均存在V,使得
W
=
V
V
T
W=VV^T
W=VVT。可以看到,FM其实就是对POLY中的
w
i
,
j
w_{i,j}
wi,j进行了一个矩阵分解。
FM有以下优点:
- 极大地降低了训练开销, O ( n 2 ) − > O ( k n ) O(n^2)->O(kn) O(n2)−>O(kn)
- 隐向量的引入,使得FM能更好地解决数据稀疏性的问题
- FM模型是利用两个特征的Embedding做内积得到二阶特征交叉的权重,那么我们可以将训练好的FM特征取出离线存好,之后可以用来做拓展。
TF-IDF算法?
TF-IDF(term frequency–inverse document frequency)主要思想是:如果某个单词在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
具体计算方法如下:
T
F
=
n
i
,
j
∑
k
n
k
,
j
I
D
F
=
l
o
g
∣
D
∣
∣
j
:
t
i
∈
d
j
∣
T
F
−
I
D
F
=
T
F
∗
I
D
F
TF=frac{n_{i,j}}{sum_{k}n_{k,j}}\ IDF=logfrac{|D|}{|{j:t_{i}}in d_{j}|}\ TF-IDF = TF*IDF
TF=∑knk,jni,jIDF=log∣j:ti∈dj∣∣D∣TF−IDF=TF∗IDF
其中,TF表示一个词在文档中出现的概率,出现的次数越多,TF越大,
n
i
,
j
n_{i,j}
ni,j表示在文档j中,第i个单词出现的次数;IDF表示表示逆文档频率,即总的文档数除上包含该词的文档数的对数,包含一个词的文档数越少,那么IDF越大,这个词就越具有辨别性。
GBDT+LR的推荐算法思想是怎样的?
GBDT在这个算法里面作用是生成新的特征:因为GBDT会生成很多颗树,在树构建好之后,我们的一个特征在树里面会落到不同的叶子节点,然后把这些特征用one-hot向量表示,并把不同子树的one-hot向量连接,就生成了一个新特征。在GBDT中,可以把树的生成过程理解成自动进行多维度的特征组合与特征筛选的过程。然后就是将这个生成的心特征放进R里面进行分类。如下图,图源水印:
优点:1.大大提升了特征工程模型化这一重要趋势,这意味着特征工程可以完全交由一个独立的模型来完成,模型的输入可以是原始的特征向量,不必在特征工程中投入过多的人工筛选和模型设计的精力。2.在一定程度上解决了高阶特征交叉的问题。
推荐系统中精度和召回是什么意思?
精度是检索出相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率;在分类中可以理解为,返回的阳性样本中,正确的阳性样本所占的比例。
召回率是指检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率。在分类中可以理解为,所有的阳性样本中,正确分类为阳性样本的比例。
说说推荐系统中的排序算法?
推荐系统通常分为两个阶段,首先召回,其次排序。我目前的理解是这样的:召回模型,就是对用户的行为或者是物品进行编码,得到一个embedding;排序模型是对得到的embedding模型进行一个分类,得到一个预测概率值,选择K个做为推荐结果。所以,排序算法的历程就是:LR-》FM-》DeepFM。
怎么解决推荐系统中的冷启动问题?
推荐系统需要根据用户的历史行为和兴趣预测用户未来的行为和兴趣,对于BAT这类大公司来说,它们已经积累了大量的用户数据,不发愁。但是对于很多做纯粹推荐系统的网站或者很多在开始阶段就希望有个性化推荐应用的网站来说,如何在对用户一无所知(即没有用户行为数据)的情况下进行最有效的推荐呢?这就衍生了冷启动问题。(就相当于基于用户的协同过滤算法中存在的缺陷一样,即改算法不能解决冷启动问题)。
有一些解决方案,如下:
- 提供非个性化的推荐,比如微博热搜;
- 利用用户注册信息;
- 选择合适的物品启动用户的兴趣,还是得利用用户注册时的选择信息;
- 利用用户在其他地方已经沉淀的数据进行冷启动;
- 利用用户的手机等兴趣偏好进行冷启动,这需要用户的权限。
Deep & Wide是什么?
提出的动机:利用手工构造的交叉特征会使得模型具有记忆性,会得到一个不错的效果。但是构建手工特征会非常耗时,那我们希望有模型能够自动构建特征,从而加强特征的泛化能力。简单的模型,比如说协同过滤算法有较好的特征组合能力,但是无法学习潜在关联;FM模型能够学习潜在关联,但是对于特定场景过度泛化。所以Deep & Wide就是想融合这两种算法的优势!
可以从图中看到,左边为wide,右边为Deep。Wide希望记忆能力好,Deep希望泛化能力好。Wide是一些组合特征,
W
T
X
+
b
W^TX+b
WTX+b,一些高稀疏的离散特征;Deep部分就是神经网络,Deep部分的输入是每个域的特征,比如说用户下载的APP特征、用户设备类型特征、用户之间的关系,每个域都有一个特定维度的特征,需要进行embedding;最后将两部分的内容组合起来。这是一个架构后续的一些工作改进,就是基于wide、deep两部分的改进。
????DeepFM原理解释?
我就被问到过这个问题。
后面的问题都是基于神经网络的推荐算法,这里先把图给弄上来。
对于一个基于CTR(Click-Through-Rate,点击通过率)预估的推荐系统,最重要的是学习到用户点击行为背后隐含的特征组合。在不同的推荐场景中,低阶组合特征或者高阶组合特征可能都会对最终的CTR产生影响。FM通过对于每一维特征的隐变量内积来提取特征组合。最终的结果也非常好。但是,虽然理论上来讲FM可以对高阶特征组合进行建模,但实际上因为计算复杂度的原因一般都只用到了二阶特征组合。那么对于高阶的特征组合来说,我们很自然的想法,通过多层的神经网络即DNN去解决。
说白了,就是图中所说的,使用FM替换wide & deep中wide部分的LR。需要注意的是:
- Inpute层在wide和deep部分是共享的,不像之前的wide&deep那样分别设计;
- Dense层的特征权重,只由Deep部分进行更新。
Deep & Cross模型?
是基于Deep & Wide进行的改进。因为Deep & Wide存在一个缺点,在Wide部分,需要人工进行特征筛选,二阶交叉,我们希望自动特征筛选,高维特征交叉,因此Deep & Cross替换了Deep & Wide中的Wide部分。
dense特征是数值型的。图左边的公式,每一层都会加上原来这一层的输入,有种残差CNN的味道;都会和第0层的输入进行特征交叉(实现高阶特征交叉,解决只有二阶特征交叉的问题)。
NFM模型是哪方面的改进?
Nerual FM。是针对FM模型提出来的,是FM模型的神经网络化尝试:即将FM的二阶交叉项做为Deep模型的输入,以此加强模型的表达能力,改动的是Deep & Wide中的Deep部分。最主要的贡献就是特征交叉池化层。
最后
以上就是酷酷裙子为你收集整理的机器学习岗面试题目汇总「持续更新」前情提要交叉熵损失为什么要取log?????逻辑回归LR损失函数梯度推导过程?逻辑回归LR为什么要使用交叉熵损失而不使用均方误差?生成模型与判别模型区别是什么?[-] 大规模LR参数稀疏解怎么求?最小二乘法解推导?????最小二乘法和极大似然估计在什么情况下等价?朴素贝叶斯的思想是什么?????Xgboost和GBDT的区别?决策树节点划分方法有哪些?决策树如何剪枝?????说一说SVM?LR和SVM的区别?说说传统推荐算法的演化?协同过滤算法了解吗?隐语义模型的全部内容,希望文章能够帮你解决机器学习岗面试题目汇总「持续更新」前情提要交叉熵损失为什么要取log?????逻辑回归LR损失函数梯度推导过程?逻辑回归LR为什么要使用交叉熵损失而不使用均方误差?生成模型与判别模型区别是什么?[-] 大规模LR参数稀疏解怎么求?最小二乘法解推导?????最小二乘法和极大似然估计在什么情况下等价?朴素贝叶斯的思想是什么?????Xgboost和GBDT的区别?决策树节点划分方法有哪些?决策树如何剪枝?????说一说SVM?LR和SVM的区别?说说传统推荐算法的演化?协同过滤算法了解吗?隐语义模型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复