ML:基礎技法學習
Package:scikit-learn
課程:機器學習技法
簡介:第三講 Kernel SVM (support vector machine)
如何簡化 \(\mathbf{z}_n^T\mathbf{z}_m=\Phi (\mathbf{x}_n)^T\Phi (\mathbf{x}_m)\) ?將 \(\Phi (\mathbf{x}_n)^T\Phi (\mathbf{x}_m)\) 簡化為 \(K(\mathbf{x}_n,\mathbf{x}_m)\)
事實上調整 kernel 就等同在調整 margin definition
因 kernel 隱含映射的函數,不同的映射函數,即使對應到同樣的 \(\mathbb{R}^2\),\(\mathbf{x}_n \Rightarrow \mathbf{z}_n\) 的位置也都不一樣
如下圖,SV 的點完全不同
因有最大化 margin 的限制,故即使是十次方,表示仍可接受,甚至 margin 為 0.1
Linear Kernel 就是最原本的線性轉換,\(K_1(\mathbf{x},\mathbf{{x}'})=(0 +1\cdot \mathbf{x}^T\mathbf{{x}'})^1\)
記住,若 Linear Kernel 已足夠好,那就無需往下做,越簡單越準確
因為此特性也叫做 Radial Basis Function (RBF) kernel
能做無限多維,又有 maximum margin 限制,是否就很美好呢?不
當 \(\gamma\) 選太大時,仍會有 overfit 的風險
甚至無限大時就等同於 \( K_{\gamma \to \infty }(\mathbf{x}, \mathbf{{x}'}) = (\mathbf{x}==\mathbf{{x}'})\),完全跟訓練點一樣才會為 1
sklearn.svm.SVC
Package:scikit-learn
課程:機器學習技法
簡介:第三講 Kernel SVM (support vector machine)
dual SVM model
$$
\begin{align*}
\underset{\boldsymbol\alpha }{min}\ \ \ &\frac{1}{2}\boldsymbol\alpha ^T\mathbf{Q_D}\boldsymbol\alpha -(\mathbf{1}_{N \times 1})^T\boldsymbol\alpha \\
subject\ to\ \ \ &\mathbf{y}^T\boldsymbol\alpha =0\\
&\alpha _n \geq0,for\ n=1,2,\cdots ,N
\end{align*}
$$
\(q_{n,m}=y_ny_m\mathbf{z}_n^T\mathbf{z}_m\) inner product in \(\mathbb{R}^{\tilde{d}}\)
\(\mathbf{z}_n^T\mathbf{z}_m=\Phi (\mathbf{x}_n)^T\Phi (\mathbf{x}_m)\)
\(\mathbf{z}_n^T\mathbf{z}_m=\Phi (\mathbf{x}_n)^T\Phi (\mathbf{x}_m)\)
如何簡化 \(\mathbf{z}_n^T\mathbf{z}_m=\Phi (\mathbf{x}_n)^T\Phi (\mathbf{x}_m)\) ?將 \(\Phi (\mathbf{x}_n)^T\Phi (\mathbf{x}_m)\) 簡化為 \(K(\mathbf{x}_n,\mathbf{x}_m)\)
Kernel Hard-Margin SVM Algorithm
General Polynomial Kernel
$$
K_Q(\mathbf{x},\mathbf{{x}'})=(\zeta +\gamma \mathbf{x}^T\mathbf{{x}'})^Q\ \ \ with\ \gamma>0,\zeta\geq 0
$$
因使用 Polynomial Kernel,故稱作 Polynomial SVM事實上調整 kernel 就等同在調整 margin definition
因 kernel 隱含映射的函數,不同的映射函數,即使對應到同樣的 \(\mathbb{R}^2\),\(\mathbf{x}_n \Rightarrow \mathbf{z}_n\) 的位置也都不一樣
如下圖,SV 的點完全不同
因有最大化 margin 的限制,故即使是十次方,表示仍可接受,甚至 margin 為 0.1
Linear Kernel 就是最原本的線性轉換,\(K_1(\mathbf{x},\mathbf{{x}'})=(0 +1\cdot \mathbf{x}^T\mathbf{{x}'})^1\)
記住,若 Linear Kernel 已足夠好,那就無需往下做,越簡單越準確
Infinite Dimensional Transform (Gaussian SVM)
$$
K(\mathbf{x},{\mathbf{x}}')=e^{-\gamma \left \| \mathbf{x}-{\mathbf{x}}' \right \|^2}\ \ \ with\ \gamma >0\\
\Phi (\mathbf{x})=e^{-\gamma \mathbf{x}^T\mathbf{x}} \left (1, \sqrt{\frac{2^1\gamma}{1!}}(x_1, x_2,\cdots ,x_d),\\ \sqrt{\frac{2^2\gamma}{2!}}(x_1^2, x_1x_2,\cdots ,x_d^2),\\ \sqrt{\frac{2^3\gamma}{3!}}(x_1^3, x_1^2x_2,\cdots ,x_d^3),\\ \sqrt{\frac{2^i\gamma}{i!}}(x_1^i, x_1^{i-1}x_2,\cdots ,x_d^i),\cdots \right )
$$
$$
\begin{align*}
g_{SVM}(\mathbf{x})&=sign\left ( \sum_{SV}\alpha _ny_nK(\mathbf{x}_n,\mathbf{x})+b \right )\\
&=sign\left ( \sum_{SV}\alpha _ny_ne^{-\gamma \left \| \mathbf{x}-\mathbf{x}_n \right \|^2}+b \right )\\
\end{align*}
$$
如上,解其實就是在 SV 上的高斯函數的線性組合因為此特性也叫做 Radial Basis Function (RBF) kernel
能做無限多維,又有 maximum margin 限制,是否就很美好呢?不
當 \(\gamma\) 選太大時,仍會有 overfit 的風險
甚至無限大時就等同於 \( K_{\gamma \to \infty }(\mathbf{x}, \mathbf{{x}'}) = (\mathbf{x}==\mathbf{{x}'})\),完全跟訓練點一樣才會為 1
Kernel 比較
- Kernel 代表著兩者之間的相似性,因為是內積
- Linear Kernel
- \(K(\mathbf{x},\mathbf{{x}'})=\mathbf{x}^T\mathbf{{x}'}\)
- 優點
- 安全
- 快速,使用特別的 QP solver
- 可被解釋
- 缺點
- 若不是 線性可分 無法分類
- Polynomial Kernel
- \(K(\mathbf{x},\mathbf{{x}'})=(\zeta +\gamma \mathbf{x}^T\mathbf{{x}'})^Q\)
- Q 若很低次,有時候回到原本的 primal 解法,用特別的 solver,還比較快
- 優點
- 比 linear 限制少一點,不需要 線性可分
- 透過 Q 表示限制轉換空間的維度
- 缺點
- 數值範圍太大會影響電腦處理
\(|\zeta +\gamma \mathbf{x}^T\mathbf{{x}'}|\)
小於 1 時,Q 比較大會近乎 0
大於 1 時,Q 比較大會是很大的值 - 參數太多
- Gaussian Kernel
- \(K(\mathbf{x},\mathbf{{x}'})=e^{-\gamma \left \| \mathbf{x}-\mathbf{{x}'} \right \|^2}\)
- 優點
- 最強大
- 數值範圍比 polynomial 好
- 參數只有一個
- 缺點
- 無法解釋在做什麼
- 計算慢
- 容易 overfit
Mercer's condition
可自定 kernel,只要 Kernel Matrix 滿足條件,以下為充要條件
- symmetric
- let \(k_{ij}=K(\mathbf{x}_i,\mathbf{x}_j)\),此 Kernel Matrix 必定是半正定
\(\begin{align*}
\mathbf{K}&=\begin{bmatrix}
\Phi (\mathbf{x}_1)^T\Phi (\mathbf{x}_1) & \Phi (\mathbf{x}_1)^T\Phi (\mathbf{x}_2) & \cdots & \Phi (\mathbf{x}_1)^T\Phi (\mathbf{x}_N)\\
\Phi (\mathbf{x}_2)^T\Phi (\mathbf{x}_1) & \Phi (\mathbf{x}_2)^T\Phi (\mathbf{x}_2) & \cdots & \Phi (\mathbf{x}_1)^T\Phi (\mathbf{x}_N)\\
\vdots & \vdots & \ddots & \vdots\\
\Phi (\mathbf{x}_N)^T\Phi (\mathbf{x}_1) & \Phi (\mathbf{x}_N)^T\Phi (\mathbf{x}_2) & \cdots & \Phi (\mathbf{x}_1)^T\Phi (\mathbf{x}_N)
\end{bmatrix}\\
&= \begin{bmatrix}\mathbf{z}_1 & \mathbf{z}_2 & \cdots & \mathbf{z}_N\end{bmatrix}^T\begin{bmatrix}\mathbf{z}_1 & \mathbf{z}_2 & \cdots & \mathbf{z}_N\end{bmatrix}\\
&= \mathbf{ZZ}^T
\end{align*}\)
參考
支持向量机(三)核函数sklearn.svm.SVC
留言
張貼留言