上一篇主要包含了部分面试中的常见问题,在我准备知识库期间,腾讯发起了一场突如其来的面试,让我转变了思路,因此有了这一篇的内容。在面试时,面试官没有拘泥于一些被问烂了的面试题,而是一个个的让我介绍各种模型以及它们的优缺点。具体问法类似于,“LR知道吗”,“介绍一下”,“LR有哪些优点”,“LR有哪些缺点”,“RF知道吗”,“介绍一下”,等等。
这场面试让我意识到,除了一些面试常见题,考察对基础模型了解的深度也是展现机器学习功底的有效方法。虽然我能介绍LR,也能很轻松的手推公式,但真被问到了LR有什么优点的时候,只能脱口而出“形式简单速度快”之后再也想不出别的了,这种对基础模型的理解应该是在实际运用中累积起来的,光靠看书推公式没有办法提升,而临近面试最好的办法也只能是把各种模型都准备一遍了,在这个过程中加深理解。
49、介绍一下LR?
①逻辑回归是个二分类模型,它假设数据服从伯努利分布,通过极大化似然估计推导交叉熵损失函数,运用梯度下降来求解参数
②由于激活函数使用了Sigmoid函数,因此输出的值在0~1之间,可以认为是
y
y
y的期望
③逻辑回归的损失函数是交叉熵损失函数
J
(
θ
)
=
−
∑
i
=
1
n
[
y
(
i
)
l
o
g
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
]
J(θ)=-∑_{i=1}^n[y^{(i)}logh_θ(x^{(i)})+(1-y^{(i)})log(1-h_θ(x^{(i)}))]
J(θ)=−∑i=1n[y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))],是由似然函数
L
(
θ
)
=
∏
i
=
1
n
[
h
θ
(
x
(
i
)
)
]
y
(
i
)
[
1
−
h
θ
(
x
(
i
)
)
]
1
−
y
(
i
)
L(θ)=∏_{i=1}^n[h_θ(x^{(i)})]^{y^{(i)}}[1-h_θ (x^{(i)})]^{1-y^{(i)}}
L(θ)=∏i=1n[hθ(x(i))]y(i)[1−hθ(x(i))]1−y(i)取对数后得到的
推导过程:
J
(
θ
)
=
−
Y
T
l
o
g
h
θ
(
X
)
−
(
E
−
Y
)
T
l
o
g
(
E
−
h
θ
(
X
)
)
J(θ)=-Y^Tlogh_θ (X)-(E-Y)^T log(E-h_θ (X))
J(θ)=−YTloghθ(X)−(E−Y)Tlog(E−hθ(X))
δ
J
(
θ
)
δ
θ
=
−
X
T
[
1
h
θ
(
X
)
h
θ
(
X
)
(
E
−
h
θ
(
X
)
)
Y
]
−
X
T
[
1
E
−
h
θ
(
X
)
(
−
h
θ
(
X
)
)
(
E
−
h
θ
(
X
)
)
(
E
−
Y
)
]
\frac{δJ(θ)}{δθ}=-X^T [\frac{1}{h_θ (X)}h_θ (X)(E-h_θ (X))Y]-X^T [\frac{1}{E-h_θ (X)}(-h_θ (X))(E-h_θ (X))(E-Y)]
δθδJ(θ)=−XT[hθ(X)1hθ(X)(E−hθ(X))Y]−XT[E−hθ(X)1(−hθ(X))(E−hθ(X))(E−Y)]
化简得
δ
J
(
θ
)
δ
θ
=
X
T
[
h
θ
(
X
)
−
Y
]
\frac{δJ(θ)}{δθ}=X^T[h_θ (X)-Y]
δθδJ(θ)=XT[hθ(X)−Y]④LR可以看作对数几率的线性回归
⑤LR用于多分类,参考50
⑥在工业界使用LR一般会先进行特征离散化
50、LR如何用于多分类?
①one VS one策略,假设有
K
K
K类,不同类别两两之间训练一个分类器,可得到
C
K
2
C_K^2
CK2个分类器,预测时可得到
K
(
K
−
1
)
K(K-1)
K(K−1)个结果,最终结果通过投票产生
②one VS rest策略,假设有
K
K
K类,根据每个类别训练一个分类器,可得到
K
K
K个分类器
③将逻辑回归改造成Softmax回归,由于参数有冗余,
K
K
K个类别共有
K
−
1
K-1
K−1组参数,即
P
(
Y
=
k
∣
x
,
θ
)
=
e
θ
k
x
1
+
∑
k
=
1
K
−
1
e
θ
k
x
P(Y=k|x,θ)=\frac{e^{θ_kx}}{1+∑_{k=1}^{K-1}e^{θ_kx}}
P(Y=k∣x,θ)=1+∑k=1K−1eθkxeθkx
P
(
Y
=
K
∣
x
,
θ
)
=
1
1
+
∑
k
=
1
K
−
1
e
θ
k
x
P(Y=K|x,θ)=\frac{1}{1+∑_{k=1}^{K-1}e^{θ_kx}}
P(Y=K∣x,θ)=1+∑k=1K−1eθkx1④如果类别之间明显互斥,则使用Softmax分类器,如果不互斥,使用
K
K
K个逻辑回归分类器
51、LR的优点?
①形式简单,模型易解释,特征权重可以体现特征重要性
②速度快,计算量只和特征数目相关,容易并行,适合大规模数据
③LR本身就是对特征进行线性相加,因此不会受到多重共线性的影响
④LR输出的是概率,可以很方便的调整划分阈值
52、LR的缺点?
①容易欠拟合,分类精度不高,只能处理线性可分的数据,需要手动进行特征工程,例如特征离散化
②LR本身无法筛选特征
③依赖全部的特征,当特征有缺失时表现不好
④预测结果呈现S型,中间概率变化大,两端概率变化小
⑤很难处理数据不平衡的问题
53、LR为什么要对特征进行离散化?
①离散特征的增加和减少都很容易
②稀疏向量内积运算速度快
③离散化特征对异常数据具有很好的鲁棒性
④LR属于GLM,表达能力有限,单变量离散化为
N
N
N个变量后,这
N
N
N个变量都有单独的权重,相当于引入了非线性
⑤离散化后特征还能进一步交叉,由
M
+
N
M+N
M+N个变量变成
M
×
N
M×N
M×N个变量,进一步引入非线性
⑥其实模型是使用连续特征还是离散特征,本质上是一个“大量离散特征+简单模型”与“少量连续特征+复杂模型”的权衡,既可以离散化用线性模型,也可以连续特征用深度学习,前者会更容易一些,因为可以多个人一起并行做
54、介绍一下决策树?
①决策树是用于分类或者回归的一种树结构,由节点和有向边组成
②节点的类型分为内部节点和叶子节点,内部节点表示一个特征,叶子节点表示一个预测分类或者预测值
③具体的分裂过程是,从根节点开始,根据设定的划分准则,挑选一个最优特征的最优切分点对样本进行分裂,生成若干个子节点
④对每一个节点判断是否满足停止分裂的条件,比如样本全属于同一类别、样本在所有特征上取值相同、样本集为空,如果满足条件,设置该节点为叶子节点,对于分类问题,它的输出结果为该节点占比最大的类别,对于回归问题,如果是平方损失函数,输出结果为样本均值
⑤一般分类问题的划分准则有信息增益、信息增益比、基尼指数,回归问题可以使用平方损失函数,还有像GBDT、XGBoost这类的集成算法也可以自己设置损失函数
⑥为了防止过拟合,决策树可以采用预剪枝、后剪枝提高泛化能力,详见17
⑦也可以用随机森林来防止过拟合
55、决策树的优点?
参考44
56、决策树的缺点?
①决策树容易过拟合
②决策树本质基于贪心的学习策略来搜索假设空间,不一定能找到让损失函数最小化的划分方式
③决策树节点的每一次分裂都是垂直于坐标轴的一次划分,且只利用了一个特征,难以拟合出倾斜的分类超平面,例如有两个特征,如果分界线是二维平面上的一条斜线,决策树需要分裂多次才能拟合出这个分界线
57、介绍一下SVM?
参考13
58、SVM的优点?
①利用内积核函数代替向高维空间的非线性映射
②几何间隔最大化的思想很适合小样本分类
③最终的分类超平面只取决于少数的支持向量,具有较好的鲁棒性,即增、删非支持向量样本对模型没有影响
④与决策树等贪心本质的算法不同,SVM构造的是一个凸二次规划问题,因此可以得到最优解
59、SVM的缺点?
①SVM性能的优劣很大程度取决于核函数,目前核函数的选取都是人为的,带有随意性
②SVM对大规模训练样本难以实施,因为SVM的二次规划计算涉及到
m
m
m阶矩阵,
m
m
m为样本个数,当
m
m
m很大时,耗费的内存和计算时间都会很大
③SVM难以解决多分类问题,一般只能采用训练多个分类器的方式
60、介绍一下SMO算法?
①SVM最终推导得到的是如下凸二次规划的对偶问题
min
α
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
K
(
x
i
,
x
j
)
−
∑
i
=
1
N
α
i
\min_α \frac{1}{2}∑_{i=1}^N∑_{j=1}^Nα_i α_j y_i y_j K(x_i,x_j )-∑_{i=1}^Nα_i
αmin 21i=1∑Nj=1∑NαiαjyiyjK(xi,xj)−i=1∑Nαi
s
.
t
.
∑
i
=
1
N
α
i
y
i
=
0
s.t. ∑_{i=1}^Nα_iy_i=0
s.t. i=1∑Nαiyi=0
0
≤
α
i
≤
C
0≤α_i≤C
0≤αi≤C②此外还有需要满足的KKT条件
α
i
=
0
↔
y
i
g
(
x
i
)
≥
1
α_i=0 ↔ y_i g(x_i )≥1
αi=0 ↔ yig(xi)≥1
0
<
α
i
<
C
↔
y
i
g
(
x
i
)
=
1
0<α_i<C ↔ y_i g(x_i )=1
0<αi<C ↔ yig(xi)=1
α
i
=
C
↔
y
i
g
(
x
i
)
≤
1
α_i=C ↔ y_i g(x_i )≤1
αi=C ↔ yig(xi)≤1③SMO算法的基本思路是,如果所有
α
α
α都满足KKT条件,那么最优解就得到了,否则就选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题
④第一个变量的选择方法是,通过外层循环选择违反KKT条件最严重的样本点,具体来说先检查
0
<
α
i
<
C
0<α_i<C
0<αi<C的样本点,如果这些样本点都满足KKT条件,再遍历整个训练集
⑤对第二个变量,由于更新公式是
E
i
=
g
(
x
i
)
−
y
i
E_i=g(x_i )-y_i
Ei=g(xi)−yi
α
2
n
e
w
,
u
n
c
=
α
2
o
l
d
+
y
2
(
E
1
−
E
2
)
K
11
+
K
22
−
2
K
12
α_2^{new,unc}=α_2^{old}+\frac{y_2 (E_1-E_2 )}{K_{11}+K_{22}-2K_{12}}
α2new,unc=α2old+K11+K22−2K12y2(E1−E2)
α
2
n
e
w
,
u
n
c
α_2^{new,unc}
α2new,unc再经过裁剪,得到
α
2
n
e
w
α_2^{new}
α2new
α
2
n
e
w
=
{
H
,
α
2
n
e
w
>
H
α
2
n
e
w
,
u
n
c
,
L
≤
α
2
n
e
w
,
u
n
c
≤
H
L
,
α
2
n
e
w
,
u
n
c
<
L
α_2^{new}=\left\{ \begin{array}{rcl} H, & & {\alpha_2^{new}>H}\\ \alpha_2^{new,unc}, & & {L\leq\alpha_2^{new,unc}\leq H}\\ L, & & {\alpha_2^{new,unc}<L} \end{array} \right.
α2new=⎩⎨⎧H,α2new,unc,L,α2new>HL≤α2new,unc≤Hα2new,unc<L为了让
α
2
α_2
α2有足够大的变化,选择
α
2
α_2
α2使对应的
∣
E
1
−
E
2
∣
|E_1-E_2|
∣E1−E2∣最大
⑥找到并计算出
α
2
n
e
w
α_2^{new}
α2new后,求
α
1
n
e
w
α_1^{new}
α1new
α
1
n
e
w
=
α
1
o
l
d
+
y
1
y
2
(
α
2
o
l
d
−
α
2
n
e
w
)
α_1^{new}=α_1^{old}+y_1y_2(α_2^{old}-α_2^{new})
α1new=α1old+y1y2(α2old−α2new)
61、介绍一下AdaBoost?
①AdaBoost是一种用于分类的Boosting算法,它是由一系列弱分类器线性相加组成,每个弱分类器都有相应的权重,所以是加法模型,它的每一轮迭代产生的弱分类器都是在上一轮的基础上训练得来的,因此是前向分步算法
②AdaBoost涉及到两个权重,一个是样本权重,AdaBoost提高/降低上一轮被分类错误/正确样本的权重,让当前弱分类器的关注点在错误分类的样本上,具体的说,设当前弱分类器权重是
α
m
α_m
αm,则下一轮样本权重
w
m
+
1
,
i
=
w
m
,
i
e
−
α
m
y
i
G
m
(
x
i
)
Z
w_{m+1,i}=\frac{w_{m,i}e^{-α_m y_i G_m (x_i )}}{Z}
wm+1,i=Zwm,ie−αmyiGm(xi);另一个是弱分类器权重,加大/减小分类误差率大/小的弱分类器权重,具体的说,设弱分类器分类误差率是
e
m
e_m
em,则弱分类器的权重
α
m
=
1
2
ln
1
−
e
m
e
m
α_m=\frac{1}{2}\ln\frac{1-e_m}{e_m}
αm=21lnem1−em
③AdaBoost样本权重保证了前面的弱分类器重点处理普遍情况,后面的弱分类器重点处理疑难杂症,最终的分类器权重保证了前面的弱分类器有更大的权重,这有先抓总体再抓特例的思想
④AdaBoost每个弱分类器的损失函数是带权重样本的分类误差率,整体的损失函数是指数损失函数
62、AdaBoost的优点?
①AdaBoost提供的是一个框架,内部弱分类器可以是任何算法
②AdaBoost训练误差的上界会随着弱分类器的增加而以指数速率下降
③AdaBoost在弱分类器较简单的时候不容易发生过拟合(没有明确解释)
④AdaBoost参数较少,调参方便
63、AdaBoost的缺点?
①对离群点敏感,容易受到噪声干扰,异常点在迭代中获得更高权重
②执行效果依赖于弱分类器的选择
③弱分类器数目不好确定
64、介绍一下RF?
①随机森林包括“森林”和“随机”两个层面
②随机森林中的“森林”代表多棵决策树,随机森林是以决策树为基模型的bagging集成算法,它解决了决策树泛化能力弱的缺点
③“随机”则体现在两个方面,第一个方面,数据集通过自助采样法随机获取,第二个方面,每棵树(注意不是每个节点)使用不同的特征子集,上述二重随机性使得每棵树之间的独立性增加,进而降低整体方差
④设单模型之间的相关系数为
0
<
ρ
<
1
0<ρ<1
0<ρ<1,则模型均值的方差为
V
a
r
(
1
n
∑
i
=
1
n
X
i
)
=
σ
2
n
+
n
−
1
n
ρ
σ
2
Var(\frac{1}{n}∑_{i=1}^nX_i)=\frac{σ^2}{n}+\frac{n-1}{n}ρσ^2
Var(n1i=1∑nXi)=nσ2+nn−1ρσ2⑤随机森林内的每棵决策树都没有剪枝过程,这是因为bagging集成负责降低方差,而每棵决策树主要目标为降低偏差
65、RF的优点?
①训练与预测阶段,树与树之间可并行化处理,速度较快,适用于大数据集
②bagging本质使得随机森林能降低过拟合风险,且具有很强的抗干扰能力
③在特征层面,随机森林能处理高纬度特征,不需要做特征选择,且训练完后能给出特征重要性
④随机森林既能解决分类问题也能解决回归问题
⑤决策树的优点,参考44
66、RF的缺点?
①随机森林解决回归问题没有分类问题表现那么好,因为它不能给出一个连续的输出,不能做出超越数据集范围的预测
②随机森林的优势是处理高纬度、特征遗失、不平衡数据,但对低维数据可能表现不好
③随机森林像黑盒子,有很多不好解释的地方