看《机器学习实战》这本书的 SVM 部分,感觉始终无法理解,因为书里把数学公式的推导直接省略了。所以在b站找了视频学习 SVM。 本文参考文章 本文参考视频
首先分割超平面(separating hyperplane)的函数表达式是\(w^T * x + b = 0\),而它上下两条间隔最远的超平面的表达式分别为 \[ \begin{align} w^T * x + b = & 1 \\ w^T * x + b = & -1 \\ \end{align} \] 至于为什么正好等于 1 和 -1,其实是为了方便计算。实际上可以等于任何值。看以下推导,先让其等于连个随机的值,比如 2 和 -3: \[ \begin{align} w^T * x + b = & 2 \\ w^T * x + b = & -3 \\ \end{align} \] 解一个不等式 \[ \begin{align} 2u + v = & 1 \\ -3u + v = & -1 \\ \end{align} \] 解得 u = \(\frac{2}{5}\), v = \(\frac{1}{5}\) 于是使 \[ \begin{align} w^T * x + b = & 2 \\ w^T * x + b = & -3 \\ \end{align} \] 左右分别乘上\(\frac{2}{5}\)再加上\(\frac{1}{5}\),即可得到 \[ \begin{align} w^T * x + b = & 1 \\ w^T * x + b = & -1 \\ \end{align} \] 而 W 和 b 只不过是一个表示的符号而已,虽然经过运算,两个 W 和两个 b 已经不是同一个了,但是这么表示没太大问题。 将连个表达式更进一步表示为 \[ \begin{align} w^T * x_1 + b = & 1 \\ w^T * x_2 + b = & -1 \\ \end{align} \] 两者相减得 \[ \begin{align} w^T * (x_1 - x_2) = 2 \\ \end{align} \] 也即 \[ \begin{align} ||w^T|| * ||(x_1 - x_2)|| cos\theta = 2 \\ \end{align} \] 两条竖线代表,向量的模长,\(\theta\)代表 \(W^T\)和\(x_1 - x_2\)之间的夹角。 由于初中知识,我们知道:\(cos\alpha\)=邻边比斜边,即邻边=斜边*\(cos\alpha\)。所以 \[ \begin{align} ||w^T|| * d = & 2 \\ d = \frac{2}{||w^T||} \end{align} \]