【數學】深入淺出介紹一下SVM,哦不,並沒有深入
本文將被聚寬量化課堂收錄,如有轉載,必須標明出處,侵權必究
本文屬於進階內容,深度屬於了解,即只介紹模型運作的原理,輸入輸出。
閱讀本文前需要高等代數、概率論相關知識。
這篇先掃掃盲,未來將會結合應用實例,敬請關注!
官號放出來先放一丟丟看看效果,歡迎關注官號:JoinQuant
相關概念
分類器:分類器就是給定一個樣本的數據,判定這個樣本屬於哪個類別的演算法。例如在股票漲跌預測中,我們認為前一天的交易量和收盤價對於第二天的漲跌是有影響的,那麼分類器就是通過樣本的交易量和收盤價預測第二天的漲跌情況的演算法。
特徵:在分類問題中,輸入到分類器中的數據叫做特徵。以上面的股票漲跌預測問題為例,特徵就是前一天的交易量和收盤價。
線性分類器:線性分類器是分類器中的一種,就是判定分類結果的根據是通過特徵的線性組合得到的,不能通過特徵的非線性運算結果作為判定根據。還以上面的股票漲跌預測問題為例,判斷的依據只能是前一天的交易量和收盤價的線性組合,不能將交易量和收盤價進行開方,平方等運算。
線性分類器起源
在實際應用中,我們往往遇到這樣的問題:給定一些數據點,它們分別屬於兩個不同的類,現在要找到一個線性分類器把這些數據分成兩類。
怎麼分呢?把整個空間劈成兩半唄(讓我想到了盤古)。用二維空間舉個例子,如上圖所示,我們用一條直線把空間切割開來,直線左邊的點屬於類別-1(用三角表示),直線右邊的點屬於類別1(用方塊表示)。nn如果用數學語言呢,就是這樣的:空間是由X1和X2組成的二維空間,直線的方程是X1+X2n= 1,用向量符號表示即為 。點x在直線左邊的意思是指,當把x放入方程左邊,計算結果小於0。同理,在右邊就是把x放入方程左邊,計算出的結果大於0。都是高中數學知識。
在二維空間中,用一條直線就把空間分割開了:
在三維空間中呢,需要用一個平面把空間切成兩半,對應的方程是X1+X2+X3=1,也就是 。在高維(n>3)空間呢?就需要用到n-1維的超平面將空間切割開了。那麼抽象的歸納下:
如果用x表示數據點,用y表示類別(y取1或者-1,代表兩個不同的類),一個線性分類器的學習目標便是要在n維的數據空間中找到一個超平面(hyper plane),把空間切割開,這個超平面的方程可以表示為(中的T代表轉置):
感知器模型和邏輯回歸:
常見的線性分類器有感知器模型和邏輯回歸。上一節舉出的例子是感知器模型,直接給你分好類。有時候,我們除了要知道分類器對於新數據的分類結果,還希望知道分類器對於這次分類的成功概率。邏輯回歸就可以做這件事情。
邏輯回歸(雖然稱作回歸,但是不是一個回歸方法,卻是一個分類演算法。很蛋疼的說)將線性分類器的超平面方程計算結果通過logistic函數從正負無窮映射到0到1。這樣,映射的結果就可以認為是分類器將x判定為類別1的概率,從而指導後面的學習過程。
舉個例子,看天氣預報,用感知器的天氣預報只會告訴你明天要下雨(y=1),或者明天不下雨(y=-1);而用了邏輯回歸的天氣預報就能告訴你明天有90%的概率要下雨,10%的概率不下雨。
邏輯回歸的公式是,圖像大概長這個樣子:
怎麼用呢?比如感知器模型中,將特徵代入判別方程中,如果得到的值是-3,我們可以判定類別是-1(因為-3<0)。而邏輯回歸中呢,將-3代入g(z),我們就知道,該數據屬於類別1的概率是0.05(近似數值,謝謝),那麼屬於類別-1的概率就是1 –n0.05 = 0.95。也就是用概率的觀點描述這個事情。
本文深度為「了解」,如果想知道更多的感知器模型和邏輯回歸細節,可以參照《統計學習方法》等機器學習的相關書籍。或者持續關注我們的量化課堂,未來會深度探討。
支持向量機 VS 感知器和邏輯回歸
nn根據上面的討論,我們知道了在多維空間下,用一個超平面就把數據分為了兩類。這個超平面我們叫它為分離超平面。但是這個分離超平面可以有很多個,那麼用哪個呢?
上圖中,對於目前的訓練數據,綠色和黑色的直線(二維特徵空間,分離超平面就是直線啦)都可以很可以很好的進行分類。但是,通過已知數據建立分離超平面的目的,是為了對於未知數據進行分類的。在下圖中,藍色的星星圖案就是新加入的真實數據。
這時候我們就可以看出不同的分離超平面的選擇對於分類效果的影響了。有的綠線會將三個點都劃歸藍色圓圈,有的綠線會將三個點都劃歸紅色正方形。
那麼綠線和黑線留下誰?我們認為,已有的訓練數據中,每個元素距離分離超平面都有一個距離。在添加超平面的時候,儘可能的使最靠近分離超平面的那個元素與超平面的距離變大。這樣,加入新的數據的時候,分的準的概率會最大化。感知器模型和邏輯回歸都不能很好的完成這個工作,該我們的支持向量機(supportnvector machine,SVM)出場了。
首先,SVM將函數間隔(,將特徵值代入分離超平面的方程中,得到的絕對值)歸一化,歸一化的目的是除掉取值尺度的影響;其次,對所有元素求到超平面的距離,(這個距離是,也就是幾何間隔)。給定一個超平面P,所有樣本距離超平面P的距離可以記為,這其中最小的距離記為,SVM的作用就是找到最大的超平面。
nn可以看出,大部分數據對於分離超平面都沒有作用,能決定分離超平面的,只是已知的訓練數據中很小的一部分。這與邏輯回歸有非常大的區別。上圖中,決定黑色的這條最優分離超平面的數據只有下方的兩個紅色的數據點和上方的一個藍色的數據點。這些對於分離超平面有著非常強大影響的數據點也被稱為支持向量(看沒看到,這就是傳說中的支持向量啦,原來如此)。
引入黑科技-核函數
上面說的都是在原始特徵的維度上,能直接找到一條分離超平面將數據完美的分成兩類的情況。但如果找不到呢?
nn比如,原始的輸入向量是一維的,0<x<1的類別是1,其他情況記做-1。這樣的情況是不可能在1維空間中找到分離超平面的(一維空間中的分離超平面是一個點,aX+b=0)。你用一個點切一下試試?
這就要說到SVM的黑科技—核函數技巧。核函數可以將原始特徵映射到另一個高維特徵空間中,解決原始空間的線性不可分問題。
繼續剛才那個數軸。
如果我們將原始的一維特徵空間映射到二維特徵空間和x,那麼就可以找到分離超平面。當的時候,就可以判別為類別1,當的時候,就可以判別為類別0。如下圖:
再將映射回原始的特徵空間,就可以知道在0和1之間的實例類別是1,剩下空間上(小於0和大於1)的實例類別都是0啦。
利用特徵映射,就可以將低維空間中的線性不可分問題解決了。是不是很神奇,這就是特徵映射的牛逼之處了。核函數除了能夠完成特徵映射,而且還能把特徵映射之後的內積結果直接返回,大幅度降低了簡化了工作,這就是為啥採用核函數的原因。
nn(為啥要返回數據間的內積涉及到比較高深的內容,在此先略過,可以在《統計學習方法》等更加專業的資料中自行閱讀,未來量化課堂會產生這部分的內容。)
異常值的處理-鬆弛變數的引入
你以為就結束了嗎?並沒有。
在原始空間線性不可分時,可以映射到高維空間之後,轉換為線性可分的問題。但是萬一映射之後還是不能線性可分,該如何處理呢?
nn再比如正常的數據中混入了異常數據,很有可能會使應該的最佳分離超平面移位,或者直接使數據變得線性不可分。又怎麼辦捏?
上圖中用黑色的圓圈圈起來的就是一個異常值,這個異常值的存在,使得分離超平面發生了移位。這時候就該引入鬆弛變數了。鬆弛變數可以允許某些數據點在不滿足分離超平面兩邊的類別要求,從而使得某些嚴格線性不可分的數據集也可以使用SVM進行分類了。
nn由於篇幅有限,這部分內容只是為了完整性,不做深入討論。
SVM的具體使用-sklearn
SVM的基本原理基本上已經說的差不多了,下面咱們就來看看SVM在實際應用該如何使用了。幸運的是,在python下面,sklearn提供了一個非常好用的機器學習演算法,我們調用相關的包就好啦。
在下面的這個例子中,特徵是通過收盤價數據計算的SMA,WMA,MOM指標,訓練樣本的特徵是從2007-1-4日到2016-6-2中每一天的之前的交易日的收盤價計算的SMA,WMA,MOM指標,訓練樣本的標籤就是2007-1-4日到2016-6-2中每一天的漲跌情況,漲了就是True,跌了就是False,測試樣本是2016-6-3日的三個指標以及漲跌情況。我們可以判定之後判斷結果是正確還是錯誤,如果通過SVM判斷的結果和當天的漲跌情況相符,則輸出True,如果判斷結果和當天的漲跌情況不符,則輸出False。
我這次的預測結果是輸出了True哦。(文中舉的例子是為了理解SVM,所以很簡單,準確性不保證!要想應用到實戰中,還需要做更多的工作)
nn代碼請參見:【乾貨】用通俗易懂的大白話介紹SVM原理推薦閱讀:
※Datalab來了:Google Cloud NEXT 17
※理解強化學習知識之基礎知識及MDP
※BAT面試題精選 | 一個完整機器學習項目的流程(視頻)
※神經網路NN演算法(應用篇)
※(一)深度學習基礎(基本概念、優化演算法、初始化、正則化等)