一小部分機器學習算法小結: 優化算法、邏輯回歸、支持向量機、決策樹、集成算法、Word2Vec等


優化算法

先導知識:泰勒公式

\[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

后記

這本是開學初整理的一份筆記,是當時感興趣的點寫寫記記而成。本文只是介紹了機器學習領域非常小的一部分,權當管中窺豹。實際上這篇又是拾人牙慧,我盡可能在記得的地方加以引用,但難免疏漏,還請告知以補上引用。以及這里面肯定夾帶了我的私貨,如有錯誤,還請斧正。

周志華-《機器學習》

李航-《統計學習方法》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM