仔细想了想支持向量机(Support Vector Mechine)
生活随笔
收集整理的這篇文章主要介紹了
仔细想了想支持向量机(Support Vector Mechine)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. SVM是要解決什么問題?
之前,沖上來就看SVM的應用,簡介,最優化計算方法等。從沒認真想過SVM要解決什么問題。 下面一幅是常用的圖,來解釋SVM的需求。 SVM最基本的應用是分類。 求解最優的分類面,然后用于分類。 最優分類面的定義:? 對于SVM,存在一個分類面,兩個點集到此平面的最小距離最大,兩個點集中的邊緣點到此平面的距離最大。 從直觀上來看,下圖左邊的,肯定不是最優分類面;而右邊的能讓人感覺到其距離更大,使用的支撐點更多,至少使用了三個分類面,應該是最優分類面。那么,是不是一個最優分類面需要兩個或三個以上的點才能確定呢? 這個要依據實際情況而定。 如下圖,左圖是由三個點,來確定的一個最優分類面,不同類別的兩個點確定一個中心點,而同類的兩個點可以確定方向向量。這個最優分類面,需要三個點。但對于右圖,直接獲取不同類別的兩個點的垂面,即是最優分類面。這個分類面,則需要兩個點。
以上,情況的分析,使得求解最優分類面的思路,模式比較復雜。 若采用窮舉法,至少需要以下過程: 先取不同類別的兩個點,求解中心連線的垂面。如以上右圖模式;然后判斷其他點到此垂面的距離,若有更小的距離(或負值,即分類錯誤),則選取以上左圖模式;窮舉所有點。采用最直接的方式處理,則其運算復雜度為 m*n*n, 若n > m。這個還沒有用到高維映射哪,如果再加上高維映射的處理,算法恐怕就更復雜了。所以,窮舉法是不太現實的。
2. 從直觀到數學推論
由直觀到擬合: 直觀上,存在一個最優的超平面。那么,我們就假設這個最優面的公式是: W * X + b = 0, 那么對于所有的點集x,都存在平行于最優超平面的點集的邊界面W * xi + b >= 1 或 W * xi + b <= -1, 這里 yi可以歸一化為1,-1。 最大化這兩個平行超平面的距離。即max ?2 / ||w||?或者說是 最小化w,即 min ||w|| 另外一個條件是?W * xi + b >= 1 或 W * xi + b <= -1。 這個有點超出平時用的計算方法了(如果沒學過最優化理論),因既有求極值,又有不等式存在。這個是典型的QP(quandratic programming)二次規劃問題。高數里面有有關求極值的理論,采用的是拉格朗日乘子法,但其條件是等式。 所以,需要將不等式,轉化為等式的形式。 方法就引入變量。給每個點配上一個系數α,若是邊界點,那么α就為大于0,否則就為0.則?αi * yi * (W * xi + b) = 0.從另一方面來講,αi也可以看做是拉格朗日系數,采用拉格朗日乘子法,求極值。由于αi也是未知的。所以,又需要求出αi。
即 min ( max?L?), max?L?是因為后面的超平面公式經過減號后變成了 <= 形式,其求和的最大值為0。
先對min求極值, 對w,和b進行微分。 推導出以下關系終于推出簡單點的公式了。由min 到 max也是一個對偶轉換的過程,又稱dual。求max極值,并且,只有一個等式約束條件,缺點就是未知變量也增加了。 接下來,就是用最優化的方法,求取極值了。 對未知變量,取一個初始值,然后用點集中的點,一個接一個的進行訓練。直至未知變量收斂。
3. SMO 解法
SVM 從簡單邊界分類思路,到復雜的拉格朗日求解。 其實,對于二次規劃問題,有經典的最速下降法,牛頓法等最優化求解方法。而SMO是一個SVM的優化算法,避開了經典的二次規劃問題。 消除w,轉換為?αi 的求解。這是一個更加有效的求解方法 利用KKT條件,再加上一堆的推論,終于有以下公式:4. SVM種類有哪些,適用場景及優缺點
SVM的空間復雜度: SVM 所占內存,是樣本數據量的平方。《A Tutorial on Support Vector Machines for Pattern Recognition》 ?1998 Kluwer Academic Publishers,Boston 訓練計算復雜度在O(Nsv^3+LNsv^2+d*L*Nsv)和O(d*L^2)之間,其中Nsv是支持向量的個數,L是訓練集樣本的個數,d是每個樣本的維數(原始的維數,沒有經過向高維空間映射之前的維數). 總的來講,SVM的SMO算法根據不同的應用場景,其算法復雜度為~N 到~N^2.2之間,而chunking scale的復雜度為~N^1.2 到~N^3.4之間。一般SMO比chunking算法有一階的優勢。 線性SVM比非線性SVM的smo算法要慢一些。所以,據原著論文的測試,SMO算法,在線性svm上快1000倍,在非線性上快15倍。 對于SVM的SMO算法的內存需求時線性的,這使得其能適用比較大的訓練集。 所以,如果數據量很大,SVM的訓練時間就會比較長,如垃圾郵件的分類檢測,沒有使用SVM分類器,而是使用了簡單的naive bayes分類器,或者是使用邏輯回歸模型分類。5.關于SVM不同的觀點
SVM在小樣本訓練集上能夠得到比其它算法好很多的結果。支持向量機之所以成為目前最常用,效果最好的分類器之一,在于其優秀的泛化能力,這是是因為其本身的優化目標是結構化風險最小,而不是經驗風險最小,因此,通過margin的概念,得到對數據分布的結構化描述,因此減低了對數據規模和數據分布的要求。 SVM也并不是在任何場景都比其他算法好,對于每種應用,最好嘗試多種算法,然后評估結果。如SVM在郵件分類上,還不如邏輯回歸、KNN、bayes的效果好。 SVM各個參數的含義? sigma: rbf核函數的參數,用于生成高維的特征,常用的有幾種核函數,如徑向核函數,線性核函數,這個也需要憑經驗來選擇。 C:懲罰因子。在最優化函數中,對離群點的懲罰因子,也是對離群點的重視程度體現。這個也是憑經驗和實驗來選擇。 SVM種類: C-SVM:分類型SVM,需要調優的參數有懲罰因子C,核函數參數。 C的取值?10^-4, 10^-3, 10^-2,... 到 1, 5... 依次變大 nu-SVM:分類型SVM, 在一定程度上與C-SVM相同,將懲罰因子C換成了因子nu。其最優化的函數略有不同。nu的取值是0-1,一般取值從0.1到0.8. 0代表樣本落入間隔內的數目最小的情況,1代表樣本可以落入間隔可以很多的情況。 wiki上的原話: The main motivation for the nu versions of SVM is that it has a has a more meaningful interpretation. This is because nu represents an upper bound on the fraction of training samples which are errors (badly predicted) and a lower bound on the fraction of samples which are support vectors. Some users feel nu is more intuitive to use than C or epsilon.?6 相關概念:
VC維:將N個點進行分類,如分成兩類,那么可以有2^N種分法,即可以理解成有2^N個學習問題。若存在一個假設H,能準確無誤地將2^N種問題進行分類。那么這些點的數量N,就是H的VC維。 這個定義真生硬,只能先記住。一個實例就平面上3個點的線性劃分的VC維是3. 而平面上 VC維不是4,是因為不存在4個樣本點,能被劃分成2^4 = 16種劃分法,因為對角的兩對點不能被線性劃分為兩類。更一般地,在r 維空間中,線性決策面的VC維為r+1。 置信風險: 分類器對 未知樣本進行分類,得到的誤差。也叫期望風險。 經驗風險: 訓練好的分類器,對訓練樣本重新分類得到的誤差。即樣本誤差 結構風險:[置信風險, 經驗風險], 如(置信風險 + 經驗風險) / 2 置信風險的影響因素有: 訓練樣本數目和分類函數的VC維。訓練樣本數目,即樣本越多,置信風險就可以比較小;VC維越大,問題的解的種類就越多,推廣能力就越差,置信風險也就越大。因此,提高樣本數,降低VC維,才能降低置信風險。 而一般的分類函數,需要提高VC維,即樣本的特征數據量,來降低經驗風險,如多項式分類函數。如此就會導致置信風險變高,結構風險也相應變高。過學習overfit,就是置信風險變高的緣故。 結構風險最小化SRM(structured risk minimize)就是同時考慮經驗風險與結構風險。在小樣本情況下,取得比較好的分類效果。保證分類精度(經驗風險)的同時,降低學習機器的 VC 維,可以使學習機器在整個樣本集上的期望風險得到控制,這應該就是SRM的原則。 當訓練樣本給定時,分類間隔越大,則對應的分類超平面集合的 VC 維就越小。(分類間隔的要求,對VC維的影響) 根據結構風險最小化原則,前者是保證經驗風險(經驗風險和期望風險依賴于學習機器函數族的選擇)最小,而后者使分類間隔最大,導致 VC 維最小,實際上就是使推廣性的界中的置信范圍最小,從而達到使真實風險最小。 訓練樣本在線性可分的情況下,全部樣本能被正確地分類(咦這個不就是傳說中的yi*(w*xi+b))>=1的條件嗎),即經驗風險Remp 為 0 的前提下,通過對分類間隔最大化(咦,這個就是Φ(w)=(1/2)*w*w嘛),使分類器獲得最好的推廣性能。 對于線性不可分的狀況,可以允許錯分。即對于離群點降低分類間隔。將距離原來的分類面越遠,離群就越重,這個距離,可以用一個值--松弛變量來表示,只有離群點才有松弛變量。當然,要對這個值加以限制,即在最小化函數里,加入一個懲罰項,里面還有一個可以人為設定的懲罰項C。當C無限的大,那么就退化為硬間隔問題,不允許有離群點,問題可能無解。若C=0,無視離群點。有時C值需要多次嘗試,獲取一個較好的值。 這個里面可分析還很多,后面再學習。 核函數作用:將完全不可分問題,轉換為可分或達到近似可分的狀態。 松弛變量:解決近似可分的問題。總結
以上是生活随笔為你收集整理的仔细想了想支持向量机(Support Vector Mechine)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多功能监护系统开发与设计
- 下一篇: 163相册密码破解 - 简单版