文章目录
简历:一份好的简历中的项目描写应该要精准的描述出项目技术难点,并且包含准确的评价数字。
面试时如何交流?
你要保持和面试官的不断的交流,不要把他当成面试官,而要把他当成未来团队成员,先和未来的团队成员一起想办法讨论问题,解决问题,然后临时给出一个基本的可运行版本。即使算法和运行效率看起来特别差,但是先给出一个基本的可运行的版本,然后再和面试官讨论。这也是我们工作过程中的基本的工作模式,先给一个基本的运行版本,然后再慢慢迭代改进。
面试中,面试官常会问:你熟悉的分类模型有哪些?这时需要掌握类似:LR(逻辑回归),SVM,KNN,NB,决策树(包括随机森林,gbdt,xgboost)这些基本算法。面试官有时会挑出一些算法,需要做具体推导。
本博客中记录了李航老师《统计学习方法》一书中关于各算法的推导过程及重点知识。
也有吴恩达老师的机器学习视频的教学大纲和知识点总结。
机器学习的整体逻辑
第一步:找到一组函数
第二步:衡量一组函数的拟合度:损失函数loss function
第三步:找到一个最好的函数:gredient descent 梯度下降
LR逻辑回归
1. 损失函数
逻辑回归的推导公式:由最大似然推导
P
(
y
=
1
∣
x
)
=
π
(
x
)
P(y=1|x)=\pi(x)
P(y=1∣x)=π(x)
P
(
y
=
0
∣
x
)
=
1
−
π
(
x
)
P(y=0|x)=1-\pi(x)
P(y=0∣x)=1−π(x)
因此有似然函数:
∏
i
=
1
N
π
(
x
i
)
y
i
(
1
−
π
(
x
i
)
)
1
−
y
i
\prod_{i=1}^N\pi(x_i)^{y_i}(1-\pi(x_i))^{1-y_i}
i=1∏Nπ(xi)yi(1−π(xi))1−yi
转换为对数似然:
∑
i
=
1
N
[
y
i
log
(
π
(
x
i
)
)
+
(
1
−
y
i
)
l
o
g
(
1
−
π
(
x
i
)
)
]
\sum_{i=1}^N[y_i\log(\pi(x_i))+(1-y_i)log(1-\pi(x_i))]
i=1∑N[yilog(π(xi))+(1−yi)log(1−π(xi))]
损失函数为负的似然函数,也是交叉熵损失函数。
2. 梯度更新公式的推导
损失函数为:
L
(
w
)
=
−
∑
i
=
1
N
[
y
i
log
(
π
(
x
i
)
)
+
(
1
−
y
i
)
log
(
1
−
π
(
x
i
)
)
]
L(w)=-\sum_{i=1}^N[ y_i\log (\pi(x_i))+(1-y_i)\log(1-\pi(x_i))]
L(w)=−i=1∑N[yilog(π(xi))+(1−yi)log(1−π(xi))]
L
(
w
)
∂
w
j
=
−
y
i
⋅
1
π
(
x
i
)
⋅
∂
π
(
x
i
)
∂
w
j
+
(
1
−
y
i
)
1
1
−
π
(
x
i
)
⋅
∂
π
(
x
i
)
∂
w
j
=
(
−
y
i
⋅
1
π
(
x
i
)
+
(
1
−
y
i
)
1
1
−
π
(
x
i
)
)
⋅
∂
π
(
x
i
)
∂
w
j
=
π
(
x
i
)
−
y
π
(
x
i
)
(
1
−
π
(
x
i
)
)
⋅
π
(
x
i
)
(
1
−
π
(
x
i
)
)
⋅
x
i
j
=
∑
i
=
1
N
(
π
(
x
i
)
−
y
i
)
x
i
j
\frac{L(w)}{\partial w^j}=-y_i\cdot\frac{1}{\pi(x_i)}\cdot\frac{ \partial \pi(x_i)}{ \partial w^j}+(1-y_i)\frac{1}{1-\pi(x_i)}\cdot\frac{ \partial \pi(x_i)}{ \partial w^j}\\= (-y_i\cdot\frac{1}{\pi(x_i)}+(1-y_i)\frac{1}{1-\pi(x_i)})\cdot\frac{ \partial \pi(x_i)}{ \partial w^j}\\=\frac{\pi(x_i)-y}{\pi(x_i)(1-\pi(x_i))}\cdot \pi(x_i)(1-\pi(x_i))\cdot x_i^j\\=\sum_{i=1}^N(\pi(x_i)-y_i)x_i^j
∂wjL(w)=−yi⋅π(xi)1⋅∂wj∂π(xi)+(1−yi)1−π(xi)1⋅∂wj∂π(xi)=(−yi⋅π(xi)1+(1−yi)1−π(xi)1)⋅∂wj∂π(xi)=π(xi)(1−π(xi))π(xi)−y⋅π(xi)(1−π(xi))⋅xij=i=1∑N(π(xi)−yi)xij
从公式可以看出,每次迭代都使用了全部的数据。
这里因为
f
(
z
)
=
1
1
+
e
−
z
f(z)=\frac{1}{1+e^{-z}}
f(z)=1+e−z1
∂
f
(
z
)
∂
z
=
−
1
(
1
+
e
−
z
)
2
\frac{\partial f(z)}{\partial z}=\frac{-1}{(1+e^{-z})^2}
∂z∂f(z)=(1+e−z)2−1
而
z
=
w
x
+
b
z=wx+b
z=wx+b,所以
∂
f
(
w
)
∂
w
=
−
1
(
1
+
e
−
z
)
2
e
−
z
×
(
−
1
)
∗
x
=
f
(
1
−
f
)
x
\frac{\partial f(w)}{\partial w}=\frac{-1}{(1+e^{-z})^2}e^{-z}\times(-1)*x=f(1-f)x
∂w∂f(w)=(1+e−z)2−1e−z×(−1)∗x=f(1−f)x
3. 正则化
越复杂的函数会使训练误差更小(原因:越复杂函数包含简单的函数),但不一定会在测试集上误差更小。 overfitting 过拟合
bias大:
函数集简单
⇒
\Rightarrow
⇒可能原本要寻找的函数不包含在函数集中
⇒
\Rightarrow
⇒找不到我们想要的函数。
variance大:
函数集复杂
⇒
\Rightarrow
⇒可寻找的函数集太大以至于很难找到那个想要的函数。
正则化是为了解决过拟合的问题。因为参数也就是拟合曲线在某一点的导数,参数越大说明在较小的区间内有较大的曲率,所以参数越小说明波动越小,模型越简单。
奥卡姆剃刀(Occam’s razor)原理:在所有可能选择的模型中,能够很好的解释数据并且足够简单的才是最好的模型。
一般使用的正则化方法有L1(Lasso)和L2正则(Ridge/岭回归),L1会产生稀疏的特征,用于特征选择;L2会选择更多的特征,但特征参数都会接近于0.
L1范数:Laplace先验和L2范数:Gaussian先验
4. 为什么不用平方损失函数而采用log损失函数?
若使用平方损失函数,某一个样本点的
θ
j
\theta_j
θj的梯度更新为
2
(
y
i
−
y
^
i
)
∂
y
^
i
∂
θ
j
2(y_i-\hat y_i)\frac{\partial \hat y_i}{\partial \theta_j}
2(yi−y^i)∂θj∂y^i,其中的
∂
y
^
i
∂
θ
j
\frac{\partial \hat y_i}{\partial \theta_j}
∂θj∂y^i是sigmoid函数的导数,在达到饱和状态时,导数值会接近于0,会使得梯度下降的速度很慢:
而使用log损失函数则对某一个样本点的
θ
j
\theta_j
θj的梯度更新为:
(
y
i
−
y
^
i
)
x
j
(y_i-\hat y_i)x_j
(yi−y^i)xj,与sigmoid函数的导数无关。
为什么分类问题不能用回归方法来解?
回归问题和分类问题的差别就在于:回归是为了去拟合具体的数据值,而分类只是寻找一个分界线而已。[例如这张图片中,如果用回归问题来解,红色的label=-1,蓝色的label=1,那么>>1的蓝色点反而会干扰训练模型。]
5. 优化方法
一阶方法:梯度下降,随机梯度下降
二阶方法:牛顿法,拟牛顿法。
牛顿法是通过切线与x轴的交点不断更新切线的位置,直到达到曲线与x轴的交点,得到方程解。
牛顿法收敛速度更快,但仍为局部算法,梯度法仅考虑梯度的方向,牛顿法不仅考虑了方向还兼顾了步子的大小,其对步长的估计使用的是二阶逼近。
缺点:牛顿法是一种迭代算法,每一步都需要求解目标函数的Hessian矩阵的逆矩阵,计算比较复杂。拟牛顿法就是就是考虑用一个n阶矩阵来近似替代这个Hessian矩阵的逆矩阵。
6. LR与softmax
softmax的损失函数就是交叉熵损失函数,LR是softmax的一个二分类特例。softmax的决策公式:
S
j
=
e
a
j
∑
1
T
e
a
k
S_j=\frac{e^{a_j}}{\sum_1^Te^{a_k}}
Sj=∑1Teakeaj
a
j
a_j
aj表示输出向量的第j个数值,
S
j
S_j
Sj表示该输入属于第
j
j
j个类别的概率。
softmax的损失函数:
L
=
−
∑
j
=
1
T
y
j
log
S
j
L=-\sum_{j=1}^Ty_j\log S_j
L=−j=1∑TyjlogSj
y
j
y_j
yj是真实输出的one-hot编码形式。
7. 交叉熵与相对熵
交叉熵衡量的是当我们已知系统的真实分布,而使用非真实分布来消除系统的不确定性所付出的“努力”的大小。
信息熵衡量了系统的不确定性,为了消除这个不确定所付出的“最小努力”(如编码等)的大小就是信息熵。
如果我们使用的非真实分布与真实分布一致,那么交叉熵等于信息熵,否则交叉熵大于信息熵。
相对熵用来衡量两个策略之间的差异。例如要衡量某个策略(非真实分布)与最优策略(真实分布)之间的差异就可以使用:
相
对
熵
=
交
叉
熵
−
信
息
熵
相对熵=交叉熵-信息熵
相对熵=交叉熵−信息熵
因此很多情况下最小化相对熵也就是最小化交叉熵。
为什么损失函数经常要最小化交叉熵?
因为交叉熵越低,就证明由算法所产生的策略最接近最优策略,也间接证明我们算法所算出的非真实分布越接近真实分布。
SVM
支持向量机包含构建由简至繁的模型:线性可分支持向量机、线性支持向量机及非线性支持向量机。
数据类型 | 学习方法 | 分类器名称 | 输入空间与特征空间的对应关系 |
---|---|---|---|
训练数据线性可分 | 硬间隔最大化 | 线性可分支持向量机(硬间隔支持向量机) | 假设这两个空间的元素一一对应,直接映射 |
训练数据近似线性可分 | 软间隔最大化 | 线性支持向量机(软间隔支持向量机) | 假设这两个空间的元素一一对应,直接映射 |
训练数据线性不可分时 | 核技巧 + 软间隔最大化 | 非线性支持向量机 | 从输入空间到特征空间的非线性映射 |
支持向量机的学习是在特征空间上进行的。
学习的目标是在特征空间中找到一个分离超平面,能将实例分到不同的类。分离超平面对应于方程
w
x
+
b
=
0
wx+b=0
wx+b=0,它是由法向量w和截距b决定。分离超平面将特征空间分为两部分,一部分是正类,
y
i
=
+
1
y_i=+1
yi=+1,一部分是负类,
y
i
=
−
1
y_i=-1
yi=−1。法向量指向的一侧为正类。
PS: 这里的负类定义为-1,而不是0。
SVM是一个二类分类模型,其分类决策函数为:
s
i
g
n
(
w
⋅
x
+
b
)
sign (w\cdot x+b)
sign(w⋅x+b) 1
其学习策略为间隔最大化,可以转换为一个凸二次规划问题来求解,也可以表示为最小化正则后的合页损失函数。它也可以使用核技巧转换为非线性分类器。
1. 支持向量
间隔边界:满足 w ⋅ x + b = ± 1 w\cdot x+b=\pm1 w⋅x+b=±1 的超平面
训练数据集的样本中与分离超平面距离最近的样本点实例称为支持向量,在线性可分支持向量机中是指在间隔边界上的向量;
在线性不可分支持向量中指在间隔边界及间隔边界以外的点;
它们对应的都是拉格朗日乘子
α
i
∗
>
0
\alpha_i^*>0
αi∗>0的样本点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)。
在决定分离超平面时只有支持向量起作用,而其他实例点并不起作用。支持向量的个数一般很少,所以支持向量机由很少的“重要的”训练样本确定。
2. 推导过程,原理
通俗的来讲,如果是在数据线性可分的情况下,将数据点距离超平面的最小几何间隔1 γ \gamma γ最大化:
即
max
w
,
b
γ
s
.
t
.
y
i
(
w
∣
∣
w
∣
∣
⋅
x
i
+
b
∣
∣
w
∣
∣
)
≥
γ
,
i
=
1
,
2
,
.
.
,
N
\begin{aligned} \max _{w,b} \ \ &\gamma \\ \rm {s.t.}\ \ \ &y_i(\frac{w}{||w||}\cdot x_i+\frac{b}{||w||})\geq\gamma, i=1,2,..,N \end{aligned}
w,bmax s.t. γyi(∣∣w∣∣w⋅xi+∣∣w∣∣b)≥γ,i=1,2,..,N
考虑几何距离
γ
\gamma
γ和函数距离
γ
^
\hat \gamma
γ^的关系,可将问题改写为:
max
w
,
b
γ
^
∣
∣
w
∣
∣
s
.
t
.
y
i
(
w
⋅
x
i
+
b
)
≥
γ
^
,
i
=
1
,
2
,
.
.
,
N
\begin{aligned} \max _{w,b} \ \ &\frac{\hat \gamma}{||w||} \\ \rm {s.t.}\ \ \ &y_i(w\cdot x_i+b)\geq \hat \gamma,i=1,2,..,N \end{aligned}
w,bmax s.t. ∣∣w∣∣γ^yi(w⋅xi+b)≥γ^,i=1,2,..,N
将函数距离固定为1,并将最大化改为最小化,则有
min
1
2
∣
∣
w
∣
∣
2
s.t.
y
i
(
w
x
i
+
b
)
−
1
≥
0
,
i
=
1
,
2
,
.
.
.
,
N
\begin{aligned} \min \ &\frac{1}{2}|| w||^2\\ \text {s.t.} \ & y_i( {w} {x_i}+ b)-1\geq 0,\quad i=1,2,...,N \end{aligned}
min s.t. 21∣∣w∣∣2yi(wxi+b)−1≥0,i=1,2,...,N
为了 求解这个最优化问题,将它作为原始最优化问题,应用拉格朗日对称性,通过求解对偶问题得到原始问题的最优解,这就是线性可分支持向量机的对偶算法。转换到对偶问题有两个好处:1.对偶问题更容易计算;2.引入核函数,可以推广到非线性问题。
引入拉格朗日乘子
α
i
≥
0
\alpha_i\geq0
αi≥0,定义拉格朗日函数
L
(
w
,
b
,
α
)
=
1
2
∣
∣
w
∣
∣
2
−
∑
i
=
1
N
α
i
[
y
i
(
w
x
i
+
b
)
−
1
]
,
L(w,b,\alpha)=\frac{1}{2}|| w||^2-\sum_{i=1}^N\alpha_i[y_i( {w} {x_i}+ b)-1],
L(w,b,α)=21∣∣w∣∣2−i=1∑Nαi[yi(wxi+b)−1],其原始问题为2
min
w
,
b
max
α
i
≥
0
L
(
w
,
b
,
α
)
\min_{w,b}\max_{\alpha_i\geq0}L(w,b,\alpha)
w,bminαi≥0maxL(w,b,α)
由于满足KKT条件(KKT条件中最重要的一条就是
α
i
c
i
(
x
∗
)
=
0
\alpha_ic_i(x^*)=0
αici(x∗)=0,即存在一个解x使得所有的
c
i
(
x
∗
)
≤
0
c_i(x^*)\le 0
ci(x∗)≤0),在这里就是存在一组
(
w
,
b
)
(w,b)
(w,b)参数,能够使得对于所有的
x
i
x_i
xi都满足
y
i
(
w
x
i
+
b
)
−
1
≥
0
y_i( {w} {x_i}+ b)-1\geq 0
yi(wxi+b)−1≥0,因此可以等价于最大最小问题:
max
α
i
≥
0
min
w
,
b
L
(
w
,
b
,
α
)
\max_{\alpha_i\geq0}\min_{w,b}L(w,b,\alpha)
αi≥0maxw,bminL(w,b,α)
L
(
w
,
b
,
α
)
L(w,b,\alpha)
L(w,b,α)对参数
w
,
b
w,b
w,b分别取导可得:
w
−
∑
i
=
1
N
α
i
y
i
x
i
=
0
−
∑
i
=
1
N
α
i
y
i
=
0
\begin{aligned} w-\sum_{i=1}^N\alpha_iy_ix_i=0 \\ -\sum_{i=1}^N\alpha_iy_i=0 \end{aligned}
w−i=1∑Nαiyixi=0−i=1∑Nαiyi=0
将
w
w
w带入公式
max
α
i
≥
0
min
w
,
b
L
(
w
,
b
,
α
)
\max_{\alpha_i\geq0}\min_{w,b}L(w,b,\alpha)
maxαi≥0minw,bL(w,b,α)中,则有:
min
α
i
≥
0
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
∑
i
=
1
N
α
i
s
.
t
.
∑
i
=
1
N
α
i
y
i
=
0
α
i
≥
0
,
i
=
1
,
2
,
.
.
.
,
N
\begin{aligned} \min_{\alpha_i\ge0}&\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)-\sum_{i=1}^N\alpha_i \\ \rm{s.t.} &\sum_{i=1}^N\alpha_iy_i=0\\ &\alpha_i\ge0, i=1,2,...,N \end{aligned}
αi≥0mins.t.21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαii=1∑Nαiyi=0αi≥0,i=1,2,...,N
求出满足条件拉格朗日乘子之后,再计算出w,b,
w
∗
=
∑
i
=
1
N
α
i
∗
y
i
x
i
b
∗
=
y
j
−
∑
i
=
1
N
α
i
∗
y
i
(
x
i
⋅
x
j
)
(
备
注
:
y
j
是
对
应
α
j
∗
>
0
的
点
)
\begin{aligned} w^*&=\sum_{i=1}^N\alpha_i^*y_ix_i \\ b^*&=y_j-\sum_{i=1}^N\alpha_i^*y_i(x_i\cdot x_j) \ \ (备注:y_j是对应\alpha_j^*>0的点) \end{aligned}
w∗b∗=i=1∑Nαi∗yixi=yj−i=1∑Nαi∗yi(xi⋅xj) (备注:yj是对应αj∗>0的点)
此时的超平面存在且唯一。
此时的分类决策函数为
s
i
g
n
(
∑
i
=
1
N
α
i
∗
y
i
(
x
i
⋅
x
)
+
b
∗
)
sign(\sum_{i=1}^N\alpha_i^*y_i(x_i\cdot x)+b^*)
sign(i=1∑Nαi∗yi(xi⋅x)+b∗)
也就是说,分类决策函数只依赖于输入x和训练样本输入的内积。
在线性不可分的情况下,线性支持向量机的学习问题变为:
min
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
N
ξ
i
s.t.
y
i
(
w
x
i
+
b
)
≥
1
−
ξ
i
,
i
=
1
,
2
,
.
.
.
,
N
ξ
i
≥
0
,
i
=
1
,
2
,
.
.
.
,
N
\begin{aligned} \min \ &\frac{1}{2}|| w||^2+C\sum_{i=1}^N\xi_i\\ \text {s.t.} \ & y_i( {w} {x_i}+ b)\geq 1-\xi_i,&\quad i=1,2,...,N\\ &\xi_i\geq0, &i=1,2,...,N \end{aligned}
min s.t. 21∣∣w∣∣2+Ci=1∑Nξiyi(wxi+b)≥1−ξi,ξi≥0,i=1,2,...,Ni=1,2,...,N
松弛变量 ξ i ≥ 0 \xi_i\geq0 ξi≥0,含义是函数间隔加上松弛变量大于等于1.
转化为对偶问题的形式为:
min
α
i
≥
0
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
∑
i
=
1
N
α
i
s
.
t
.
∑
i
=
1
N
α
i
y
i
=
0
0
≤
α
i
≤
C
,
i
=
1
,
2
,
.
.
.
,
N
\begin{aligned} \min_{\alpha_i\ge0}&\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)-\sum_{i=1}^N\alpha_i \\ \rm{s.t.} &\sum_{i=1}^N\alpha_iy_i=0\\ &0\le \alpha_i\le C, i=1,2,...,N \end{aligned}
αi≥0mins.t.21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαii=1∑Nαiyi=00≤αi≤C,i=1,2,...,N
计算
w
,
b
w,b
w,b参数的方程式与线性可分支持向量机相同,但b的解不唯一,b的解存在于一个区间。
3. 合页损失函数
线性支持向量机也可以看做最小化以下目标函数:
∑
i
=
1
N
[
1
−
y
i
(
w
⋅
x
i
+
b
)
]
+
+
λ
∣
∣
w
∣
∣
2
\sum_{i=1}^{N}[1-y_i(w\cdot x_i+b)]_++\lambda||w||^2
i=1∑N[1−yi(w⋅xi+b)]++λ∣∣w∣∣2
第一项为合页损失函数,下标+表示取正值的函数:
[
z
]
+
=
{
z
,
z
>
0
0
,
z
≤
0
[z]_+=\begin{cases} z,z>0 \\ 0,z\leq0\end{cases}
[z]+={z,z>00,z≤0
λ
\lambda
λ越大(C越小),说明泛化能力越好。
4. 常用核函数
线性核函数
多项式核函数:
(
x
⋅
z
+
1
)
p
(x\cdot z+1)^p
(x⋅z+1)p
高斯径向基核函数RBF
在实际应用中,往往依赖领域知识直接选择核函数,核函数选择的有效性需要通过实验验证。
5. SVM如何处理样本倾斜的问题?
对于正负样本用不同的惩罚因子C,类别数量较少的样本用较大的C,表示重视程度,数量较多的用较小的C。其大小比例可参考数量之比。
6. 核函数如何解决非线性支持向量机问题
核函数的本质是两个函数的内积,而这个函数在SVM中可以表示为 对于输入值的高维映射,将线性不可分的数据在高维下变得线性可分来进行分类。注意核函数并不是直接对应映射,核不过是一个内积。
7. LR与SVM算法的区别与联系?
1.如果这里的SVM单指linear svm的话,那它们同是线性分类器,即分离决策面都是线性的;
2.两种算法都可以加上不同的正则化项,如L1,L2等。
而不同点主要在于:
1)LR是参数模型,SVM是非参数模型。(参数模型对数据的分布有理想的假设,如LR就假设数据服从伯努利分布;非参数模型对数据分布假设自由。)
2)从目标函数来看,区别在于逻辑回归采用的是logistical loss,SVM采用的是hinge loss,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重;
3)SVM的分离超平面求解只取决于支持向量,并不依赖于整个数据集,而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重。
4)在解决非线性问题时,SVM一般采用核技巧,而LR一般不采用核技巧。事实上,LR也是可以结合核技巧来求解的,但因为它的每个样本点都参与决策面的计算因此带来的核函数计算量过高,而SVM在使用核函数时解的系数是稀疏的;
5)Linear SVM依赖数据表达的距离测度,所以需要对数据先做归一化;LR不受其影响。我们之所以对LR做归一化只是为了求解优化模型过程中更容易选择初始值。
另外:在小数据集上线性SVM略好于LR,但在海量数据下,LR使用更加广泛。
8. SVM和LR是如何处理多分类的?
LR处理多分类的基本思想是:将多分类任务拆分成若干个二分类任务,然后对每个二分类任务训练一个模型,最后将多个模型的结果进行集成以获得最终的分类结果。
SVM处理多分类有两种方法:直接法和间接法。
(1)直接法,直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类。这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中;
(2)间接法,主要是通过组合多个二分类器来实现多分类器的构造,常见的方法有one-against-one和one-against-all两种。
将一个多分类问题拆分为多个二分类问题的方法主要有两种:
一对一,一对多。
假设一共有4 类,A,B,C,D
那么一对一的方式就是训练6个分类器,分别训练
A,B
A,C
A,D
B,C
B,D
C,D
在决策的时候,将预测样本分别放入这6个训练器中,将得到的结果投票表决;
一对多的方式是训练4个分类器,分别训练
A VS B,C,D
B VS A,C,D
C VS A,B,D
D VS A,B,C
决策的时候,将预测样本分别放入四个训练器中,在哪个训练器中该训练样本为正样本则将该样本分为这个训练器对应的正样本,例如在第三个训练器中该样本为正样本,则认为该样本属于类别C。若产生了多个正例,则判断分类器的置信度,选择置信度大的分类别标记作为最终分类结果。
9. SVM的优缺点
优点在与其它算法的对比可以凸显出来,比如泛化能力好,使用核技巧工作效果好因此可以解决非线性问题等;
缺点主要在于训练过程中空间和时间上的代价,空间上的消耗在于存储训练样本与核函数,时间消耗在于计算复杂度较高,在样本数量较多的情况下训练时间会比较长。
DT 决策树
分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点和有向边组成。结点有两种类型:内部结点和叶结点。内部结点表示一个特征或属性,叶结点表示一个类。
1. 讲一下决策树的生成过程
决策树是定义在特征空间和类空间上的条件概率分布,学习本质是从训练数据集中归纳出一组分类规则,使它与训练数据矛盾较小的同时具有较强的泛化能力。因为从所有可能的决策树中选取最优决策树是NP完全问题,所有现实中决策树学习算法通常采用启发式方法。
决策树的生成三要素:特征选择,模型生成,决策树的剪枝。
学习方法:递归地选择最优特征,对训练数据集进行分割,如果这些子集已经能够被基本正确分类,那么构建叶结点,将这些子集归到叶结点(类别)中;如果有子集不能被基本正确分类,那么就对这些子集选择新的最优特征,继续对其进行分割,直至所有训练数据子集被基本正确分类或者没有合适的特征为止。
决策树的剪枝可分为前剪枝和后剪枝:
前剪枝是在树的生成过程中停止迭代的条件,例如叶结点中均为同类,没有多余的特征,叶节点中样本个数小于阈值;
后剪枝实际上是全局损失函数最小化,即正则化的极大似然函数:
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
,
C_\alpha(T)=C(T)+\alpha|T|,
Cα(T)=C(T)+α∣T∣,C(T)一般有两种衡量方法,一种用熵,一种用基尼指数。剪枝,就是当
α
\alpha
α确定时,选择损失函数最小的模型。
决策树的生成对应于模型的局部最优,决策树的剪枝则对应全局最优。
2. 特征选择
准则:信息增益或者信息增益比。
信息增益
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D,A)=H(D)-H(D|A)
g(D,A)=H(D)−H(D∣A)表示由于特征A而使得对数据集D的分类的不确定性减少的程度。
H
(
D
)
=
−
∑
i
=
1
n
p
i
log
p
i
H
(
D
∣
A
)
=
∑
i
=
1
n
p
i
H
(
Y
∣
X
=
x
i
)
H(D)=-\sum_{i=1}^np_i\log p_i\\ H(D|A)=\sum_{i=1}^np_iH(Y|X=x_i)
H(D)=−i=1∑npilogpiH(D∣A)=i=1∑npiH(Y∣X=xi)
其中
p
i
=
P
(
X
=
x
i
)
,
i
=
1
,
2
,
.
.
.
,
n
p_i=P(X=x_i),i=1,2,...,n
pi=P(X=xi),i=1,2,...,n。
但是以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题。使用信息增益比可以对这一问题进行矫正。
信息增益比:特征A对训练数据集D的信息增益比
g
R
(
D
,
A
)
g_R(D,A)
gR(D,A)定义为其信息增益
g
(
D
,
A
)
g(D,A)
g(D,A)与训练数据集D关于特征A的值的熵
H
A
(
D
)
H_A(D)
HA(D)之比,即
g
R
(
D
,
A
)
=
g
(
D
,
A
)
H
A
(
D
)
g_R(D,A)=\frac{g(D,A)}{H_A(D)}
gR(D,A)=HA(D)g(D,A)
其中,
H
A
(
D
)
=
−
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
log
∣
D
i
∣
∣
D
∣
,
H_A(D)=-\sum_{i=1}^{n}\frac{|D_i|}{|D|}\log\frac{|D_i|}{|D|},
HA(D)=−i=1∑n∣D∣∣Di∣log∣D∣∣Di∣,n是特征A取值的个数。
3. ID3,C4.5,CART树的特征选择的标准分别是什么?
ID3:信息增益:表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。
C4.5:信息增益比:以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题。使用信息增益比可以对这一问题进行校正。
基尼指数:衡量了样本集合的不确定性。基尼指数Gini(D,A)表示经A=a分割后集合D的不确定性,基尼指数值越大,样本集合的不确定就越大。
G
i
n
i
(
p
)
=
∑
k
=
1
K
p
k
(
1
−
p
k
)
=
1
−
∑
k
=
1
K
p
k
2
G
i
n
i
(
D
,
A
)
=
∣
D
1
∣
∣
D
∣
G
i
n
i
(
D
1
)
+
∣
D
2
∣
∣
D
∣
G
i
n
i
(
D
2
)
Gini(p)=\sum_{k=1}^Kp_k(1-p_k)=1-\sum_{k=1}^Kp_k^2\\ Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2)
Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
CART树的回归树用平方误差最小准则,对分类树用基尼指数最小准则。注意它与普通决策树不同的一点在于它是二叉树。分类树停止的条件是:样本的基尼指数小于预定阈值,或结点中的样本个数小于预定阈值,或者没有更多的特征。
CART与ID3,C4.5的区别:
1.ID3,C4.5是分类树,CART即可用于分类也可用于回归;
2.CART树是二叉树;
3.ID3,C4.5的特征都只用到一次,而CART的连续特征可用多次,取值>=3的离散特征也可使用多次,这是因为每次使用特征时仅用于二分;
4.剪枝方法不同。ID3,C4.5是固定
α
\alpha
α,判断剪枝前和剪枝后的损失函数大小来进行剪枝,而CART是选取不同的
α
\alpha
α来嵌套剪枝,然后通过交叉验证来选取最优子树
T
α
T_\alpha
Tα.
4.树模型的优缺点
优点:
1.可解释性强;
2.可处理混合类型特征;
3.具有伸缩不变性,即特征不需要进行归一化;
4.有特征组合的作用;
5.可自然地处理缺失值;
6.对异常点鲁棒;
7.有特征选择作用;
8.可扩展性强,容易并行
9.决策快
缺点:
1.不适合处理高维稀疏特征;【树模型在处理这种情况下的分类时,比LR更容易过拟合,因为LR的正则化会对参数起作用,而树的正则只规定叶子结点的个数。】
高维稀疏特征的时候,线性模型会比非线性模型好的原因:带正则化的线性模型比较不容易对稀疏特征过拟合
2.缺乏平滑性(回归预测时输出值只能输出有限的若干种数值)
集成学习Ensemble:bagging和boosting
1. 集成学习的类别
集成分为两大类:个体集成器之间存在强依赖关系、必须串行生成的序列化方法(boosting);个体学习器之间不存在强依赖关系、可同时生成的并行化方法(Bagging)。
bagging和stacking中的基模型为强模型(偏差低方差高),boosting中的基模型为弱模型。
Bagging主要关注方差,在每一轮估计中采用自助采样,因此剩下的未被采集的36.8%的带外数据(OOB)可以用来对泛化能力进行包外估计,包外样本还可以用来辅助剪枝。随机森林RF的基学习器的多样性不仅来自样本扰动,还来自属性扰动,这就使得最终集成的泛化能力可通过个体学习器之间的差异度的增加而进一步提升。
可以看到bagging得到的期望与基模型的期望值相同,但整体模型的方差小于等于基模型的方差,只在模型相关性为1时相等。因此bagging的基模型需要具有低偏差,也就是必须为强模型,否则整体的准确率低。也就是说只要各模型之间相互独立bagging的效果才能达到更好。
boosting主要在于降低偏差,能基于泛化性能较弱的学习器构建出很强的集成。
随着基模型数量的增多,准确率逐渐提高,但因为子模型之间是强相关的,因此方差可能会增大。
2. 集成的作用都有利于分类吗?
答:集成不一定都是好的!
要获得好的集成,个体学习器应该好而不同,即个体学习器要有一定的准确性,并且要有多样性。(当个体集成器效果不好时集成起负作用,当个体集成器没有不同时,集成不起作用)。
bagging之RF随机森林
随机森林是基于bagging的基础上扩展的一个变体,它希望的是根据每一组尽量不同的数据集来训练出一个基学习器,因此在训练过程中引入了随机属性选择。
首先在总数据集中随机选取一部分样本,共选取T(基学习器的总数)次,选取目的是希望这T次的样本集尽量不同,一般选取的是自助采样法。
根据每一个样本集,在训练决策树的时候,先随机选取k个属性(不是全部的属性),然后在这k个属性中选择一个最优属性用于划分。
最后将训练出来的多个基学习器并行组合起来。
随机森林改善了树模型容易过拟合的问题,主要从两个方面:1.有放回地从数据集中抽取样本值;2.每次随机抽取一定数量的特征;
随机森林特性:
1)可做重要性排序,利用袋外数据计算第j棵树的校验误差
E
j
E_j
Ej,随机打乱袋外数据的第i个待评估特征并再次计算第j棵决策树的校验误差
E
i
,
j
′
{E}'_{i,j}
Ei,j′,两者相减求平方和得
f
i
=
∑
j
N
(
E
j
−
E
i
,
j
′
)
2
f_i=\sum_j^N(E_j-{E}'_{i,j})^2
fi=∑jN(Ej−Ei,j′)2,n为决策树个数,
f
i
f_i
fi可用来度量特征
i
i
i的重要性。即值越大打乱特征的影响越大,该特征越重要。
2)可并行化处理;
3)可处理缺省值,如果是数值型特征就用中位数填充,如果是描述型变量用所对应类别中出现最多的数值替代;
4)不需要测试数据;
5)不需要特征选择
boosting
boosting之adaboost
adaboost:加法模型+指数损失函数+前向分布算法。
adaboost是通过不断改变训练样本的权重(不断提高前一轮被弱分类器误分的样本的权值)来学习多个分类器,再将多个分类器进行线性组合。
boosting之GBDT
提升树是以分类树或回归树为基本分类器的提升方法。提升树被认为是统计学习中性能最好的方法之一。
针对不同问题的提升树学习算法,其主要区别在于使用的损失函数不同,包括使用平方损失函数的回归问题,用指数损失函数的分类问题,以及用一般损失函数的一般决策问题。
1. GBDT
gradient boosting decision tree,梯度提升树
提升树利用加法模型与前向分布算法实现学习的优化过程。当损失函数是平方损失和指数损失函数时,每一步优化是很简单的。但对一般损失函数而言,往往每一步优化并不那么容易。GBDT的核心就是利用损失函数的负梯度在当前模型的值
−
[
∂
L
(
y
,
f
(
x
i
)
)
∂
f
(
x
i
)
]
f
(
x
)
=
f
m
−
1
(
x
)
-[\frac{\partial L(y,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)}
−[∂f(xi)∂L(y,f(xi))]f(x)=fm−1(x)作为回归问题提升树算法中的残差的近似值,拟合一个回归树。
2. GBDT与adaboost的区别
GBDT:加法模型+选择一个损失函数+前向分步算法。
和AdaBoost一样,Gradient Boosting也是重复选择一个表现一般的模型并且每次基于先前模型的表现进行调整。不同的是,AdaBoost是通过提升错分数据点的权重来定位模型的不足而Gradient Boosting是通过算梯度(gradient)来定位模型的不足。因此相比AdaBoost, Gradient Boosting可以使用更多种类的目标函数,而当目标函数是均方误差时,计算损失函数的负梯度值在当前模型的值即为残差。当损失函数为指数损失函数时,退化为adaboost,可用于解决分类问题。
XGBoost
1. Xgboost的推导过程
模型函数形式
给定数据集
D
=
(
x
i
,
y
i
)
D={(x_i,y_i)}
D=(xi,yi), XGBoost进行additive training,学习 K棵树,采用以下函数对样本进行预测:
y
^
i
=
∑
k
=
1
K
f
k
(
x
i
)
,
f
k
∈
F
\hat y_i=\sum_{k=1}^K f_k(x_i), f_k\in F
y^i=k=1∑Kfk(xi),fk∈F
这里
F
F
F是假设空间,
f
(
x
)
f(x)
f(x)是回归树(CART),
k
k
k是树的棵数:
F
=
{
f
(
x
)
=
w
q
(
x
)
}
(
q
:
R
m
→
T
,
w
∈
R
T
)
F=\{f(x)=w_{q(x)}\}(q:\mathbb{R}^m\rightarrow T,w\in \mathbb{R}^T)
F={f(x)=wq(x)}(q:Rm→T,w∈RT)
q
(
x
)
q(x)
q(x)表示将样本x分到了某个叶子节点上,w是叶子节点的分数,所以
w
q
(
x
)
w_{q(x)}
wq(x)表示回归树对样本x的预测值。
回归树的预测输出是实数分数,可以用于回归、分类、排序等任务 中。对于回归问题,可以直接作为目标值,对于分类问题,需要映射成概率,比如采用逻辑函数
σ
(
z
)
=
1
1
+
e
−
z
\sigma(z)=\frac{1}{1+e^{-z}}
σ(z)=1+e−z1。
目标函数
L
(
ϕ
)
=
∑
i
l
(
y
^
i
,
y
i
)
+
∑
t
Ω
(
f
t
)
L(\phi)=\sum_il(\hat y_i,y_i)+\sum_t\Omega(f_t)
L(ϕ)=i∑l(y^i,yi)+t∑Ω(ft)
正则项的衡量方法:叶子结点的个数(T),叶结点分数(w),XGBoost采用的:
Ω
(
f
)
=
γ
T
+
1
2
λ
∣
∣
w
∣
∣
2
\Omega(f)=\gamma T+\frac{1}{2}\lambda||w||^2
Ω(f)=γT+21λ∣∣w∣∣2
对叶子节点个数进行惩罚,相当于在训练过程中做了剪枝。【前剪枝】
误差函数的二次展开
目标函数的第t次迭代:
L
(
t
)
=
∑
i
l
(
y
^
i
(
t
)
,
y
i
)
+
∑
t
Ω
(
f
t
)
=
∑
i
l
(
y
^
i
(
t
−
1
)
+
f
t
(
x
i
)
,
y
i
)
+
∑
t
Ω
(
f
t
)
≈
∑
i
[
l
(
y
^
i
(
t
−
1
)
,
y
i
)
+
g
i
f
t
(
x
i
)
+
1
2
h
i
f
t
2
(
x
i
)
]
+
∑
t
Ω
(
f
t
)
L^{(t)}=\sum_il(\hat y_i^{(t)},y_i)+\sum_t\Omega(f_t)\\ =\sum_il(\hat y_i^{(t-1)}+f_t(x_i),y_i)+\sum_t\Omega(f_t)\\ \approx \sum_i[l(\hat y_i^{(t-1)},y_i)+g_if_t(x_i)+\frac{1}{2}h_if_t^2(x _i)]+\sum_t\Omega(f_t)
L(t)=i∑l(y^i(t),yi)+t∑Ω(ft)=i∑l(y^i(t−1)+ft(xi),yi)+t∑Ω(ft)≈i∑[l(y^i(t−1),yi)+gift(xi)+21hift2(xi)]+t∑Ω(ft)
其中
g
i
=
∂
l
(
y
^
i
(
t
−
1
)
,
y
i
)
∂
y
^
i
(
t
−
1
)
g_i=\frac{\partial l(\hat y_i^{(t-1)},y_i)}{\partial \hat y_i^{(t-1)}}
gi=∂y^i(t−1)∂l(y^i(t−1),yi),
h
i
=
∂
y
^
i
(
t
−
1
)
2
l
(
y
^
i
(
t
−
1
)
,
y
i
)
h_i=\partial^2_{\hat y_i^{(t-1)}}l(\hat y_i^{(t-1)},y_i)
hi=∂y^i(t−1)2l(y^i(t−1),yi)。
把函数中的常数项去掉,则得到:
L
~
(
t
)
=
∑
i
[
g
i
f
t
(
x
i
)
+
1
2
h
i
f
t
2
(
x
i
)
]
+
Ω
(
f
t
)
\widetilde{L}^{(t)}=\sum_i[g_if_t(x_i)+\frac{1}{2}h_if_t^2(x _i)]+\Omega(f_t)
L
(t)=i∑[gift(xi)+21hift2(xi)]+Ω(ft)
把
f
t
,
Ω
(
f
t
)
f_t,\Omega(f_t)
ft,Ω(ft)写成树结构的形式,则有:
L
~
(
t
)
=
∑
i
[
g
i
w
q
(
x
)
+
1
2
h
i
w
q
(
x
)
2
]
+
γ
T
+
1
2
λ
∑
j
w
j
2
\widetilde{L}^{(t)}={\color{Red}\sum_i[g_iw_{q(x)}+\frac{1}{2}h_iw^2_{q(x)}]}+\gamma T+\frac{1}{2}\lambda{\color{Blue}\sum_jw_j^2}
L
(t)=i∑[giwq(x)+21hiwq(x)2]+γT+21λj∑wj2
红色部分是对样本点累加,蓝色部分是对叶子结点求累加。
定义在一个叶子结点j上的样本组合为
I
j
=
{
i
∣
q
(
x
i
)
∈
j
}
I_j=\{i|q(x_i)\in j\}
Ij={i∣q(xi)∈j}
则有
L
~
(
t
)
=
∑
j
=
1
T
[
(
∑
i
∈
I
j
g
i
)
w
j
+
1
2
w
j
2
(
∑
i
∈
I
j
h
i
)
]
+
γ
T
+
1
2
λ
∑
j
w
j
2
=
∑
j
=
1
T
[
G
j
w
j
+
1
2
(
H
j
+
λ
)
w
j
2
]
+
γ
T
\widetilde{L}^{(t)}={\color{Red}\sum_{j=1}^T[(\sum_{i \in I_j} g_i)w_{j}+\frac{1}{2}w^2_{j}(\sum_{i\in I_j}h_i)]}+\gamma T+\frac{1}{2}\lambda{\color{Blue}\sum_jw_j^2}\\ =\sum_{j=1}^T[G_jw_j+\frac{1}{2}(H_j+\lambda)w_j^2]+\gamma T
L
(t)=j=1∑T[(i∈Ij∑gi)wj+21wj2(i∈Ij∑hi)]+γT+21λj∑wj2=j=1∑T[Gjwj+21(Hj+λ)wj2]+γT
如果确定了树的结构,即
q
(
x
)
q(x)
q(x)确定,为了使目标函数最小,我们使它的导数为0,解得每个叶子结点的最优预测分数为:
w
j
∗
=
−
G
j
H
j
+
λ
w_j^*=-\frac{G_j}{H_j+\lambda}
wj∗=−Hj+λGj
代入目标函数,得到最小损失为:
L
∗
=
−
1
2
∑
j
=
1
T
G
j
2
H
j
+
λ
+
γ
T
L^*=-\frac{1}{2}\sum_{j=1}^{T}\frac{G_j^2}{H_j+\lambda}+\gamma T
L∗=−21j=1∑THj+λGj2+γT
那么如何确定树的结构呢?
贪心法,每次尝试分裂一个叶节点,计算分裂前后的增益,选择增益最 大的。增益计算公式为
G
a
i
n
=
G
L
2
H
L
+
λ
+
G
R
2
H
R
+
λ
−
(
G
L
+
G
R
)
2
H
L
+
H
R
+
λ
−
γ
Gain=\frac{G_L^2}{H_L+\lambda}+\frac{G_R^2}{H_R+\lambda}-\frac{(G_L+G_R)^2}{H_L+H_R+\lambda}-\gamma
Gain=HL+λGL2+HR+λGR2−HL+HR+λ(GL+GR)2−γ
选择使Gain值最大的点作为分裂点。
2. xgboost与GBDT的差别?
1)传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。
2) xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。
3)Shrinkage(缩减),相当于学习速率(xgboost中的eta)。xgboost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。也是为了防止过拟合。
4)可自定义损失函数(需二阶可导)
5)支持并行:这里的并行指的是特征的并行,XGBoost预先将每个特征按特征值排好序,存储为块结构,分裂结点时可以采用多线程并行查找每个特征的最佳分割点,极大提升训练速度。
6)列抽样:XGBoost支持列采样,与随机森林类似,用于防止过拟合。
7)缺失值的处理:在逻辑实现上,为了保证完备性,会将该特征值missing的样本分别分配到左叶子结点和右叶子结点,两种情形都计算一遍后,选择分裂后增益最大的那个方向(左分支或是右分支),作为预测时特征值缺失样本的默认分支方向。如果在训练中没有缺失值而在预测中出现缺失,那么会自动将缺失值的划分方向放到右子结点。
8)传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。
9)给出了节点分裂的具体公式表达,使用贪婪学习的方法去寻找一个最优的切分点。
3.xgboost为什么要用二阶导
二阶导更加逼近损失函数的真实值。
4. xgboost的参数调节
戳👇
要想让模型的表现有一个质的飞跃,仅仅利用模型的参数调节是远远不够的,还需要依靠其他的手段,诸如,特征工程(feature egineering) ,模型组合(ensemble of model),以及堆叠(stacking)等。
KNN(k-nearest neighbor, k-NN)
1. 方法
K近邻法是基本且简单的分类与回归方法。k近邻法的基本做法是:对给定的训练实例点和输入实例点,首先确定输入实例点的k个最近邻训练实例点,然后利用这k个训练实例点的类的多数来预测输入实例点的类。
2. 三要素
K近邻法的输入为实例的特征向量,对应特征空间的点,输出为实例的类别,可以取多类。k近邻法不具有显式的学习过程。K值的选择,距离的度量及分类决策规则是k近邻法的三个基本要素。
k近邻法的模型对应特征空间的一个划分。
由不同的距离度量所确定的最近邻点是不同的。p=1:曼哈顿距离,p=2:欧式距离。
k值越小,模型越复杂,容易发生过拟合;k值越大,模型越简单。在应用中k一般选一个比较小的数值,通常采用交叉验证法来选取最优的k值。
多数表决等价于经验风险最小化。
3. 实现结构
实现方法:kd树,Kd树是一种二叉树。
NB(naive bayes)
1. 朴素贝叶斯算法
1)计算先验概率
P
(
Y
)
P(Y)
P(Y)和条件概率
P
(
X
∣
Y
)
P(X|Y)
P(X∣Y);(概率估计方法可以用极大似然估计或贝叶斯估计)
2)对于给定的实例,计算划分到不同类中的后验概率
P
(
Y
∣
X
)
P(Y|X)
P(Y∣X);【求出联合概率分布
P
(
X
,
Y
)
P(X,Y)
P(X,Y)即可】
3)将实例划分到后验概率最大的类中。
2. 何为朴素
假设特征间互相独立。
3. LR与NB的异同
1.目的:他们都是线性分类器;
2.NB学习输入与输出之间的联合概率分布,属于生成模型;LR学习给定输入条件下输出的最大概率,属于判别模型;
3.NB有一个很强的假设是:特征独立性假设。所以当特征之间相关性较大时,NB的效果很差,而LR不受影响;
4.NB根据经验给出了样本的先验分布,因此在数据量较少的情况下效果较好,而LR在数据量较小的情况下可能出现过拟合;
5.当样本数据远小于特征时,NB联合先验概率的预测效果好于LR。
PCA
1. PCA旋转
PCA进行旋转就是为了把由主成分捕获的方差之间的差异最大化
2. PCA是如何去除相关变量的
PCA/SVD是“合并相似性高并且有助于区分样本的列”和“去掉信息量少的特征向量(这些特征向量有可能包括那种纯粹冗余的feature,以及完全无关的feature)”借以达成降维的目的,并不是单纯的“去除了相似性高的列”或是“去掉信息量少的列”这样的解释。
PCA本质上是在特征空间中寻找一组基向量,由这一组基向量表示的样本值有较大的方差,并且样本之间没有相关性。
3. 已知数据高度相关就应该使用PCA吗?
是的
聚类算法
主要有三种:划分聚类,层次聚类和密度聚类。
划分聚类:K-means,CLARANS;
层次聚类:DIANA,BIRCH,chameloen,cure
密度聚类:OPTICS,DBSCAN
BIRCH算法利用树结构对数据集进行处理,叶结点存储一个聚类,用中心和半径表示,顺序处理每一个对象,并把它划分到距离最近的结点,该算法也可以作为其他聚类算法的预处理过程。
EM
EM算法是含有隐变量的概率模型参数的极大似然估计法或极大后验概率估计法。主要讨论极大似然估计。
EM算法与初值的选择有关,选择不同的初值可能得到不同的参数估计值。EM算法不能保证找到全局最优。
E步求期望,M步求极大化。重复EM步骤直至参数收敛。
EM算法可以用于生成模型的非监督学习。
EM算法的一个重要应用是高斯混合模型的参数估计。
FM、FFM
FFM,FM都是分解机模型,主要应用在广告领域预测CTR(click-through rate,点击率)和CVR(clic conversion rate,转换率)。在特征稀疏的条件下,可以表现出很好的效果。
FM
简单来说,对类目型特征,当使用one-hot coding之后,会出现:1.特征空间大;2.特征数据比较稀疏。同时通过观察大量的样本数据可以发现,某些特征经过关联之后,与label之间的相关性就会提高,因此引入两个特征的组合是非常有意义的。那么就需要使用多项式模型:
组合特征的参数一共有
n
(
n
−
1
)
2
\frac{n(n-1)}{2}
2n(n−1)个,任意两个参数都是独立的。然而,在数据稀疏性普遍存在的实际应用场景中,二次项参数的训练是很困难的。其原因是:每个参数
w
i
j
w_ij
wij 的训练需要大量
x
i
x_i
xi 和
w
j
w_j
wj都非零的样本;由于样本数据本来就比较稀疏,满足"
x
i
x_i
xi 和
w
j
w_j
wj都非零”的样本将会非常少。训练样本的不足,很容易导致参数
w
i
j
w_ij
wij不准确,最终将严重影响模型的性能。
如何解决二次项参数的训练问题呢? 矩阵分解
使用矩阵分解之后,我们只需要求n个隐向量即可,假设每个隐向量的长度为k,那么我们就将二次项参数的计算量从
n
2
n^2
n2减少到
k
n
kn
kn,一般来说k远小于n.另外,还有一个好处是将二次项参数分解之后,所有包含“
x
i
x_i
xi 的非零组合特征”(存在某个
j
≠
i
j≠i
j=i,使得
x
i
x
j
≠
0
x_i x_j≠0
xixj=0)的样本都可以用来学习隐向量
v
i
v_i
vi,这很大程度上避免了数据稀疏性造成的影响。
训练方法:梯度下降方法。根据不同的损失函数(例如回归问题就用MSE损失函数,分类问题就用交叉熵损失函数)来推导出梯度下降的公式。
FM参数训练的复杂度也是O(kn)。FM可以在线性时间训练和预测,是一种非常高效的模型。
FFM
FFM是FM的升级版本,通过引入field的概念,FFM把相同性质的特征归于同一个field。FFM模型认为隐向量
v
i
v_i
vi不仅跟
x
i
x_i
xi有关系,还跟与
x
i
x_i
xi相乘的
x
j
x_j
xj所属的Field有关系。
假设样本的 n个特征属于
f
f
f个field,那么FFM的二次项有
n
f
nf
nf个隐向量。而在FM模型中,每一维特征的隐向量只有一个。FM可以看作FFM的特例,是把所有特征都归属到一个field时的FFM模型。根据FFM的field敏感特性,可以导出其模型方程。
首先,FFM相对FM来说,参数量扩大了F倍,效果比FM好,但是要真的想把它用到现实场景中是有问题的,而问题同样在于参数量太大。
感知机
1. 模型,学习策略,学习算法
感知机模型:
f
(
x
)
=
sign
(
w
⋅
x
+
b
)
f(x)=\text{sign} (w\cdot x+b)
f(x)=sign(w⋅x+b)
感知机的损失函数:
L
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
x
i
+
b
)
,
L(w,b)=-\sum_{x_i\in M}y_i(w x_i+b),
L(w,b)=−xi∈M∑yi(wxi+b),
其中M为误分类点的集合。因此损失函数的物理意义是所有误分类点到超平面的距离之和。
学习策略:在假设空间中选取使损失函数最小的模型参数。
学习算法:随机梯度下降。首先任意选取一个超平面
w
0
,
b
0
w_0,b_0
w0,b0,然后用梯度下降法不断地极小化目标函数。极小化过程不是一次使M中所有误分类点的梯度下降,而是随机选取一个误分类点使其梯度下降。
注意:感知机学习算法由于采用不同的初值或选取不同的误分类点,解可以不同。
2. 对偶形式
感知机也可以通过对偶形式求解,主要方法就是将参数w,b用分类点表示,即 w = ∑ i = 1 N α i y i x i , b = ∑ i = 1 N α i y i w=\sum_{i=1}^N\alpha_iy_ix_i, b=\sum_{i=1}^N\alpha_iy_i w=i=1∑Nαiyixi,b=i=1∑Nαiyi
模型度量和选择
1. 特征归一化
为什么需要归一化:
1.归一化可以加快梯度下降法求解最优解的速度。
当特征之间的数值变化范围相差太大时,会使得收敛路径呈Z字型,导致收敛太慢,或者根本收敛不到最优解的结果。
2.归一化可以提高计算精度。
一些分类器需要计算样本之间的距离(如欧氏距离),例如KNN。如果一个特征值域范围非常大,那么距离计算就主要取决于这个特征,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要)。
因此,可以看出,当算法需要使用梯度下降的方法求解最优解(比如逻辑回归)或者该算法计算样本点距离时(比如svm,KNN)必须使用归一化处理。
归一化的方法有线性归一化,标准差标准化,非线性归一化,最常用的是标准差标准化(standscaler)
2. F1,ROC与AUC
在回归任务中最常用的性能度量是均方误差MSE。
E
(
f
;
D
)
=
1
m
∑
i
=
1
m
(
f
(
x
i
)
−
y
i
)
2
E(f;D)=\frac{1}{m}\sum_{i=1}^m(f(x_i)-y_i)^2
E(f;D)=m1i=1∑m(f(xi)−yi)2
在分类问题中:
- 错误率与精度:错误率是分类错误的样本占样本总数,精度是分类正确的样本占样本总数的比例。
将每个类看的同等重要,不适用于解决不平衡分类问题。 - 查准率,查全率和F1
查准率:P(precision)=TP/(TP+FP): 预测正例中真正正例的比例 (纵轴)
查全率:R(recall)=TP(TP+TN): 真正正例中有多少被检测出来 (横轴)
已知查准率和查全率之后,可以通过画出P-R曲线来比较学习器的优劣。具体画法是:根据学习器的预测结果对样例进行排序,将最有可能是正例的排在最前面,最不可能是正例的排在最后面,按此顺序把样本作为正例进行预测,则每次都可以得到当前的查全率和查准率,以查全率R为横轴,查准率P为纵轴就可以画出P-R曲线。这意味着当我们选取一个阈值作为判断输出为正例还是负例之后对应的查全率和查准率,当学习器A的曲线可以完全包住学习器B的曲线时,认为学习器A优于B。
也可以通过F1来度量 1 F 1 = 1 2 ( 1 P + 1 R ) \frac{1}{F1}=\frac{1}{2}(\frac{1}{P}+\frac{1}{R}) F11=21(P1+R1)
而在一些应用中,对查准率和查全率的重视程度有所不同,因此可以使用更一般的形式 F β F_{\beta} Fβ来衡量: 1 F β = 1 1 + β 2 ( 1 P + β 2 R ) \frac{1}{F_{\beta}}=\frac{1}{1+\beta^2}(\frac{1}{P}+\frac{\beta^2}{R}) Fβ1=1+β21(P1+Rβ2) - ROC与AUC
ROC曲线的画法与P-R曲线相似,只是横纵坐标有所不同,ROC的纵轴是“真正例率TPR”,横坐标是“假正例率FPR”。
TPR=TP/(TP+FN) 真正例占所有正例的比例==查全率 (纵轴)
FPR=FP/(FP+TN) 假正例占所有假例的比例 (横轴)
绘出ROC曲线后,若一个学习器的ROC曲线被另一个学习器包住则后者优于前者,若出现交叉则比较两条曲线下的面积AUC。
使用AUC的好处:
1)AUC考虑的是样本预测的排序质量,而避免了对阈值的考虑(比如精度的计算是要先设置一个阈值)。当输出为【0,1】之间的概率值时,使用AUC指标显然考虑就是学习器的整体泛化能力而与阈值无关。如果我们完全随机的对样本分类,那么AUC应该接近0.5。
2)AUC对样本类别是否均衡并不敏感,这也是不均衡样本通常用AUC评价分类器性能的一个原因。
AUC的意义:
AUC是任取一对正负例,分类器给出正例得分大于负例得分的概率,反映了分类器的排序能力,从这个角度来说:
AUC=1,完美分类器,正例得分一定大于负例得分。
0.5~1,正例得分大于负例得分概率大于0.5,该分类器有效果。
AUC=0.5,正例得分随机大于负例概率,分类器无效。
0~0.5,正例得分大于负例得分概率小于0.5,比随机猜测还差。
1. 生成模型和判别模型
生成模型指的是通过学习联合概率分布P(x,y),然后求出条件概率分布P(y|x),比如朴素贝叶斯;
特点:生成模型可以还原条件概率分布,并且具有比较快的收敛速度,还可以用于隐变量的学习。
判别模型指的是直接学习决策函数y=f(x)或者条件概率分布P(y|x)。比如kNN,SVM,决策树。
判别模型通常会更好,因为生成模型会假设数据服从某种分布,例如朴素贝叶斯。数据量小的时候,生成模型可能会有更好的效果,但数据量大的时候,一般不占优势。
2. 线性分类器与非线性分类器的区别和优劣。
如果模型是参数的线性函数,并且存在线性分类面,那么就是线性分类器,否则不是。线性分类器速度快,编程方便,但是拟合结果可能不是太好,非线性分类器编程复杂,但是拟合效果好。
常见的线性分类器:线性回归,逻辑回归,单层感知机,贝叶斯分类。
常见的非线性分类: 决策树,随机森林,GBDT,多层感知机
SVM两者都有(看是线性核还是非线性核)
3. 考虑到机器学习有这么多算法,给定一个数据集,你如何决定使用哪一个算法?
首先应该考虑算法的目的是分类还是回归,然后考虑数据的类型。
如果给定的一个数据集是线性的,线性回归是最好的选择;
如果该数据是非线性互相作用的的,可以用boosting或bagging算法;
如果数据是图像或者音频,那么神经网络可以构建一个稳健的模型;
如果业务需求是要构建一个可以部署的模型,我们可以用回归或决策树模型(容易解释和说明),而不是黑盒算法如SVM,GBM等。总之,没有一个一劳永逸的算法。我们必须有足够的细心,去了解到底要用哪个算法。
4. 对于不平衡(不均衡)分类应该怎么做?
样本不平衡往往会导致模型对样本数较多的分类造成过拟合,即总是将样本分到了样本数较多的分类中;除此之外,一个典型的问题就是 Accuracy Paradox,这个问题指的是模型的对样本预测的准确率很高,但是模型的泛化能力差,其原因是模型将大多数的样本都归类为样本数较多的那一类。
针对不平衡采样主要有以下几种解决方法:
1.收集更多的数据(对原本数据样本就不平衡的样例不适用);
2.改变评判指标(准确率,召回率,F1值,ROC(AUC),ROC 曲线具有不随样本比例而改变的良好性质,因此能够在样本比例不平衡的情况下较好地反映出分类器的优劣。);
3.对数据进行采样;
对数据采样有两种方式:过采样和欠采样,前者适用于数据较少的情况,后者适用于数据较多的情况。
过采样方法:1)最简单的一种方法是对较少的样本进行复制,但没有给少数类样本增加任何新的信息,非常容易造成过拟合;2)Synthetic Minority Over-sampling Technique(SMOTH),利用最近邻的k个点的特征矢量乘随机权重之后累加的结果作为新的数据;3)adaptive synthetic sampling approach(ADASYN),基于SMOTH方法,但是各样本权重取决于这个样本是否容易被模型学习,更多的合成数据来源于难以被模型学习的样本。
4.使用异常检测的方法;
5.改变样本的权重;
改变样本权重指的是增大样本数较少类别的样本的权重,当这样的样本被误分时,其损失值要乘上相应的权重,从而让分类器更加关注这一类数目较少的样本;
6.模型融合的方法,把数量较多的类分为多个N等份,每份数据量与较少的那一类相当,然后分别训练N个模型,最后投票表决预测样本类别。
5. CV的好处
为了避免在测试集上出现的过拟合现象,一般我们需要一组“验证集”,模型训练完成以后在验证集上对模型进行评估。 当验证集上的评估实验比较成功时,在测试集上进行最后的评估。然而,通过将原始数据分为3个数据集合,我们就大大减少了可用于模型学习的样本数量, 并且得到的结果依赖于集合对(训练,验证)的随机选择。
这个问题可以通过交叉验证(CV 缩写) 来解决。 交叉验证仍需要测试集做最后的模型评估,但不再需要验证集。
6. 偏差与方差
偏差度量着偏离真实函数或参数的误差期望,而方差度量着数据上任意特定采样可能导致的估计期望的偏差。
偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。
改善偏差的方法:增多数据特征数、添加高次多项式特征、减小正则化系数λ
改善方差的方法:增大数据规模、减小数据特征数(维数)、增大正则化系数λ
7. 过拟合的原因(方差大)
1)样本数据的问题
样本数量太少;
抽样方法错误,抽出的样本数据不能有效足够代表业务逻辑或业务场景。比如样本符合正态分布,却按均分分布抽样,或者样本数据不能代表整体数据的分布;
样本里的噪音数据干扰过大;
2) 模型问题
模型复杂度高 、参数太多;
决策树模型没有剪枝;
权值学习迭代次数足够多,拟合了训练数据中的噪声和训练样例中没有代表性的特征.
8. 改善过拟合的方法?
1)获取更多的数据:比如从数据源获取更多的数据或者使用数据增强;抽样方法要符合业务场景;清洗噪声数据。
2)使用合适的模型:控制模型复杂度,优先选择简单的模型,或者用模型融合技术;
利用先验知识,添加正则项:L1正则更加容易产生稀疏解、L2正则倾向于让参数w趋向于0;
交叉验证;不要过度训练,最优化求解时,收敛之前停止迭代;
决策树模型剪枝权值衰减。
3)结合多种模型:bagging, boosting, dropout;
4)贝叶斯方法
9.似然的概念
概率描述了已知参数时的随机变量的输出结果;似然则用来描述已知随机变量输出结果时,未知参数的可能取值。
例如,对于“一枚正反对称的硬币上抛十次”这种事件,我们可以问硬币落地时十次都是正面向上的“概率”是多少;而对于“一枚硬币上抛十次,落地都是正面向上”这种事件,我们则可以问,这枚硬币正反面对称的“似然”程度是多少。
在机器学习中,损失函数一般使用的是负对数似然,这里的对数似然指的是在已知输出Y的情况下,对Y的分布参数进行似然估计,估计的参数与输入X有关。
从逻辑回归到神经网络
就是把寻找特征的过程
转化为
寻找一个好的funcation set的过程(即确定一个神经网络的框架,多少层?每层多少个神经元)
例如在语音辨识和文字处理方面,人很难去找到有用的特征,那就不如把寻找特征的过程交给机器自动去处理。
几何间隔是相对于函数间隔来说的一种距离。函数间隔可以表示分类预测的正确性及确信度。但是选择分离超平面时,只有函数间隔还不够,只要成比例地改变w,b就可以改变函数间隔。因此我们对分离超平面的法向量w加某些约束,如规范化, ∣ ∣ w ∣ ∣ = 1 ||w||=1 ∣∣w∣∣=1,使得间隔是确定的。这时函数间隔变成几何间隔。 ↩︎ ↩︎
因为假设若某个x违反了约束条件,使得 y i ( w x i + b ) − 1 < 0 y_i( {w} {x_i}+ b)-1< 0 yi(wxi+b)−1<0,那么就存在对应的拉格朗日乘子 α \alpha α为无穷大,那么 max α i ≥ 0 L ( w , b , α ) = + ∞ ; \max_{\alpha_i\geq0}L(w,b,\alpha)=+\infty; αi≥0maxL(w,b,α)=+∞;相反地,当所有x都满足条件时,那么 max α i ≥ 0 L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 . \max_{\alpha_i\geq0}L(w,b,\alpha)=\frac{1}{2}|| w||^2. αi≥0maxL(w,b,α)=21∣∣w∣∣2.那么外面取 min \min min函数时,实际还是会取 1 2 ∣ ∣ w ∣ ∣ 2 \frac{1}{2}|| w||^2 21∣∣w∣∣2. ↩︎