优化算法

先导知识:泰勒公式
\[
f(x)=\sum_{n=0}^{\infty}\frac{f^{(n)}(x_0)}{n!}(x-x_0)^n
\]
一阶泰勒展开:
\[
f(x)\approx f(x_0)+f'(x_0)(x-x_0)
\]
二阶泰勒展开:
\[
f(x)\approx f(x_0)+f'(x_0)(x-x_0)+\frac{f''(x_0)}{2}(x-x_0)^2
\]

梯度下降法

\[
\begin{align*}
&f(x)=f(x^k)+g_k^T*(x-x^k)\\
&其中,g_k=g(x^{(k)})=\nabla f(x^{(k)})=f'(x)\\
&求出第k+1次迭代值x^{(k+1)}:\ x^{(k+1)} \leftarrow x^{(k)}+\lambda_k p_k\\
&其中,p_k为搜索方向,取负梯度方向p_k=-\nabla f(x^{(k)});\lambda_k 是步长,由一维搜索确定。\\
&即\lambda_k使得f(x^{(k)}+\lambda_kp_k)=\mathop{min}_{\lambda \geq 0}f(x^{(k)}+\lambda p_k)\\
&当||g_k||<\epsilon或者||f(x^{k+1})-f(x^k)||<\epsilon或者||x^{k+1}-x^k||<\epsilon时,停止迭代
\end{align*}
\]

注意:为何负梯度方向时是使函数值下降最快的方向,在迭代的每一步以负梯度方向更新x的值:
\[
\begin{align*}
&f(x+\Delta x)=f(x)+\sum_{k=1}^{n}\frac{\partial f}{\partial x_{k}}*\Delta x+O(||x||^n)\\
&要使f(x+\Delta x)-f(x)<0,即损失函数减小,而O(||x||^n)可忽略,则\sum_{k=1}^n\frac{\partial f}{\partial x_{k}}*\Delta x<0\\
&可以令\Delta x=-\alpha \sum_{k=1}^{n}\frac{\partial f}{\partial x_k},而\alpha为步长,\alpha>0恒成立\\
&这样就可以满足\sum_{k=1}^n\frac{\partial f}{\partial x_{k}}*\Delta x<0,因此x一直要向负梯度方向更新
\end{align*}
\]

拟牛顿法

二阶泰勒:
\[
f(x)=f(x^{k})+g_k^T*(x-x^k)+\frac{1}{2}(x-x_k)^TH(x^k)(x-x_k)\\
其中,g_k(x)=\nabla f(x^{(k)})是f(x)的梯度向量在点x^{(k)}的值。\\H(x)=\left[\frac{\partial ^2 f}{\partial x_i\partial x_j}\right]_{n*n}。后者称为海赛矩阵(Heses\ matrix)
\]

函数有极小值的必要条件是在极值点处一阶导数为0,即梯度向量为0.

可知:
\[
\nabla f(x)=g_k+H_k*(x-x^k)
\]
令\(\nabla f(x)=0\),则
\[
g_k^T+H_k(x-x_k)=0\\
H_k(x-x^k)=-g_k\\
x^{k+1}=x^k-H_k^{-1}g_k
\]
令\(p_k=-H^{-1}_kg_k\),即\(H_kp_k=-g_k\)

整理下上述思路:\(f(x)\)展开为二阶泰勒->函数极小值必要条件->\(\nabla f(x)=0\)->求得搜索方向\(p_k=-H^{-1}_kg_k\)

求得了搜索方向,就可以类似于梯度下降法迭代\(x\)的值。也就是\(x^{(k+1)}=x^k+p_k\)。

注意到搜索方向\(p_k=-H^{-1}_kg_k\),求解公式中存在矩阵的逆,矩阵的逆一般难求,需要考虑用一个\(n\)阶矩阵\(G_k=G(x^{(k)})\)近似代替\(H_k^{-1}=H^{-1}(x^{(k)})\)。这就是所谓的“拟”牛顿法

首先看要近似的海塞矩阵\(H_k\)要满足的条件。对\(\nabla f(x)=g_k+H_k(x-x^k)\)取\(x=x^{(k+1)}\),即得:\(g_{k+1}=g_k+H_k(x^{(k+1)}-x^k)\),记\(y_k=g_{k+1}-g_k,\delta_k=x^{(k+1)}-x^k\),则:
\[
y_k=H_k\delta_k
\]
这就是海塞矩阵要满足的条件。也就是\(H^{-1}_ky_k=\delta_k\)。根据这个条件,近似的算法有两种,也就是"DFP"算法和"BFGS"算法,以及推广的"Broyden"算法。参见《统计学习方法》-李航-p222~224

拉格朗日对偶性

约束最优化问题中,由于原始问题难求等原因,需要利用拉格朗日对偶性将原始问题转化为对偶问题,通过求解对偶问题而求得原始问题的解。

约束最优化问题:
\[
\mathop{min}_{x\in R^n}f(x)\\
s.t\quad c_j(x)\leq 0,\ i=1,2,...,k\\
h_j(x)=0,\ j=1,2,...,l
\]
其转化而得的对偶问题:广义拉格朗日函数极大极小问题
\[
\mathop{max}_{\alpha,\beta}\theta_D(\alpha,\beta)=\mathop{max}_{\alpha,\beta}\mathop{min}_xL(x,\alpha,\beta)\\
st.\quad \alpha_i\geq0,\ i=1,2,...,k
\]
KTT条件:对偶问题和原问题能够相互转化的充要条件

