支持向量數據描述(Support Vector Data Description,SVDD)是一種單分類算法,該算法不是爲了將不一樣的類別的數據區分開來,而是對某一個類別生成一個描述description。能夠理解爲,在特徵空間中爲某一個類別劃分一個區域,在區域內的樣本屬於該類別,在區域外的數據不屬於該類別。SVDD經常使用於異常檢測任務或者是類別極度不平衡的分類任務。算法
以異常檢測任務爲例,假設有一組正常的樣本數據集$T=\{x^{(i)},x^{(2)},\cdots,x^{(N)}\}$,其中N爲樣本個數,$x^{(i)}\in \mathcal{x}=\mathbb{R}^d$,d爲維度。首先經過一個非線性變換將輸入空間(歐式空間$\mathbb{R}^d$的子集)$\mathcal{X}$對應到一個特徵空間(希爾伯特空間)$\mathcal{H}$,即存在一個從$\mathcal{X}$到$\mathcal{H}$的映射$\phi(x):\mathcal{X} \rightarrow \mathcal{H}$,而後在特徵空間找到一個體積最小的超球體,爲映射到特徵空間中的樣本劃定一個區域。$\phi(x)$能夠理解爲SVM中的核函數,使用核函數一是由於輸入空間中的數據並不會呈現球狀分佈,二是能夠提升模型的表達能力。
寫爲以下帶約束的最優化問題(相似於使用核函數的軟間隔支持向量機),
$$\begin{equation}\begin{aligned}&\min_{a,R,\xi}R^2+C\sum_{i=1}^{N}\xi_i\\ & \begin{aligned}s.t.\quad &||\phi(x^{(i)})-a||^2\leq R^2+\xi_i,i=1,\cdots,N \\& \xi_i\geq 0,i=1,\cdots,N\end{aligned}\end{aligned}\tag{1}\end{equation}$$
其中,a爲超球體的球心,R爲超球體的半徑,$\xi$爲鬆弛因子,$C\geq 0$爲懲罰參數,式(1)但願超球體體積小的同時,誤分類的樣本個數也儘可能少。
式(1)是帶約束的最優化問題,引入拉格朗日函數,
$$\begin{equation}L(a,R,\xi,\alpha,\mu)=R^2+C\sum_{i=1}^N\xi_i+\sum_{i=1}^N\alpha_i (||\phi(x^{(i)})-a||^2- R^2-\xi_i)-\sum_{i=1}^{N}\mu_i\xi_i\tag{2}\end{equation}$$
其中,$\alpha\geq 0,\mu$爲拉格朗日乘子。考慮$R,a,\xi$的函數,$\theta_p(a,R,\xi)=\max_{\alpha,\mu}L(a,R,\xi,\alpha,\mu)$,原問題式(1)能夠寫爲廣義拉格朗日的極小極大問題的形式,
$$\begin{equation}\min_{a,R,\xi}\theta_P(a,R,\xi)=\min_{a,R,\xi}\max_{\alpha,\mu}L(a,R,\xi,\alpha,\mu)\tag{3}\end{equation}$$函數
定義$\theta_D(\alpha,\mu)=\min\limits_{a,R,\xi}L(a,R,\xi,\alpha,\mu)$,考慮廣義拉格朗日的極大較小問題,
$$\begin{equation}\max_{\alpha,\mu}\min_{a,R,\xi}L(a,R,\xi,\alpha,\mu)\tag{4}\end{equation}$$
式(4)爲原始問題(式(1))的對偶問題。
由於$||\phi(x_i)-a||^2\leq R+\xi_i$嚴格可行(李航《統計學習方法》附錄C定理C.2),存在$a^*,R^*,\xi^*,\alpha^*,\mu^*$,使$a^*,R^*,\xi^*$使原始問題的解,$\alpha^*,\mu^*$使對偶問題的解,所以能夠求解對偶問題來求解原始問題。
由KKT條件得,
$$\begin{equation}\nabla_{a}L(a^*,R^*,\xi^*,\alpha^*,\mu^*)=\sum_{i=1}^{N}\alpha_i(a^*-\phi(x^{(i)}))=0\tag{5}\end{equation}$$
$$\begin{equation}\nabla_R L=2R(1-\sum_{i=1}^{N}\alpha_i)=0\tag{6}\end{equation}$$
$$\begin{equation}\nabla_{\xi}L=C-\alpha-\mu=0\tag{7}\end{equation}$$
$$\begin{equation}\alpha_i^* (||\phi(x^{(i)})-a^*||^2- R^2-\xi_i^*)=0\tag{8}\end{equation}$$
$$\begin{equation}||\phi(x^{(i)})-a^*||^2- R^2-\xi_i^*\leq0\tag{9}\end{equation}$$
$$\begin{equation}\alpha_i^* \geq0\tag{10}\end{equation}$$
$$\begin{equation}\mu_i^*\xi_i^*=0\tag{11}\end{equation}$$
$$\begin{equation}\mu_i^*\geq0\tag{12}\end{equation}$$
$$\begin{equation}\xi_i^*\geq0\tag{13}\end{equation}$$
代入式(4),
$$\begin{equation}\begin{aligned}&\min_{\alpha}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jK(x^{(i)},x^{(j)})-\sum_{i=1}^N\alpha_iK(x^{(i)},x^{(i)})\\&s.t.\quad 0\leq\alpha_i\leq C,\sum_{i=1}^{N}\alpha_i=1\end{aligned}\tag{14}\end{equation}$$
其中K爲核函數,$K(x^{(i)},x^{(j)})=\phi(x^{(i)})\cdot\phi(x^{(j)})$。使用SMO算法或者梯度降低,獲得$\alpha^*$,則由式(5)獲得超球體的球心$a^*$爲,
$$\begin{equation}a^*=\sum_{i=1}^N\alpha_i\phi(x^{(i)})\tag{15}\end{equation}$$
對於超球體的半徑$R^*$,選擇$0<\alpha_v^*<C$,由式(7)和(11)推出$\xi_v=0$,由式(8)和(9)可推出$R^*$。對應$0<\alpha_v^*<C$的樣本爲支持向量。
$$\begin{equation}\begin{aligned}R^*&=\sqrt{||\phi(x^{(v)})-a^*||^2}\\&=\sqrt{K(x^{(v)},x^{(v)})-2\sum_{i=1}^N\alpha_iK(x^{(v)},x^{(i)})+\sum_{i=1}^{N}\sum_{j=1}^N\alpha_i\alpha_jK(x^{(i)},x^{(j)})}\end{aligned}\tag{16}\end{equation}$$
對於測試樣本$x^{(test}$,衡量其在特徵空間中到超球體球心的距離$d=\sqrt{||\phi(x^{(test)})-a*||^2}$,若$d\leq R^*$,則屬於正常樣本,不然屬於異常樣本。學習
SVDD還能夠用於類別不平衡的分類任務,假設有數據集$T=\{(x^{(1)},y^{(1)}),\cdots,(x^{(N)},y^{(N)})\}$,其中$x^{(i)}\in\mathcal{X}=\mathbb{R}^n,y^{(i)}\in\mathcal{Y}=\{-1,1\}$,-1表示樣本屬於異常類別,1表示樣本屬於正常類別,且正常類別的樣本數遠大於異常類別的樣本數。對於正常樣本$x^{(i)}$,但願$||\phi(x^{(i)})-a||^2\leq R^2+\xi_i$,對於異常類別的樣本$x^{(j)}$,但願$||\phi(x^{(j)})-a||^2\geq R^2-\xi_j$,則式(1)的原始問題改寫爲,
$$\begin{equation}\begin{aligned}&\min_{a,R,\xi}R^2+C_1\sum_{i\in\{i|y^{(i)}=1\}}\xi_i+C_2\sum_{j\in\{j|y^{(j)}=-1\}}\xi_j\\ & \begin{aligned}s.t.\quad &||\phi(x^{(i)})-a||^2\leq R^2+\xi_i,i\in\{i|y^{(i)}=1\}\\& ||\phi(x^{(j)})-a||^2\leq R^2+\xi_j,j\in\{j|y^{(j)}=1\}\\& \xi_i\geq 0,i\in\{i|y^{(i)}=1\}\\&\xi_j\geq 0,j\in\{j|y^{(j)}=1\}\end{aligned}\end{aligned}\tag{17}\end{equation}$$
寫爲拉格朗日極小極大問題,
$$\begin{equation}\begin{aligned}L(a,R,\xi,\alpha,\mu)=&R^2+C_1\sum_{i=1}^NI(y^{(i)}=1)\xi_i+C_2\sum_{i=1}^NI(y^{(i)}=-1)\xi_i\\&+\sum_{i=1}^N\alpha_iy^{(i)} (||\phi(x^{(i)})-a||^2- R^2-y^{(i)}\xi_i)-\sum_{i=1}^{N}\mu_i\xi_i\end{aligned}\tag{18}\end{equation}$$
轉換爲對偶問題爲,
$$\begin{equation}\begin{aligned}&\min_{\alpha}\sum_{i=1}^{N}\sum_{j=1}^{N}y^{(i)}y^{(j)}\alpha_i\alpha_jK(x^{(x)},x^{(j)})-\sum_{i=1}^Ny^{(i)}\alpha_iK(x^{(i)},x^{(i)})\\&\begin{aligned}s.t.\quad &0\leq\alpha_i\leq C_1,if\quad y^{(i)}=1\\&0\leq\alpha_i\leq C_2,if\quad y^{(i)}=-1\\&\sum_{i=1}^{N}y^{(i)}\alpha_i=1\end{aligned}\end{aligned}\tag{19}\end{equation}$$
使用SMO算法或者梯度降低,獲得$\alpha^*$
$$\begin{equation}a^*=\sum_{i=1}^Ny^{(i)}\alpha_i\phi(x^{(i)})\tag{20}\end{equation}$$
選擇$0<\alpha_v^*<C_1$或者$0<\alpha_v^*<C_2$(能夠令$C_1=C_2=C$),獲得$R^*$
$$\begin{equation}\begin{aligned}R^*&=\sqrt{||\phi(x^{(v)})-a^*||^2}\\&=\sqrt{K(x^{(v)},x^{(v)})-2\sum_{i=1}^Ny^{(i)}\alpha_iK(x^{(v)},x^{(i)})+\sum_{i=1}^{N}\sum_{j=1}^Ny^{(i)}y^{(j)}\alpha_i\alpha_jK(x^{(i)},x^{(j)})}\end{aligned}\tag{21}\end{equation}$$測試
scikit-learn中sklearn.svm.OneClassSVM
不是SVDD。優化