凡事架不住亲自跑一把—— Support Vector Mach

2017-06-22  本文已影响403人  Pope怯懦懦地

Support Vector Machine 这个名字挺唬人的,其实思想很朴实:我们有两堆数据(分别标记为「+1类」和「-1类」),想在它们之间找一个分界面,使得两边的点距离这个分界面都够远。这就相当于在两组点中间划出一块深沟,所谓的 support vector(支撑向量)就是卡住边线的那些点(数学家喜欢把「点」叫做「向量」)。

分界面

我们令f(x) = w x + b,假设分界面为w x + b = 0,即f(x) = 0,且满足:标记为+1的点f(x) > 0,标记为-1的点f(x) < 0。那么可以算出某个数据点距离分界面的距离γ为:

但这个γ是带正负号的,为了保证γ永远为正,我们给它乘以sign( f(x) )(也就是标记的y值):

我们的目标是,让找到的那个分界面的γ值最大:

γ其实是一个以 w 和 b 为参数的函数。我们调整不同的 w 和
b 得到不同的划分方式。

w = (0.7, -1), b = 1, γ = 1.67011 w = (0.2, -1), b = 1, γ = 0.159801

我们把它画出来看看:

L(w, b)

最大值点在(0.78801, 1.22344),其值为2.18479

换个角度

至于具体怎么找到最大值点的就不写了,大概是用核方法[1]把数据映射到高维空间,再用 Lagarange 乘数法的进阶版本找到极值点。

太多技术细节了,心累☹️

P.S. 据说 SVM 做手写数字识别的精度可以媲美深度学习😱 但我还是不喜欢它,因为它直接一步跳到了结果,中间没有任何人类可以嫁接的知识树(表征)。


参考资料:


  1. 核方法的好处是:既能享受到数据在高维展开以使其线性可分的好处,又能避免高维空间的运算量爆炸。

上一篇 下一篇

猜你喜欢

热点阅读