假设函数\(f(x)\)和\(c_i(x)\)是凸函数,\(h_j(x)\)是仿射函数,并且不等式约束\(c_i(x)\)是严格可行的,则\(x^*\)和\(\alpha ^*,\beta ^*\)分别是原始问题和对偶问题的解的充要条件是\(x^ *\),\(\alpha^*\),\(\beta ^*\)满足KTT条件:
\[
\nabla _x L(x^*,\alpha ^*,\beta ^*)=0\\
\alpha^*_ic_i(x^*)=0,\ i=1,2,...,k\\
c_i(x^*)\leq 0,\ i=1,2,...,k\\
\alpha ^*_i\geq0,\ i=1,2,...,k\\
h_j(x^*)=0,\ j=1,2,...,l
\]

李航-《统计学习方法》-p218~p228

最大似然函数和最小损失函数

当然你也可以叫它”最大似然函数和最小二乘估计“,两者殊途同归,都是意在拟合数据

最小二乘估计

模型最合理的参数估计量应该使得模型最好的拟合样本数据,要求估计值和观测值之差的平方最小。

定义:
\[
Q=\sum_{i=1}^n(y-y')^2
\]
其中,\(Q\)为误差,\(y\)为观测值,\(y'\)为估计值,\(y'=\beta_0+\beta_1x\)

矩阵表示:
\[
min||A\beta-Y||_2
\]
最优解为:
\[
\beta=(A^TA)^{-1}A^TY
\]
其中,估计值\(Y'=||A\beta||\)。关于求解方法参见:最小二乘法解的矩阵形式推导.若A非满秩,常常采用求伪逆的方法或者岭回归等方法解决。求伪逆,参见周志华-《机器学习》-p402~p403(A.3奇异值分解)

最大似然函数

模型最合理的参数估计量应该使得观测样本出现的概率最大。

定义:联合概率密度函数\(p(D|\theta)\)称为相对于\({x_1,x_2,...,x_N}\)关于\(\theta\)的似然函数
\[
l(\theta)=p(D|\theta)=p(x_1,x_2,...,x_N|\theta)=\prod_{i=1}^{N}p(x_i|\theta)
\]
其中,\(\theta\)为待估计参数。

与最小二乘法不同不需要确定概率分布函数不同,最大似然函数需要”已知“这个概率分布函数。事实上,若假设满足正态分布函数,最大似然函数和最小二乘估计是等价的。参见:最大似然估计和最小二乘估计的区别与联系。最小二乘法以估计值和观测值的差平方和为损失函数,最大似然函数则是以最大化似然概率函数为目标函数。

交叉熵

交叉熵衡量的是两个分布\(p\)、\(q\)之间的相似性。

定义:
\[
H(P,Q)=-\sum_{i=1}^np(x_i)log(q(x_i))
\]
其中\(H(p,q)​\)即为交叉熵。事实上,交叉熵是由KL散度(亦称相对熵)而来,KL散度:
\[
KL(P||Q)=\int _{-\infty}^{\infty}p(x)log\frac{p(x)}{q(x)}dx
\]
展开便得:
\[
KL(P||Q)=\int_{-\infty}^{\infty}p(x)log\ p(x)dx-\int_{-\infty}^{\infty}p(x)log\ q(x) dx=-H(P)+H(P,Q)
\]
在机器学习中,常常需要评估观测值和估计值之间的差距,由于KL散度能够度量两个概率分布之间的差距,可以最小化KL散度实现“学习”的目的。又由于\(H(P)\)为固定值,所以通常直接最小化交叉熵\(H(P,Q)\),参见周志华-《机器学习》-p414~p415(C.3KL散度)

在分类问题中,交叉熵的本质就是似然函数的最大化。参见:最大似然损失和交叉熵损失函数的联系

关于为何逻辑logistic回归采用交叉熵(似然函数)而非最小二乘作损失函数,可能有两个原因:1.交叉熵常常用于分类,而最小二乘常常用于回归;2.计算便利

逻辑回归

先导知识:

指数族分布

若某概率满足
\[
p(y;\eta)=b(y)exp(\eta^TT(y)-a(\eta))
\]
其中\(\eta\)是自然参数,\(T(y)\)是充分统计量,\(exp(-a(\eta))\)起到归一化作用。确定\(T,a,b\),就可以确定参数为\(\eta\)的指数族分布。高斯分布、伯努利分布、多项分布、泊松分布等都是指数族分布的特定形式。

伯努利分布:
\[
\begin{align*}
p(y;\phi)&=\phi^y(1-\phi)^{1-y}\\
&=exp(ylog\ \phi+(1-y)log(1-\phi))\\
&=epx(ylog\frac{\phi}{1-\phi}+log(1-\phi))
\end{align*}
\]
对照上述指数族分布定义,则:
\[
\begin{equation}
\left \{
\begin{array}{lr}
T(y)=y,\\
\eta=log\frac{\phi}{1-\phi},(\frac{\phi}{1-\phi}=e^{\eta}->(1+e^y)\phi=e^y->\phi=\frac{e^{\eta}}{1+e^{\eta}}=\frac{1}{1+e^{-\eta}})\\
a(\eta)=-log(1-\phi)\\
b(y)=1
\end{array}
\right .
\end{equation}
\]
常见的概率分布参见:周志华-《机器学习》-p409~p413(C概率分布)

逻辑回归

考虑二分类问题,\(y\in\{0,1\}\),因为是二分类问题,可以很自然的想到选择\(p(y|x;\theta)\)~\(Bernouli (\phi)\),即服从伯努利分布。那么,
\[
h_\theta=E(y|x;\theta)=\phi=\frac{1}{1+e^{-\eta}}=\frac{1}{1+e^{-\theta^Tx}}
\]
其中,\(h_\theta(x)=E(y|x;\theta)=\phi\)是伯努利分布的性质(其数学期望等于每次实验成功的概率\(\phi\)),\(\phi=\frac{1}{1+e^{-\eta}}\)是伯努利分布为指数族分布时的结论(见\(\eta=log\frac{\phi}{1-\phi}\)后面推导过程)

定义:
\[
h_\theta=g(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}}
\]
目标函数推导:
\[
\begin{equation}
\left \{
\begin{array}{lr}
p(Y=1|x;\theta)=h_\theta(x)\\
p(Y=0|x;\theta)=1-h_\theta(x)
\end{array}
\right .
\end{equation}
\]
其中,\(h_\theta(x)\)表示类别为1的概率。

结合起来
\[
p(Y=y|x;\theta)=(h_{\theta})^y(1-h_{\theta})^{1-y}
\]
对数似然函数:
\[
\begin{align*}
l(\theta)&=\prod_{i=1}^m p(Y=y_i|x_i;\theta)\\
&=\prod_{i=1}^m(h_\theta(x_i))^{y_i}(1-h_\theta(x_i))^{1-y_i}
\end{align*}\\
L(\theta)=\sum_{i=1}^{m}y_ilog\ h_{\theta}(x_i)+(1-y_i)log\ (1-h_\theta(x_i))
\]
优化损失函数:
\[
J(\theta)=\frac{-1}{m}L(\theta)
\]
使用梯度下降法等优化算法优化即可。

注意此处的损失函数和交叉熵定义:\(H(p,q)=-\sum_{i=1}^np(x_i)log(q(x_i))\)

列出其它常见的损失函数

  • 0-1损失函数
    \[
    L(y,f(x))=
    \begin{equation}
    \left \{
    \begin{array}{lr}
    1\quad y\neq f(x)\\
    0\quad y=f(x)
    \end{array}
    \right .
    \end{equation}
    \]

  • 平方损失函数
    \[
    L(y,f(x))=(y-f(x))^2
    \]

  • 绝对值损失函数
    \[
    L(y,f(x))=|y-f(x)|
    \]

  • 对数损失函数
    \[
    L(y,p(y|x))=-log\ p(y|x)
    \]

支持向量机

先导知识:

点到直线距离公式
\[
d=|\frac{Ax_0+By_0+C}{\sqrt{A^2+B^2}}|=|\frac{wx_i+b}{||w||}|
\]
假设点X被正确分类。当X属于正类时,\(wx+b>0\),此时点X在直线上方。当X属于负类时,\(wx+b<0\),此时点X在直线下方。

几何间隔最大化
\[
\mathop{max}_{w,b}\ \gamma\\
s.t\quad \frac{y_i(wx_i+b)}{||w||}\geq \gamma,\ i=1,2,...,N
\]
这也即是,学习超平面参数\(w\),使得当所有点到超平面的距离都大于某个数\(\gamma\):
\[
\frac{y_i(wx_i+b)}{||w||}\geq \gamma
\]
时,最大化这个数\(\gamma\)。乘以\(y_i\)的目的在于当\(y_i\in\{+1,-1\}\)时,无论\(wx_i+b\)得到的结果无论正负,只要分类结果正确,保持\(y_i(wx_i+b)\)为正。

可以改写为,令函数间隔\(\hat{\gamma}=y_i(wx_i+b)\),得\(\gamma=\frac{\hat{\gamma}}{||w||}\),则
\[
\mathop{max}_{w,b}\frac{\hat{\gamma}}{||w||}\\
s.t\quad y_i(wx_i+b)\geq\hat{\gamma},\ i=1,2,...,N
\]
由于有分母\(||w||\)有规范化作用,函数间隔\(\hat{\gamma}\)的取值并不影响最优化问题的解,令\(\hat{\gamma}=1\)翻转分子分母,变最大化问题为最小化问题:
\[
\mathop{min}_{w,b}\frac{1}{2}||w||^2\\
s.t\quad y_i(wx_i+b)-1\geq 0,\ i=1,2,...,N
\]

线性可分支持向量机

硬间隔最大化

定义:
\[
\mathop{min}_{w,b}\frac{1}{2}||w||^2\\
s.t\quad y_i(wx_i+b)-1\geq 0
\]
求得最优解\(w^*,b^*\)。代入之后就可以求得分离超平面:\(w^*x+b^*=0\);分类决策函数:\(f(x)=sign(w^*x+b^*)\)

线性支持向量机

软间隔最大化:正则化,引入松弛变量\(\xi_i\geq0\),约束条件变为\(y_i(wx_i+b)\geq 1-\xi_i\);并且对每个松弛变量\(\xi_i\),支付一个代价\(\xi_i\),目标函数变为\(\frac{1}{2}||w||^2+C\sum_{i=0}^{N}\xi_i\),其中\(C\)为正则化参数。这样使得\(\frac{1}{2}||w||^2\)尽量小,即间隔最大而且误分类点个数尽可能少。

定义:
\[
\mathop{min}_{w,b,\xi}\frac{1}{2}||w||^2+C\sum_{i=1}^N\xi_i\\
s.t\quad y_i(wx_i+b)\geq 1-\xi_i\ i=1,2,...,N\\
\xi_i\geq0,\ i=1,2,...,N
\]
\(\xi_i\geq 0\)原因:1)\(\xi_i\geq 0\)意为允许误分点,\(\xi>0\)意为允许误分点,\(\xi<0\)在分隔界面后侧无意义。2)目标是\(\mathop{min}_{w,b,\xi}\),若允许\(\xi<0\)则会使目标式使\(\xi\to-\infty\),错误

原始最优化算法的拉格朗日函数:
\[
L(W,b,\xi,\alpha,\mu)=\frac{1}{2}||w||^2+C\sum_{i=1}^N\xi_i-\sum_{i=1}^{N}\alpha_i(y_i(wx_i+b)-1+\xi_i)-\sum_{i=1}^N\mu_i\xi_i
\]
其中,\(W,b\)为超平面的参数,\(\alpha,\xi\)为拉格朗日乘子(\(\alpha_i>0,\xi>0\),两个条件,两个拉格朗日乘子)

对偶问题是拉格朗日的极大极小问题
\[
\mathop{max}_\alpha \mathop{min}_{w,b} L(w,b,\alpha)
\]
首先求\(L(w,b,\xi,\alpha,\mu)\)对\(w,b,\xi\)的极小。
\[
\begin{equation}
\left \{
\begin{array}{lr}
\frac{\partial}{\partial w}L(w,b,\xi,\alpha,\mu)=w-\sum_{i=1}^N\alpha_iy_ix_i=0\\
\frac{\partial}{\partial b}L(w,b,\xi,\alpha,\mu)=-\sum_{i=1}^N\alpha_i y_i=0\\
\frac{\partial}{\partial \xi}L(w,b,\xi,\alpha,\mu)=C-\alpha_i-\mu_i=0
\end{array}
\right .
\end{equation}
\]
求得:
\[
\begin{equation}
\left \{
\begin{array}{lr}
w=\sum_{i=1}^N\alpha_i y_i x_i\\
\sum_{i=1}^{N}\alpha_i y_i=0\\
C-\alpha_i-\mu_i=0
\end{array}
\right .
\end{equation}
\]
代入\(L(w,b,\xi,\alpha,\mu)\)得
\[
\begin{align*}
L(w,b,\xi,\alpha,\mu)&=\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_j(x_ix_j)+C\sum_{i=1}^{N}\xi_i-\\
&\sum_{i=1}^{N}(\alpha_iy_i(wx_i+b)-\alpha_i+\alpha_i\xi_i)-\sum_{i=1}^{N}\mu_i\xi_i(1)\\
&=\frac{1}{2}\sum_{i=1}^{N}\sum_{i=1}^{N}\alpha_i\alpha_jy_iy_j(x_ix_j)+(C-\alpha_i-\mu_i)\sum_{i=1}^{N}\xi_i-\sum_{i=1}^N\alpha_i(2)\\
&=\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_j(x_ix_j)-\sum_{i=1}^N\alpha_i
\end{align*}
\]
在(1)中,由于\(\sum_{i=1}^N\alpha_iy_i=0\),则\(\sum_{i=1}^N(\alpha_iy_i(wx_i+b))=0\)

在(2)中,由于\(C-\alpha_i-\mu_i=0\),则\((C-\alpha_i-\mu_i)\sum_{i=1}^{N}\xi_i=0\)

得对偶问题:
\[
\begin{align*}
\mathop{max}_{\alpha}-\frac{1}{2}\sum_{i=1}^{N}\sum^{N}_{j=1}\alpha_i\alpha_jy_iy_j(x_ix_j)+\sum_{i=1}^N\alpha_i\\
s.t\quad \sum_{i=1}^{N}\alpha_iy_i=0\quad\\
C-\alpha_i-\mu_i=0\quad(1)\\
\alpha_i\geq0\quad(2)\\
\mu_i\geq0\quad(3)\\
(i=1,2,...,N)
\end{align*}
\]
\((1),(2),(3)\)可得:\(0\leq\alpha_i\leq C\)

也即是:
\[
\begin{align*}
\mathop{max}_{\alpha}-\frac{1}{2}\sum_{i=1}^{N}\sum^{N}_{j=1}\alpha_i\alpha_jy_iy_j(x_ix_j)+\sum_{i=1}^N\alpha_i\\
s.t\quad \sum_{i=1}^{N}\alpha_iy_i=0\\
0\leq\alpha_i\leq C\\
(i=1,2,...,N)
\end{align*}
\]
这就是线性支持向量机的对偶问题。

有对偶问题据说易求得最优解\(\alpha^*=(\alpha_1^*,\alpha_2^*,...,\alpha_N^*)\),从而求得原始问题中\(w^*=\sum_{i=1}^N\alpha_i^*y_ix_i\),选择\(\alpha^*\)中一个适合条件\(0<\alpha_j^*<C\)分量\(\alpha_j^*\),可得原始问题中的\(b^*=y_j-\sum_{i=1}^Ny_i\alpha_i^*(x_ix_j)\)。然后代入即得分离超平面:
\[
w^*x+b^*=0
\]
分类决策函数:
\[
f(x)=sign(w^*x+b^*)
\]

非线性支持向量机和核函数

举例而言,
\[
w_1(x^{(1)})^2+w_2(x^{(2)})^2+b=0
\]
此为非线性问题,使用\(z=\phi(x)=(x^{(1)},x^{(2)})\)映射可得
\[
w_1z^{(1)}+w_2z^{(2)}+b=0
\]
转化为了线性问题。

从输入空间x到特征空间的映射\(\phi(x)​\): \(x​\)->\(H​\)

线性支持向量机只涉及输入实例与实例之间的内积,且映射函数\(\phi(x)\)不易求

核函数\(K(x,z)=\phi(x)·\phi(z),\quad x,z\in X\)

将输入空间的内积\(x_i·x_j\)转化为特征空间的内积\(\phi(x_i)·\phi(x_j)=K(x,z)\),此时当映射函数是非线性函数时,就可以在线性SVM中学习非线性模型了。

函数\(K(x,z)\)为核函数的条件

通常的核函数就是正定核函数。

正定核的充要条件:

\(K(x,z)\)是定义在\(X*X->R\)上的对称函数,则\(K(x,z)\)为正定核函数的充要条件:

\(K(x,z)\)对应的Gram矩阵:
\[
K=[k(x_i,x_j)]_{m*m}=
\left[
\begin{matrix}
(x_1,x_1)&(x_1,x_2)&(x_1,x_3)&\cdots&(x_1,x_m)\\
\vdots\\
(x_m,x_1)&(x_m,x_2)&(x_m,x_3)&\cdots&(x_m,x_m)
\end{matrix}
\right]
\]
此矩阵半正定

常用核函数

  • 多项式核函数:\(K(x,z)=(x·z+1)^p\)

    对应的分类决策函数为:\(f(x)=sign(\sum_{i=1}^{N_c}a_i^*y_i(x_i·x+1)^p+b^*)\)

  • 高斯核函数:\(K(x,z)=exp(-\frac{||x-z||^2}{2\sigma^2})\)

    对应的分类决策函数:\(f(x)=sign(\sum_{i=1}^{N_c}a_i^*y_iexp(-\frac{||x-z||^2}{2\sigma^2})+b^*)\)

此处参见李航-《统计学习方法》-p122~p123

高效实现支持向量机“学习”的算法:SMO序列最小最优化算法

SMO求解如下凸二次规划的对偶问题:
\[
\begin{align*}
&\mathop{min}_\alpha\ \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_jK(x_i,x_j)-\sum_{i=1}^{N}\alpha_i\\
&s.t\quad \sum_{i=1}^{N}\alpha_iy_i=0\\
&0\leq \alpha_i\leq C,\ i=1,2,...,N
\end{align*}
\]
变量是拉格朗日乘子\(\alpha\),一个变量\(\alpha_i\)对应于一个样本点\((x_i,x_j)\)。变量总量等于训练样本容量\(N\).

启发式算法:

  • 若所有变量符合KTT条件,则该问题可由KTT求得(KTT条件是该最优化问题的充要条件)
  • 否则,选择2个变量(1个最不符合KTT,另1个自动确定)构造新的二次规划问题求解。

李航-《统计学习方法》-p95

KMeans

一种聚类算法

算法流程:
\[
\begin{align*}
输入:&样本集D=\{x_1,x_2,...,x_m\};聚类簇数K\\
过程:\\
&随机初始化K个均值向量\{u_i,u_2,...,u_k\}\\
&Repeat:\\
&\quad for\ i=1,2,...,m\quad do\\
&\qquad 将距离最近的均值向量u_i作为x_i的簇标记(C_{u_{j}}=C_{u_j}\cup(x_i))\\
&\quad for\ i=1,2,..,k\quad do\\
&\qquad 计算 均值均值向量u_i'=\frac{\sum_{x\in C_{u_j}}x}{|C_{u_j}|}并更新
\end{align*}
\]
总结下来就两步:1)样本划归簇标记;2)更新均值向量

KMeans算法优缺点

优点:

  • 原理简单,超参就一个聚类簇数K
  • 速度快

缺点:

  • K值需要事先确定
  • 对初始均值向量敏感
  • 对离群点敏感
  • 不断对每一个样本分类调整,不断调整聚类中心,当数据量大时,时间开销大
  • 没有先验知识。比如不能加入先验:cluster A: 500; cluster B: 1000
  • 不能发现非凸形状的簇

决策树

生成:

  • 假设:

    • 当前节点包含的样本均属于同一个类别
    • 当前节点包含的样本集合为空
    • 当前属性集为空,或者所有样本在所有属性上取值相同

    标注该节点为叶节点,返回

  • 否则:

    • 在每个节点上,根据特征选择规则(信息增益ID3,增益率C4.5,基尼指数CART等)选择属性,分裂节点,直到无法分裂

常见的特征选择规则:

先导知识:

信息熵\(Ent(D)=-\sum_{k=1}^{|y|}p_klog\ p_k\)。 \(p_k\): 当前样本集合中第k类样本所占比例。

\(Ent(D)\)的值越小,则\(D\)的纯度越高。

多说一句,这和交叉熵定义很像。交叉熵:\(H(p,q)=-\sum_{i=1}^np(x_i)log(q(x_i))\)

  • 信息增益\(Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac{D^v}{D}Ent(D^v)\)

    特征a上的信息增益,选择较大的特征分裂

  • 增益率\(Gain\_ratio(D,a)=\frac{Grain(D,a)}{IV(a)}\)

    其中,\(IV(a)=-\sum_{v=1}^{V}\frac{D^v}{D}log_2\frac{D^v}{D}\)称为特征a的“固有值”。

    特征a上的增益率,选择较大的特征分裂

  • 基尼值\(Gini(D)=\sum_{k=1}^{|y|}\sum_{k'\neq k}p_k p_{k'}=1-\sum_{k=1}^{|y|}p_k^2\)

    \(Gini(D)\)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率。\(Gini(D)\)越小,数据集\(D\)的纯度越高。

    特征a的基尼指数定义为:\(Gini\_index(D,a)=\sum_{v=1}^V\frac{|D^v|}{|D|}Gini(D^v)\)

    选择划分后使得,基尼指数最小的特征

集成算法

boosting:将弱学习器提升为强学习器。典型代表:AdaBoost、GBDT等,GBDT将在下面单独介绍

先从初始训练集训练出一个基学习器,根据基学习器的表现对训练样本分布进行调整,使之前错误分类的样本获得更多的“关注”,基于调整后的样本分布训练下一个基分类器,如此重复,再将T个基分类器加权结合。

AdaBoost

输入:训练数据集\(T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}\);弱学习算法
输出:最终分类器\(G(x)\)

  1. 初始化训练数据的权值分布:
    \[
    D_1=(w_{11},w_{12},...,w_{1N}),\quad w_{1j}=\frac{1}{N},i=1,2,...,N
    \]

  2. 对\(m=1,2,...,M\)(训练组合M个弱分类器):

    1)使用带权值分布的\(D_m\)的训练数据集学习,得到基分类器\(G_m(x):x\to\{-1,+1\}\)

    2)计算\(G_m(x)\)在训练数据集上的分类误差率
    \[
    e_m=\sum_{i=1}^{N}p(G_m(x_i)\neq y_i)=\sum_{i=1}^{N}w_{m_i}I(G_m(x_i)\neq y_i)
    \]
    3)计算\(G_m(x)\)的系数
    \[
    \alpha_m=\frac{1}{2}log \frac{1-e_m}{e_m}
    \]
    4)更新训练数据集的权值分布
    \[
    D_{m+1}=(w_{({m+1},1)},w_{({m+1},2)},...,w_{({m+1},N)})\\
    w_{(m+1,i)}=\frac{w_{(m,i)}}{Z_m}exp(-\alpha_m y_iG_m(x_i)),\quad i=1,2,...,N
    \]
    其中\(Z_m\)为规范化系数,\(Z_m=\sum_{i=1}^{N}w_{m_i}exp(-\alpha _my_iG_m(x_i))\)

  3. 构建基本分类器的线性分类器:\(f(x)=\sum_{m=1}^M\alpha_mG_m(x)\)

    最终分类器:
    \[
    G(x)=sign(f(x))=sign(\sum_{m=1}^M\alpha_mG_m(x))
    \]

