写在前面:本来今年秋招找工作的目标是算法工程师,直到秋招之前也在准备算法,但是渐渐发现找算法有点困难,既没有大厂实习,也没有厉害的论文,所以只好转向开发了。
复习机器学习的时候写了一点笔记,当然参考了网上一些文章,因为之后也不会找算法了,笔记供有缘人参考。如果有写得不好的地方,欢迎批评指正!
逻辑回归
介绍
逻辑回归本质是一个线性模型,只需要求出超平面的参数。逻辑回归的输出值被看作属于正类的概率。模型简单,可解释性强,而且可以使用分布式实现。
推导
一个事件的几率 o d d s odds odds是指该事件发生的概率与该事件不发生的概率的比值。
给定一个测试样本,逻辑回归把它属于正类的概率 p p p和属于负类的概率 1 − p 1-p 1−p的比值看作一个几率,并把几率的对数看作一个线性函数。推导过程为最大化似然函数,也可以解释为最小化损失函数。
o d d s = p 1 − p log o d d s = w T x p = 1 1 + e − w T x h w ( x ) = p ∏ i = 1 N ( h w ( x i ) ) y i ( 1 − h w ( x i ) ) 1 − y i L = − 1 N ∑ i = 1 N [ y i log h w ( x i ) + ( 1 − y i ) log ( 1 − h w ( x i ) ] ∂ L ∂ w = 1 N ∑ i = 1 N ( h w ( x i ) − y i ) x i odds = \frac{p}{1-p} \\ \log{odds} = w^Tx \\ p = \frac{1}{1+e^{-w^Tx}} \\ h_{w}(x) = p \\ \prod_{i=1}^{N}(h_w(x_i))^{y_i}(1-h_w(x_i))^{1-y_i} \\ L = -\frac{1}{N}\sum_{i=1}^{N}[y_i \log{h_w(x_i)} + (1-y_i)\log{(1-h_w(x_i)}] \\ \frac{\partial{L}}{\partial{w}} = \frac{1}{N}\sum_{i=1}^{N}(h_w(x_i) - y_i) x_{i} odds=1−pplogodds=wTxp=1+e−wTx1hw(x)=pi=1∏N(hw(xi))yi(1−hw(xi))1−yiL=−N1i=1∑N[yiloghw(xi)+(1−yi)log(1−hw(xi)]∂w∂L=N1i=1∑N(hw(xi)−yi)xi
损失函数
逻辑回归使用的损失函数是二分类交叉熵损失函数: − ( y log h ( x ) + ( 1 − y ) log ( 1 − h ( x ) ) ) -(y\log h(x)+(1-y)\log(1-h(x))) −(ylogh(x)+(1−y)log(1−h(x))),其中y=0或1, h ( x ) = 1 / ( 1 + e − w x ) h(x)=1/(1+e^{-wx}) h(x)=1/(1+e−wx)为sigmoid函数,其输出值可以认为是该样本属于正类的概率。
FM算法
介绍
FM(Factorization Machine)主要是为了解决数据稀疏的情况下,特征组合的问题。其主要优点包括:可用于高度稀疏数据场景;具有线性的计算复杂度。
描述
在数据稀疏的场景中,比如广告点击率预测,数据经过onehot处理之后会比较稀疏。对特征进行组合,但是特征同时为1的情况比较少,导致学习困难。
为每个特征分量引入一个 k k k维的辅助向量,本质是对权重矩阵 W W W进行分解:当 k k k足够大时,对于任意对称正定的实矩阵 W ∈ R n × n W\in R^{n \times n} W∈Rn×n,均存在实矩阵 V ∈ R n × k V \in R^{n \times k} V∈Rn×k,使得 W = V V T W=VV^T W=VVT成立。
理论分析中,我们要求参数 k k k取得足够大。但是,在高度稀疏的场景中,由于没有足够的样本来估计复杂的交互矩阵,因此 k k k通常取得比较小。
TODO
支持向量机
介绍
支持向量机是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是边界最大化,最终转化为一个凸二次规划问题来求解。由简至繁的模型包括:
- 当训练样本线性可分时,通过硬边界(hard margin)最大化,学习一个线性可分支持向量机;
- 当训练样本近似线性可分时,通过软边界(soft margin)最大化,学习一个线性支持向量机;
- 当训练样本线性不可分时,通过核技巧和软边界最大化,学习一个非线性支持向量机;
推导
1、定义函数间隔 r i ^ = y i ( w x i + b ) \hat{r_i}=y_i(wx_i+b) ri^=yi(wxi+b)和几何间隔 r i = y i ( w x i + b ) ∣ ∣ w ∣ ∣ r_i=\frac{y_i(wx_i+b)}{||w||} ri=∣∣w∣∣yi(wxi+b)。
2、得到优化目标,化为最简形式。
m
a
x
r
s
.
t
.
y
i
(
w
x
i
+
b
)
∣
∣
w
∣
∣
≥
r
m
i
n
1
2
∣
∣
w
∣
∣
s
.
t
.
y
i
(
w
x
i
+
b
)
≥
1
max\; r \;\;\; s.t.\; \frac{y_i(wx_i+b)}{||w||} \ge r \\ min\; \frac{1}{2}||w|| \;\;\; s.t.\; y_i(wx_i+b) \ge 1
maxrs.t.∣∣w∣∣yi(wxi+b)≥rmin21∣∣w∣∣s.t.yi(wxi+b)≥1
3、引入拉格朗日乘子
α
i
\alpha_i
αi。求解最小最大问题
m
i
n
w
,
b
m
a
x
α
L
(
w
,
b
,
α
)
\underset{w,b}{min}\;\underset{\alpha}{max}\;L(w,b,\alpha)
w,bminαmaxL(w,b,α)和对偶问题
m
a
x
α
m
i
n
w
,
b
L
(
w
,
b
,
α
)
\underset{\alpha}{max}\;\underset{w,b}{min}\;L(w,b,\alpha)
αmaxw,bminL(w,b,α)。
L
(
w
,
b
,
α
)
=
1
2
w
T
w
−
∑
i
=
1
m
(
y
i
(
w
x
i
+
b
)
−
1
)
m
i
n
w
,
b
m
a
x
α
L
(
w
,
b
,
α
)
⇔
m
a
x
α
m
i
n
w
,
b
L
(
w
,
b
,
α
)
L(w,b,\alpha)=\frac{1}{2}w^{T}w-\sum_{i=1}^{m}(y_i(wx_i+b)-1) \\ \underset{w,b}{min}\;\underset{\alpha}{max}\;L(w,b,\alpha) \Leftrightarrow \underset{\alpha}{max}\;\underset{w,b}{min}\;L(w,b,\alpha)
L(w,b,α)=21wTw−i=1∑m(yi(wxi+b)−1)w,bminαmaxL(w,b,α)⇔αmaxw,bminL(w,b,α)
损失函数
SVM使用的损失函数是合页损失: [ 1 − y ( w ⋅ x + b ) ] + [1-y(w \cdot x +b)]_+ [1−y(w⋅x+b)]+。
为什么引入对偶问题?
- 对偶问题将原始问题中的约束转为了对偶问题中的等式约束,对偶问题往往更加容易求解。
- 可以很自然的使用核函数,进而推广到非线性的情况。
核函数
引入核函数目的是把原坐标系里线性不可分的数据用核函数投影到另一个空间,尽量使得数据在新的空间里线性可分。
常见的核函数:线性核、多项式核、指数核、高斯核等。
SVM的主要特点和缺点
特点:
- SVM的目标是对特征空间划分得到最优超平面。
- SVM的理论基础是非线性映射,可以利用核函数代替向高维空间的非线性映射。
- SVM的分类超平面只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目。
- SVM学习问题可以表示为凸优化问题,因此可以利用已知的有效算法发现目标函数的全局最小值。
- SVM适用于小样本数据集上,能够得到比较好的结果。
缺点:
- SVM对大规模训练样本难以实施。SVM的空间消耗主要是存储训练样本和核矩阵,当样本数目很大时将耗费大量的机器内存和运算时间。
- 用SVM解决多分类问题存在困难。需要转化为一对多或一对一分类问题。
- 对缺失数据敏感,对参数和核函数的选择敏感。
SVM和LR的相同点和不同点
相同点:
- LR和SVM都是分类算法
- LR和SVM都是监督学习算法
- LR和SVM都是判别模型
- 如果不考虑核函数,LR和SVM都是线性分类算法,因为分类决策面都是线性的
不同点:
- LR采用对数(log)损失,SVM采用合页(hinge)损失。
- 逻辑回归基于概率理论,认为样本为正类的概率可以用sigmoid函数来表示,然后通过极大似然估计的方法估计出参数的值。支持向量机基于几何边界最大化原理。
- LR对异常值敏感,SVM对异常值不敏感。支持向量机只考虑局部的超平面附近的点,而逻辑回归考虑全局。支持向量机改变非支持向量样本并不会引起决策面的变化,逻辑回归中改变任何样本都会引起决策面的变化。
- 计算复杂度不同。对于海量数据,SVM的效率较低,LR效率比较高。
- 对非线性问题的处理方式不同。LR主要靠特征构造,必须组合交叉特征,特征离散化。SVM也可以这样,还可以通过核函数。
- SVM的损失函数就自带正则化,LR需要额外添加正则化。所以,SVM是结构风险最小化,LR是经验风险最小化。
决策树
介绍
决策树是一种基于规则的算法。决策树学习的损失函数通常是正则化的极大似然函数。决策树学习的策略是以损失函数为目标函数的最小化。
决策树学习算法通常是递归地选择最优特征,并根据该特征对训练数据进行分割。这一过程对应着特征空间的划分,也对应着决策树的构建。
决策树学习算法主要包括三个过程:特征选择,决策树生成和决策树剪枝。
具体算法
具体的决策树算法有:ID3,C4.5,CART等。ID3和C4.5可以是多叉决策树,CART规定是二叉决策树。
ID3使用最大化信息增益作为特征选择的标准。熵是表示随机变量不确定性的度量。熵的范围是0-1,熵越大表示随机变量越不确定。熵可以用来衡量数据集的不确定性,数据集中如果都是一个类别的数据,则不确定性最低。
信息增益=分割前数据集的熵-分割后多个子数据集的加权熵之和。
C4.5使用最大化信息增益率作为特征选择的标准。
信息增益率=信息增益/分割前数据集的熵。
CART回归树使用最小化平方误差作为特征选择的标准。
CART分类树使用最小化Gini指数作为特征选择的标准。Gini指数可以用来衡量一个离散型概率分布的不确定性,所以可以根据样本的类标签衡量一个样本集合的不确定性。基尼指数越大,样本集合的不确定性也就越大。
根据一个特征分割数据集的Gini指数=根据该特征分割后两个的子数据集的加权Gini指数之和。
剪枝
决策树剪枝的基本策略有预剪枝(pre-pruning)和后剪枝(post-pruning)。
- 预剪枝:在决策树生成过程中,在每个节点划分前先估计其划分后的泛化性能,如果不能提升,则停止划分,将当前节点标记为叶结点。
- 后剪枝:生成决策树以后,再自下而上对非叶结点进行考察,若将此节点标记为叶结点可以带来泛化性能提升,则修改之。