6 G1 D0 R2 N9 C+ C9 D+ f' x& ?1 s+ c$ |/ L7 D2 j4 L9 s, y6 @
传统的SVM做的事情其实就是找到一个超平面,实现二分类,一类+1,一类-1。如上所示。它的目的就是使得两类的间隔最大。黑色的块表示距离分割面最近的样本向量,称为支持向量。2 E" @; m9 `9 v l
3 V. {( h @% a7 F5 M如果我们在低维空间里找不到一个线性分类面把样本分开,SVM就为我们提供了一个思路:将数据从低维空间映射到高维空间后,就很可能使得这堆数据线性可分。比如说,我们要在猫科动物这个特征很局限的“低维空间”里去分猫和老虎,是比较困难的,因为他们很多特征比较相近。但是,如果我们有了更多的参考依据,从生物界的视角,即一个“高维空间”再去区分猫和老虎,我们就有了更多的理由来做出科学的辨别。至于如何低维映射到高维,就是一门数学上的学问了。7 K' |: [3 o' J. C4 M, C; p$ y
\6 G* f! Y9 n0 V2 L, q当我们要分多类,而不是简单的二分类(+1,-1)时,怎么破? # O2 D% w ~6 U9 Q. V/ L & W/ F) P. M, f; S. ^ {2 C解决思路:把多分类转化为二分类问题。具体来看有两个办法: 7 S1 A) h" r1 k" s2 [3 R. O2 P4 l$ p! H; g
1. one-against-all3 ^: ^8 ]2 a/ L; D( Q
+ a& e6 Y0 X. N; r }
Classification of new instances for one-against-all case is done by a winner-takes-all strategy, in which the classifier + ]4 ]' D7 _5 ~. @+ o* r2 ^; _6 I/ |
with the highest output function assigns the class. . A n+ J- I& m" [1 h) c , W6 Y. l5 S1 \/ ~% |* P比如有一堆样本,打算分成10类。那么我们先取第1类训练标记为【1】。其他9类都是【-1】。这样经过一次SVM就可以得到第1类。 1 y1 @3 K2 \: J, L6 K: x : ]' j5 q" I- r9 y9 e/ E% w然后我们对【-1】中的9类继续做上述操作,分出第2类。 - Q9 ?9 r6 F2 p. w U& |1 e! b. ?2 ^- u' D& E6 \& s- ^
再以此类对,逐渐把第3、第4类分出来……直至分完。( _( P) C" R) q4 p2 i' _! h; D
" w4 U; a* Q% D, C$ s, y
2. one-against-one & |% G2 D1 X" k) {4 J( Y7 ?* `' W% S6 m! A4 t% \
For the one-against-one approach, classification is done by a max-wins voting strategy, in which every classifier assigns the instance to one of the two classes, then the vote for the assigned class is increased by one vote, and finally the class with most votes determines the instance classification." H- J' x& ?9 f) m
. N/ u- n1 Y- W% j3 r1 D& ]1 k, i比如,一共有10种类别的一堆数据。那么我们就要训练C{2,5}=10(组合数)个SVM分类器。每个SVM分类器都可以区分出两种类别。我们把数据分别输入到这10个SVM分类器中,根据结果进行投票,依据得票数最多来确定它的类别。 $ \6 Z9 e/ A1 E- r f' a' N% ]" M, d" ^8 l' p5 U
" k, A' G6 S4 y7 D2 j0 ]QP求解 3 z& b" \- [5 X1 r ! @4 j& _; e/ j$ r% `0 }% T大致有下面4种方法: 6 c8 i X* }; k F; A; i+ Z9 G, `7 y( a* p" A* `" V7 U
分块算法(Chunking) 8 c% Z0 w( \ z" L; F/ `% @! p7 h/ g _+ j$ {' x, t5 D
Osuna算法 - a+ R# \. b9 H 3 t W5 G& C) L3 R2 G序列最小优化算法(Sequential Minimal Optimization,SMO)# b/ z1 u& U _% T0 k
! e& e1 i# A2 d3 J: l- L
增量学习算法(IncrementalLearning) 8 r0 a2 S$ U5 [' b& i) e8 x* _! k; z0 r( a* }
数学原理比较难解释清楚,大家可以看Zhang Hao的那篇文章细究。 ) s# h3 @3 k, ^& b% d5 J : ^1 q6 a0 h( c3 B0 \ 9 v+ n# D: y+ ], SSVM的MATLAB实现:Libsvm/ v2 w- R G6 x( U9 n- T' E