简而言之,求两个参数:训练数据的权重\(D_m\)和基分类器\(G_m(x)\)的系数\(\alpha_m\)

AdaBoost算法是加法模型,损失函数是指数函数,学习算法是前向分布算法时的二分类学习方法

参见李航-《统计学习方法》-p138~p142

bagging:随机森林即是bagging的一种扩展变体

从原始数据集中采取有放回抽样,构造“采样集”,采样集\(D'\)的数据量是和原始数据集\(D'\)相同的。可采样出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将基学习器结合。

显然有一部分样本会在采样集\(D'\)中出现多次,而另一部分样本始终不出现,样本在\(m\)次采样中始终不被采样到的概率为:
\[
\lim_{m\to \infty}(1-\frac{1}{m})^m=\frac{1}{e}
\]
随机森林

随机性:

1)基决策树的训练数据集由bagging产生。

2)待选属性集随机产生。待选属性集由节点的属性集合中随机选择的\(k\)个属性组成,\(k=log_2 d\),d为节点属性集合的大小

对于提升算法而言,基分类器\(f\)常采用回归树和逻辑回归。树模型有以下优缺点。

  • 优点

    • 可解释性强
    • 具有伸缩不变性,不必归一化特征
    • 对异常点鲁棒
  • 缺点
    • 缺乏平滑性。回归预测时,输出值只能输出有限的若干个数值
    • 不适合处理高维度稀疏数据

