分类器
原文作者:fuqiuai
原文地址:數據挖掘領域十大經典算法之—SVM算法(超詳細附代碼)
?
目錄
簡介
相關概念
線性分類器起源
感知器模型和邏輯回歸
支持向量機 VS 感知器和邏輯回歸
引入黑科技-核函數
簡介
SVM(Support Vector Machine)中文名為支持向量機,是常見的一種判別方法。在機器學習領域,是一個有監督的學習模型,通常用來進行模式識別、分類以及回歸分析。
相關概念
分類器:分類器就是給定一個樣本的數據,判定這個樣本屬于哪個類別的算法。例如在股票漲跌預測中,我們認為前一天的交易量和收盤價對于第二天的漲跌是有影響的,那么分類器就是通過樣本的交易量和收盤價預測第二天的漲跌情況的算法。
特征:在分類問題中,輸入到分類器中的數據叫做特征。以上面的股票漲跌預測問題為例,特征就是前一天的交易量和收盤價。
線性分類器:線性分類器是分類器中的一種,就是判定分類結果的根據是通過特征的線性組合得到的,不能通過特征的非線性運算結果作為判定根據。還以上面的股票漲跌預測問題為例,判斷的依據只能是前一天的交易量和收盤價的線性組合,不能將交易量和收盤價進行開方、平方等運算。
線性分類器起源
在實際應用中,我們往往遇到這樣的問題:給定一些數據點,它們分別屬于兩個不同的類,現在要找到一個線性分類器把這些數據分成兩類。怎么分呢?把整個空間劈成兩半唄(讓我想到了盤古)。用二維空間舉個例子,如上圖所示,我們用一條直線把空間切割開來,直線左邊的點屬于類別-1(用三角表示),直線右邊的點屬于類別1(用方塊表示)。如果用數學語言呢,就是這樣的:空間是由X1和X2組成的二維空間,直線的方程是X1+X2 = 1,用向量符號表示即為[1,1]^{T}[X1,X2]-1=0 。點x在直線左邊的意思是指,當把x放入方程左邊,計算結果小于0。同理,在右邊就是把x放入方程左邊,計算出的結果大于0。都是高中數學知識。
在二維空間中,用一條直線就把空間分割開了:?
在三維空間中呢,需要用一個平面把空間切成兩半,對應的方程是X1+X2+X3=1,也就是[1,1,1]^{T}[X1,X2,X3]-1=0 。?
?
在高維(n>3)空間呢?就需要用到n-1維的超平面將空間切割開了。那么抽象的歸納下:
如果用x表示數據點,用y表示類別(y取1或者-1,代表兩個不同的類),一個線性分類器的學習目標便是要在n維的數據空間中找到一個超平面(hyper plane),把空間切割開,這個超平面的方程可以表示為(W^{T}中的T代表轉置):?W^{T}X+b=0
感知器模型和邏輯回歸
常見的線性分類器有感知器模型和邏輯回歸。上一節舉出的例子是感知器模型,直接給你分好類。有時候,我們除了要知道分類器對于新數據的分類結果,還希望知道分類器對于這次分類的成功概率。邏輯回歸就可以做這件事情。
邏輯回歸(雖然稱作回歸,但是不是一個回歸方法,卻是一個分類算法。很蛋疼的說)將線性分類器的超平面方程計算結果通過logistic函數從正負無窮映射到0到1。這樣,映射的結果就可以認為是分類器將x判定為類別1的概率,從而指導后面的學習過程。舉個例子,看天氣預報,用感知器的天氣預報只會告訴你明天要下雨(y=1),或者明天不下雨(y=-1);而用了邏輯回歸的天氣預報就能告訴你明天有90%的概率要下雨,10%的概率不下雨。
邏輯回歸的公式是g(z)=\frac{1}{1+e^{-z}} ,圖像大概長這個樣子:?
怎么用呢?比如感知器模型中,將特征代入判別方程中,如果得到的值是-3,我們可以判定類別是-1(因為-3<0)。而邏輯回歸中呢,將-3代入g(z),我們就知道,該數據屬于類別1的概率是0.05(近似數值,謝謝),那么屬于類別-1的概率就是1 – 0.05 = 0.95。也就是用概率的觀點描述這個事情。
支持向量機 VS 感知器和邏輯回歸
根據上面的討論,我們知道了在多維空間下,用一個超平面就把數據分為了兩類。這個超平面我們叫它為分離超平面。但是這個分離超平面可以有很多個,那么用哪個呢??
上圖中,對于目前的訓練數據,綠色和黑色的直線(二維特征空間,分離超平面就是直線啦)都可以很可以很好的進行分類。但是,通過已知數據建立分離超平面的目的,是為了對于未知數據進行分類的。在下圖中,藍色的星星圖案就是新加入的真實數據。?
這時候我們就可以看出不同的分離超平面的選擇對于分類效果的影響了。有的綠線會將三個點都劃歸藍色圓圈,有的綠線會將三個點都劃歸紅色正方形。那么綠線和黑線留下誰?我們認為,已有的訓練數據中,每個元素距離分離超平面都有一個距離。在添加超平面的時候,盡可能的使最靠近分離超平面的那個元素與超平面的距離變大。這樣,加入新的數據的時候,分的準的概率會最大化。感知器模型和邏輯回歸都不能很好的完成這個工作,該我們的支持向量機(support vector machine,SVM)出場了。
首先,SVM將函數間隔(\left| W^{T}X+b \right| ,將特征值代入分離超平面的方程中,得到的絕對值)歸一化,歸一化的目的是除掉取值尺度的影響;其次,對所有元素求到超平面的距離,(這個距離是\frac{\left| W^{T}X+b \right| }{\left| W \right| } ,也就是幾何間隔)。給定一個超平面P,所有樣本距離超平面P的距離可以記為d_{ij}=\frac{\left| W^{T}X+b \right| }{\left| W \right| } ,這其中最小的距離記為D_{P},SVM的作用就是找到D_{P}最大的超平面。
可以看出,大部分數據對于分離超平面都沒有作用,能決定分離超平面的,只是已知的訓練數據中很小的一部分。這與邏輯回歸有非常大的區別。上圖中,決定黑色的這條最優分離超平面的數據只有下方的兩個紅色的數據點和上方的一個藍色的數據點。這些對于分離超平面有著非常強大影響的數據點也被稱為支持向量(看沒看到,這就是傳說中的支持向量啦,原來如此)。
引入黑科技-核函數
上面說的都是在原始特征的維度上,能直接找到一條分離超平面將數據完美的分成兩類的情況。但如果找不到呢?
比如,原始的輸入向量是一維的,0< x <1的類別是1,其他情況記做-1。這樣的情況是不可能在1維空間中找到分離超平面的(一維空間中的分離超平面是一個點,aX+b=0)。你用一個點切一下試試??
?
這就要說到SVM的黑科技—核函數技巧。核函數可以將原始特征映射到另一個高維特征空間中,解決原始空間的線性不可分問題。繼續剛才那個數軸。?
如果我們將原始的一維特征空間映射到二維特征空間X^{2}和x,那么就可以找到分離超平面X^{2}-X=0。當X^{2}-X<0的時候,就可以判別為類別1,當X^{2}-X>0 的時候,就可以判別為類別0。如下圖:?
再將X^2-X=0映射回原始的特征空間,就可以知道在0和1之間的實例類別是1,剩下空間上(小于0和大于1)的實例類別都是0啦。?
利用特征映射,就可以將低維空間中的線性不可分問題解決了。是不是很神奇,這就是特征映射的牛逼之處了。核函數除了能夠完成特征映射,而且還能把特征映射之后的內積結果直接返回,大幅度降低了簡化了工作,這就是為啥采用核函數的原因。
總結
- 上一篇: 关键字—final static con
- 下一篇: 分类算法—Performance指标