01 支持向量機SVM
問題1 在空間上線性可分的兩類點,分別向SVM分類的超平面上做投影,這些點在超平面上的投影仍然是線性可分的嗎?
- 不可分
問題2 是否存在一組參數使SVM訓練誤差爲0?
問題3 訓練誤差爲0的SVM分類起一定存在嗎?
問題4 加入鬆弛變量的SVM的訓練誤差可以爲0嗎?
SVM理論
- 希望的是找到一個平面作爲超平面,它恰好在兩個類中間分開,以它爲基準畫兩個與它平行的平面,讓這兩個平面分別向兩個方向平行移動,即一個向類別X聚集的方向移動,一個向非類別X聚集的方向移動。當這兩個平面同時(等距離)分別觸碰到類別X和非類別X的點時停止下來,記錄這個平面的
w
和b
,記錄此時的移動距離δ
。這樣的平面也許不止一個,但是會找到一個能讓δ
儘可能大的值,這個能產生最大δ
值方案的w
和b
所構成的g(v) = wv+b
就是要找的超平面。 - 我們平時生產生活中遇到的例子基本都是線性不可分的,SVM就是要解決這個問題。
- 可以看到,在一維空間上解決線性不可分問題是把函數映射到二維空間,使得一維空間上的分類邊界是二維空間上的分類函數在一維空間上的投影;而在二維空間上解決線性不可分問題是把函數映射到三維空間,使得二維空間上的分類邊界是三維空間上的分類函數在二維空間上的投影。 那麼所有的n維空間上的線性不可分的問題都可以考慮映射到n+1維上去構造分類函數,使得它在n維空間上的投影能夠將兩個類別分開。
- 這個構造過程SVM是有通用的方法可以解決的,就是使用核函數(Kernel) 進行構造。而且,有幾個常用的核函數是可以拿來直接使用的,如線性核函數、多項式核函數、徑向基核函數(RBF核函數)、高斯核函數等,能夠查到的核函數有二三十種之多。
- 核函數的目的很單純,即只要在當前維度空間的樣本是線性不可分的,就一律映射到更高的維度上去,在更高的維度上找到超平面,得到超平面方程。而在更高維度上的超平面方程實際並沒有增加更多的維度變量,更高的這個維度只是像在解幾何題裏使用的輔助線而已,最後得到的方程不會增加其他維度。例如,研究二維空間上的向量分類問題,那麼經過核函數映射,最後得到的超平面變成了二維空間上的曲線(但同時也是三維空間上的一次方程);研究三維空間上的向量分類問題,那麼經過核函數映射,最後得到的超平面變成了三維空間上的曲面(但同時也是四維空間上的一次方程)。函數表示只是一個變量代換關係。
from sklearn import svm
#年齡
X = [[34],[33],[32],[31],[30], [30],[25],[23],[22],[18]]
#質量
y = [1,0,1,0,1,1,0,1,0,1]
#現在把訓練數據和對應的分類放入分類器中進行訓練
#這裏使用rbf
clf = svm.SVC(kernel='rbf').fit(X,y)
#預測年齡30的人的質量
p = [[30]]
print(clf.predict(p))
#結果是[1]