gbdt和xgboost区别:

  • gbdt在函数空间中采用梯度下降法进行优化
  • xgboost在函数空间中利用牛顿法进行优化

梯度提升决策树

梯度提升决策树(Gradient Boosting Decision Tree, GBDT)

梯度提升算法利用梯度下降法的近似方法,其关键是利用损失函数的负梯度在当前模型的值,也就是
\[
-\left[ \frac{\partial L(y,f(x_i))}{\partial f(x_i)} \right]_{f(x)=f_{m-1}(x)}
\]
作为提升树算法中的残差的近似值,拟合一个回归树

模型F定义(加法模型):
\[
F(x;w)=\sum_{t=0}^T\alpha_t h_t(x;w_t)
\]
其中\(x\)为输入样本,\(h\)是分类回归树,\(w\)是分类回归树的权重,\(\alpha\)是每棵树的权重

目标:最小化损失函数
\[
F^*=\mathop{argmin}_{F}\sum_{i=0}^N L(y_i,F(x_i;w))
\]
迭代求局部最优解

梯度提升决策树算法流程

输入:\((x_i,y_i),T\)

  1. 初始化\(f_0\)
  2. \(for\ t=1\ to\ T\ do\)
    • 计算损失函数的负梯度,作为残差的近似值:\(\tilde{y_i}=-\left[ \frac{\partial L(y,F(x_i))}{\partial F(x_i)} \right]_{F(x)=F_{t-1}(x)}\),其中\(i=1,2,...,N\)
    • 学习第\(t\)棵树:\(w^*=\mathop{argmin}_w\sum_{i=1}^{N}(\tilde{y_i}-h_t(x_i;w))\)
    • line search 寻找步长:\(\rho^*=\mathop{argmin}_{\rho}\sum_{i=1}^NL(y_i,F_{t-1}(x_i)+\rho h_t(x_i;w^*))\)
    • 令\(f_t=\rho^*h_t(x;w^*)\),更新模型
  3. 输出\(F_t\)

稍微总结一下上两节(集成算法和梯度提升决策树)的内容,实际上述两节是一起的,但是内容过多而且非常重要,所以拆成了两节。首先说了两种最重要的集成算法,boosting和bagging。boosting算法的代表有AdaBoost、梯度提升树,有名的工具包如XGBoost, LightGBM等,而bagging算法的代表有随机森林。实际上集成算法还包括stacking和blending等,stacking也是比较常用的集成算法,可参见:详解stacking过程集成学习中的 stacking 以及python实现。实际上,单是一个详解的boosting算法的篇幅都不止如此,况且并无能力指点江山。这里有篇关于XGBoost比较好的解释并且回答中包含了一个PPT,可以下载下来仔细看看:wepon-机器学习算法中 GBDT 和 XGBOOST 的区别有哪些?

再次强调,这部分非常重要,篇幅不够只是因为理解不深,不敢乱写而已:)

大文件排序

大文件,文件大小远大于内存大小,文件为若干数字,要求对这些数字排序

外部排序:内存极少情况下,利用分治策略,利用外存保存中间结果,再用多路归并排序

具体步骤:

1)将大文件根据实际内存大小,分割为合理大小的小文件

2)对每个小文件利用内部排序进行排序

3)每次利用胜者树拿到各个小文件的最小值,从而得到全局最小值,每次将全局最小值写入最终的结果大文件

总而言之,分治合并的过程。

胜者树和败者树可以在\(log(n)\)的时间内找到最值。胜者树的叶节点存储实际数字,非叶节点存储“胜者”下标。参见:胜者树与败者树

Word2Vec

模型无法直接处理文字,需要转化为实数向量的形式。将word映射到一个新的空间中,并以多维的连续实数空间向量进行表示,叫做word representation,或者word embeddingword embedding目前可以划分为两种方法。一是稀疏表示,如词袋等。二是非稀疏表示,如Word2Vec。Word2Vec在转化后的向量维度大幅降低,且能“保持词语语义”。举例而言,希望将"queen"转化为向量形式,使用one-hot表示,可能需要10000维向量,而使用Word2Vec表示,可能只要20维向量;Word2Vec还能保持词语的含义,两个词转化后的向量距离越小,其词义越相近。

先导知识:

1)稀疏表示的代表:词袋(one-hot)

假设对于一个文本,将其仅仅看作是一个词集合,而忽略其词序和语法

假设通过语料库训练得到了一个词典:{'hello','world','my'}


\[
"world"\to[0,1,0]\\
"my"\to[0,0,1]
\]
这是一个很简单的例子,通过语料库训练到的词典有可能含有10000个词语,这是很常见的:),那么每个词语转化后的向量维数都为10000维

2)n-gram

n-gram是一种统计语言模型。根据前\(n-1\)个item预测第\(n\)个item,这些item可以是音素(语言识别应用),字符(输入法应用),词(分词应用)。一般可以从大规模文本或者语料库中生成n-gram模型。

从字符层级上看,给定一串字符,如for ex_,n-gram可以用来预测下一个可能的字符

  • 假设T是由词序列\(A_1,A_2,....A_n\)组成,则
    \[
    p(T)=p(A_1,A_2,...,A_n)=p(A_1)p(A_2|A_1)p(A_3|A_1,A_2)...p(A_n|A_1,A_2,...,A_{(n-1)})
    \]

  • 其实就是马尔科夫假设:一个item出现的概率只与前m个item有关

参见词袋模型的通俗介绍

Word2Vec

  • 分为两种语言模型:CBOW和Skip-gram

  • CBOW根据上下文的词语预测当前词语出现概率

    • 最大化对数似然函数\(L=\sum _{w\in c}log\ P(w|context(w))\)

    • 输入层是上下文的词向量(词向量是CBOW的参数,实际上是CBOW的副产物)

    • 投影层是简单的向量加法

    • 输出层是输出最可能的w。由于词料库中词汇量是固定的|c|个,可以将其看作是多分类问题。最后一层是Hierarchical softmax:
      \[
      p(w|context(w))=\prod_{j=2}^{l^w}p(d_j^w|x_w,\theta_{j-1}^w)
      \]

      从根节点到叶节点经过了\(l^{w}-1\)个节点,编码从下标2开始(根节点无编码),对应的参数向量下标从1开始。

  • skip-gram 已知当前词语,预测上下文

    • 与CBOW不同之处在于:

      1. 输入层不再是多个词向量,而是一个词向量
      2. 投影层实际什么都没干,直接将输入层的词向量传递给输出层
    • 模型:
      \[
      p(context(w)|w)= \prod_{w \in context(w)}p(u|w)
      \]

    • 这是一个词袋模型,所以每个u都是无序,相互独立的

    Doc2Vec

与Word2Vec唯一不同之处在于,串联起word vector在上下文中预测下一个单词。

上下文是固定长度且在段落中sliding window中采样,段落向量在一段中共享在同一段中产生的所有窗口,但是不同段间不共享。


Connect

Email: cncmn@sina.cn

GitHub: cnlinxi@github

后记

这本是开学初整理的一份笔记,是当时感兴趣的点写写记记而成。本文只是介绍了机器学习领域非常小的一部分,权当管中窥豹。实际上这篇又是拾人牙慧,我尽可能在记得的地方加以引用,但难免疏漏,还请告知以补上引用。以及这里面肯定夹带了我的私货,如有错误,还请斧正。

周志华-《机器学习》

李航-《统计学习方法》

一小部分机器学习算法小结: 优化算法、逻辑回归、支持向量机、决策树、集成算法、Word2Vec等的更多相关文章

  1. 逻辑回归 vs 决策树 vs 支持向量机(I)

    原文链接:http://www.edvancer.in/logistic-regression-vs-decision-trees-vs-svm-part1/ 分类问题是我们在各个行业的商业业务中遇到 ...

  2. 逻辑回归 vs 决策树 vs 支持向量机(II)

    原文地址: Logistic Regression vs Decision Trees vs SVM: Part II 在这篇文章,我们将讨论如何在逻辑回归.决策树和SVM之间做出最佳选择.其实 第一 ...

  3. L-BFGS算法详解(逻辑回归的默认优化算法)

    python信用评分卡建模(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_ca ...

  4. Stanford大学机器学习公开课(三):局部加权回归、最小二乘的概率解释、逻辑回归、感知器算法

    (一)局部加权回归 通常情况下的线性拟合不能很好地预测所有的值,因为它容易导致欠拟合(under fitting).如下图的左图.而多项式拟合能拟合所有数据,但是在预测新样本的时候又会变得很糟糕,因为 ...

  5. Andrew Ng机器学习课程笔记--week3(逻辑回归&正则化参数)

    Logistic Regression 一.内容概要 Classification and Representation Classification Hypothesis Representatio ...

  6. 吴恩达机器学习笔记22-正则化逻辑回归模型(Regularized Logistic Regression)

    针对逻辑回归问题,我们在之前的课程已经学习过两种优化算法:我们首先学习了使用梯度下降法来优化代价函数

  7. 机器学习---朴素贝叶斯与逻辑回归的区别(Machine Learning Naive Bayes Logistic Regression Difference)

    朴素贝叶斯与逻辑回归的区别: 朴素贝叶斯 逻辑回归 生成模型(Generative model) 判别模型(Discriminative model) 对特征x和目标y的联合分布P(x,y)建模,使用 ...

  8. 机器学习入门-概率阈值的逻辑回归对准确度和召回率的影响 lr.predict_proba(获得预测样本的概率值)

    1.lr.predict_proba(under_text_x)  获得的是正负的概率值 在sklearn逻辑回归的计算过程中,使用的是大于0.5的是正值,小于0.5的是负值,我们使用使用不同的概率结 ...

  9. 机器学习之使用Python完成逻辑回归

    一.任务基础 我们将建立一个逻辑回归模型来预测一个学生是否被大学录取.假设你是一个大学系的管理员,你想根据两次考试的结果来决定每个申请人的录取机会.你有以前的申请人的历史数据,你可以用它作为逻辑回归的 ...

随机推荐

  1. Swift异常处理:throw和rethrow

    Swift异常处理体现了函数式语言的特性.因此我们能够传一个会抛出异常的函数闭包(高阶函数)作为參数传到还有一个函数中(父函数),父函数能够在子函数抛出异常时直接向上抛出异常,这时用rethrowke ...

  2. 【17.69%】【codeforces 659F】Polycarp and Hay

    time limit per test4 seconds memory limit per test512 megabytes inputstandard input outputstandard o ...

  3. 超级简单的9patch

    转载请声明出处:http://blog.csdn.net/dawanganban 我们在有些应用中会用到将图片内部指定区域撑大的效果,如微信中的消息内容背景,这时候就要用到9patch图片,效果如下: ...

  4. 关于CORS跨域更细节的思考

    权威的资料看MDN,也可以看阮一峰的文章.不过感觉阮一峰对于CORS的描述有问题,简单请求被阮一峰描述为2次浏览器请求了.这个要自己搭个服务器试一下.跨域基本都是根据域名判断的,自己是否要再买个域名呢 ...

  5. 解决mysql连接异常—-com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception

    DBCP连接池连接MySql数据库时,一奇葩数据库设置为30秒内无请求自动断开.超时后链接无法关闭,活动链接数飞奔,最后挂掉. 网上找了一圈,一般是这三种,方法一pass,方法二测试无效可能设置错了吧 ...

  6. jQuery整体架构

    (function(global, factory) { factory(global); }(typeof window !== "undefined" ? window : t ...

  7. c语言学习笔记(3)——输入输出

    一.基本的输入和输出函数的用法 printf()  //屏幕输出 用法: (1)printf("字符串\n"); (2)printf("输出控制符", 输出参数 ...

  8. silverlight,WPF动画终极攻略之番外 3D切换导航篇(Blend 4开发)

    原文:silverlight,WPF动画终极攻略之番外 3D切换导航篇(Blend 4开发) 这篇介绍的是3D导航,点击图标,页面360°翻转的效果!有什么不足的欢迎大家指出来. 1.新建一个user ...

  9. Cocos2d-x 3.1 一步一步地做改编

    本文并不想谈论的屏幕改编或真理的概念.假设不知道cocos2d-x的,请先看这篇文章:http://www.cocoachina.com/gamedev/cocos/2014/0516/8451.ht ...

  10. 初次使用glog

    一.安装配置 1.简单介绍 google 出的一个C++轻量级日志库,支持下面功能: ◆ 參数设置,以命令行參数的方式设置标志參数来控制日志记录行为: ◆ 严重性分级,依据日志严重性分级记录日志: ◆ ...