svm预测结果为同一个值_SVM算法总结
一、1.感知機模型:
感知器模型是SVM、神經網絡、深度學習等算法的基礎;感知器模型就是試圖找到一條直線,能夠把所有的“+1”類和“-1”類分隔開,如果是高維空間中,感知器模型尋找的就是一個超平面,能夠把所有的二元類別分割開。感知器模型的前提是:數據是線性可分的。
目標是找到一個超平面,即:
感知器模型為:
感知器模型正確分類(預測和實際類別一致):yθx>0(y為實際值,θx為預測值),錯誤分類(預測和實際類別不一致):yθx<0;所以我們可以定義我們的損失函數為:期望使分類錯誤的所有樣本(k條樣本)到超平面的距離之和最小。
即:
(去絕對值符號,分類錯誤<0,分子加”—“)簡化損失函數:因為此時分子和分母中都包含了θ值,當分子擴大N倍的時候,分母也會隨之擴大,也就是說分子和分母之間存在倍數關系,所以可以固定分子或者分母為1,然后求另一個即分子或者分母的倒數的最小化作為損失函數,簡化后的損失函數為(分母為1):
(即 ,分子分母相抵消,模長對結果無影響)。直接使用梯度下降法就可以對損失函數求解,不過由于這里的k是分類錯誤的樣本點集合,不是固定的,所以我們不能使用批量梯度下降法(BGD)求解,只能使用隨機梯度下降(SGD)或者小批量梯度下降(MBGD);一般在感知器模型中使用SGD來求解。
二、1.SVM(支持向量機)
支持向量機(Support Vecor Machine, SVM)本身是一個二元分類算法,是對感知器算法模型的一種擴展,現在的SVM算法支持線性分類和非線性分類的分類應用,并且也能夠直接將SVM應用于回歸應用中,同時通過OvR或者OvO的方式我們也可以將SVM應用在多元分類領域中。在不考慮集成學習算法,不考慮特定的數據集的時候,在分類算法中SVM可以說是特別優秀的。
在感知器模型中,算法是在數據中找出一個劃分超平面,讓盡可能多的數據分布在這個平面的兩側,從而達到分類的效果,但是在實際數據中這個符合我們要求的超平面是可能存在多個的。
SVM思想:在感知器模型中,我們可以找到多個可以分類的超平面將數據分開,并且優化時希望所有的點(預測正確的點)都離超平面盡可能的遠,但是實際上離超平面足夠遠的點基本上都是被正確分類的,所以這個是沒有意義的;反而比較關心那些離超平面很近的點,這些點比較容易分錯。所以說我們只要讓離超平面比較近的點盡可能的遠離這個超平面,那么我們的模型分類效果應該就會比較不錯。SVM其實就是這個思想。
名詞概念:
- 線性可分(Linearly Separable):在數據集中,如果可以找出一個超平面,將兩組數據分開,那么這個數據集叫做線性可分數據。
- 線性不可分(Linear Inseparable):在數據集中,沒法找出一個超平面,能夠將兩組數據分開,那么這個數據集就叫做線性不可分數據。
- 分割超平面(Separating Hyperplane):將數據集分割開來的直線/平面叫做分割超平面。
- 支持向量(Support Vector):離分割超平面最近的那些點叫做支持向量。
- 間隔(Margin):支持向量數據點到分割超平面的距離稱為間隔。
支持向量到超平面的距離為:在SVM中支持向量到超平面的函數距離一般設置為1
∵
∵
∴
SVM模型是讓所有的分類點在各自類別的支持向量遠離超平面的一側,同時要求支持向量盡可能的遠離這個超平面,用數學公式表示如下:
W^{T}=(w_1,w_2,...,w_n)
(s.t: 指”受限制于...“)
(對偶問題)則SVM原始目標函數/損失函數為:
將此時的目標函數和約束條件使用KKT條件轉換為拉格朗日函數,從而轉換為無約束的優化函數。
引入拉格朗日乘子后,優化目標變成:
g(x)小于等于0 當L取最大值 g(x)等于0 消去g(x) KKT條件分析根據拉格朗日對偶化特性,將該優化目標轉換為等價的對偶問題來求解,從而優化目標變成:
所以對于該優化函數而言,可以先求優化函數對于w和b的極小值,然后再求解對于拉格朗日乘子β的極大值。
首先求讓函數L極小化的時候w和b的取值,這個極值可以直接通過對函數L分別求w和b的偏導數得到:
將求解出來的w和b帶入優化函數L中,定義優化之后的函數如下:
通過對w、b極小化后,我們最終得到的優化函數只和β有關,所以此時我們可以直接極大化我們的優化函數,得到β的值,從而可以最終得到w和b的值。β值的求解使用SMO算法
假設存在最優解β*; 根據w、b和β的關系,可以分別計算出對應的w值和b值(一般使用所有支持向量的計算均值來作為實際的b值);
這里的(xs,ys)即支持向量,根據KKT條件中的對偶互補條件(松弛條件約束),支持向量必須滿足一下公式:
2.線性可分SVM算法流程:
- 輸入線性可分的m個樣本數據{(x1,y1),(x2,y2),...,(xm,ym)},其中x為n維的特征向量,y為二元輸出,取值為+1或者-1;SVM模型輸出為參數w、b以及分類決策函數。
- 構造約束優化問題;
使用SMO算法求出上式優化中對應的最優解β*;
- 找出所有的支持向量集合S;
- 更新參數w*、b*的值;
- 構建最終的分類器;
3.線性可分SVM總結
1. 要求數據必須是線性可分的;
2. 純線性可分的SVM模型對于異常數據的預測可能會不太準;
3. 對于線性可分的數據,線性SVM分類器的效果非常不錯。
三、1.SVM的軟間隔模型
線性可分SVM中要求數據必須是線性可分的,才可以找到分類的超平面,但是有的時候線性數據集中存在少量的異常點,由于這些異常點導致了數據集不能夠線性劃分;直白來講就是:正常數據本身是線性可分的,但是由于存在異常點數據,導致數據集不能夠線性可分;
如果線性數據中存在異常點導致沒法直接使用SVM線性分割模型的時候,我們可以通過引入軟間隔的概念來解決這個問題;
硬間隔:可以認為線性劃分SVM中的距離度量就是硬間隔,在線性劃分SVM中,要求函數距離一定是大于1的,最大化硬間隔條件為:
軟間隔:SVM對于訓練集中的每個樣本都引入一個松弛因子(ξ),使得函數距離加上松弛因子后的值是大于等于1;這表示相對于硬間隔,對樣本到超平面距離的要求放松了。(引入松弛因子(ξ))
松弛因子(ξ)越大,表示樣本點離超平面越近,如果松弛因子大于1,那么表示允許該樣本點分錯,所以說加入松弛因子是有成本的,過大的松弛因子可能會導致模型分類錯誤,所以最終的目標函數就轉換成為:
注:函數中的C&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;0是懲罰參數,是一個超參數,類似L1/L2 norm的參數;C越大表示對誤分類的懲罰越大,也就是越不允許存在分錯的樣本;C越小表示對誤分類的懲罰越小, 也就是表示允許更多的分錯樣本存在;C值的給定需要調參。同線性可分SVM,根據KKT條件構造軟間隔最大化的約束問題對應的拉格朗日函數如下:
從而將我們的優化目標函數轉換為:
優化目標同樣滿足KKT條件,所以使用拉格朗日對偶將優化問題轉換為等價的對偶問題:
先求優化函數對于w、b、ξ的極小值,這個可以通過分別對優化函數L求w、b、ξ的偏導數得,從而可以得到w、b、ξ關于β和μ之間的關系。
將w、b、ξ的值帶入L函數中,就可以消去優化函數中的w、b、ξ,定義優化之后的函數如下:
最終優化后的目標函數/損失函數和線性可分SVM模型基本一樣,除了約束條件不同而已, 也就是說也可以使用SMO算法來求解。
- 在硬間隔最大化的時候,支持向量比較簡單,就是離超平面的函數距離為1的樣本點就是支持向量。
- 在軟間隔中,根據KKT條件中的對偶互補條件: β(1-ξ-y(wx+b))=0和μ(-ξ)=0,以及C-β-μ=0;從而有:
- 當0<βi≤C的時候,并且ξi=0的樣本點均是支持向量(即所有的0<βi<C)。即滿足|wx+b|=1的所有樣本均是支持向量。(取等號時,所有樣本都分對,不考慮 第二個KKT條件)
- 當0<βi<C對應的樣本就是支持向量。
- 注:軟間隔和硬間隔中的支持向量的規則是一樣的;
- 則x1是支持變量
2.SVM的軟間隔模型算法流程:
輸入線性可分的m個樣本數據{(x1,y1),(x2,y2),...,(xm,ym)},其中x為n維的特征向量,y為二元輸出,取值為+1或者-1;SVM模型輸出為參數w、b以及分類決策函數。
step 1:選擇一個懲罰系數C>0,構造約束優化問題;
- Step2:使用SMO算法求出上式優化中對應的最優解β*;
- step3:找出所有的支持向量集合S;
- step4:更新參數w*、b*的值;
- step5:構建最終的分類器
3.SVM的軟間隔模型總結
- 1. 可以解決線性數據中攜帶異常點的分類模型構建的問題;
- 2. 通過引入懲罰項系數(松弛因子),可以增加模型的泛化能力,即魯棒性;
- 3. 如果給定的懲罰項系數C越小,表示在模型構建的時候,就允許存在越多的分類錯誤的樣本, 也就表示此時模型的準確率會比較低;如果懲罰項系數越大,表示在模型構建的時候,就越不允許存在分類錯誤的樣本,也就表示此時模型的準確率會比較高。
四、1.非線性可分SVM
不管是線性可分SVM還是加入懲罰系數后的軟間隔線性可分SVM其實都要求數據本身是線性可分的,對于完全不可以線性可分的數據,這兩種算法模型就沒法解決這個問題了
結合多項式回歸在處理非線性可分數據時候的作用,在SVM的線性不可分的數據上,如果將數據映射到高維空間中,那么數據就會變成線性可分的,從而就可以使用線性可分SVM模型或者軟間隔線性可分SVM模型。也就是說,對于線性不可分SVM模型來講,重點在于低維特征數據到高維特征數據之間的映射。
定義一個從低維特征空間到高維特征空間的映射函數Ф,非線性可分SVM的優化目標函數:
可以看到的是,只需要將原來的低維空間中的兩個向量的點積轉換為高維空間中兩個向量的點積即可。
問題:這樣一來問題就解決了嗎?似乎是的:拿到非線性數據,就找一個映射,然后一股腦把原來的數據映射到新空間中,再做線性 SVM 即可。不過事實上沒有這么簡單!其實剛才的方法稍想一下就會發現有問題:在最初的例子里做了一個二階多項式的轉換,對一個二維空間做映射,選擇的新空間是原始空間的所有一階和二階的組合,得到了5個維度;如果原始空間是三維,那么我們會得到9維的新空間;如果原始空間是n維,那么我們會得到一個n(n+3)/2維的新空間;這個數目是呈爆炸性增長的,這給計算帶來了非常大的困難,而且如果遇到無窮維的情況,就根本無從計算。
2.核函數
假設函數Ф是一個從低維特征空間到高維特征空間的一個映射,那么如果存在函數K(x,z), 對于任意的低維特征向量x和z,都有:
稱函數K(x,z)為核函數(kernal function):在低維空間上的計算值等價于向量做維度擴展后的點乘的結果。 核函數在解決線性不可分問題的時候,采取的方式是:使用低維特征空間上的計算來避免在高維特征空間中向量內積的恐怖計算量;也就是說此時SVM模型可以應用在高維特征空間中數據可線性分割的優點,同時又避免了引入這個高維特征空間恐怖的內積計算量。
即:用低維空間中少的內積的計算量來讓模型具有高維空間中的線性可分的優點。
例:,設兩個向量
和,而即是到前面說的五維空間的映射,因此映射過后的內積為:而同時我們可以發現有一下公式
可以發現兩者之間非常相似,所以我們只要乘上一個相關的系數,就可以讓這兩個式子的值相等,這樣不就將五維空間的一個內積轉換為兩維空間的內積的運算。
現有有兩個兩維的向量,進行二階多項式擴展,然后進行內積計算,這個時候映射高維后計算的計算量為:11次乘法+4次加法;采用近似計算的計算量為:3次乘法+2次加法;采用加系數后的近似計算的計算量為:4次乘法+2次加法;
核函數總結
1. 核函數可以自定義;核函數必須是正定核函數,即Gram矩陣是半正定矩陣;
2. 核函數的價值在于它的效果相當于將特征進行從低維到高維的轉換,但核函數它是在低維空間上的計算,而將實質上的分類效果表現在了高維上,也就如上文所說的避免了直接在高維空間中的復雜計算;
3. 通過核函數,可以將非線性可分的數據轉換為線性可分數據;
五、SVR
做回歸用,了解即可
六.坐標下降(上升)法原理(搬運自https://blog.csdn.net/u010626937/article/details/75044343)
假設要求解下面的優化問題:
在這里,我們需要求解m個變量αi,一般來說是通過梯度下降(這里是求最大值,所以應該叫上升)等算法來求解,每一次迭代對所有m個變量αi也就是α向量進行一次性優化。(這里指的是一個向量的所有分量)。通過每次迭代中的誤差調整α向量中每個元素的值。而坐標上升法(坐標上升與坐標下降可以看做是一對,坐標上升是用來求解max最優化問題,坐標下降用于求min最優化問題)的思想是每次迭代只調整一個變量αi的值,其他變量的值在這次迭代中固定不變。(這里指的是一個向量中的一個分量)。
最里面語句的意思是固定除αi之外的所有αj(i不等于j),這時W可看作只是關于αi的函數,那么直接對αi求導優化即可。這里我們進行最大化求導的順序i是從1到m,可以通過更改優化順序來使W能夠更快地增加并收斂。如果W在內循環中能夠很快地達到最優,那么坐標上升法會是一個很高效的求極值方法。
用個二維的例子來說明下坐標下降法:我們需要尋找f(x,y)=x2+xy+y2的最小值處的(x*, y*),也就是下圖的F*點的地方.
假設我們初始的點是A(圖是函數投影到xoy平面的等高線圖,顏色越深值越小),我們需要達到F*的地方。那最快的方法就是圖中黃色線的路徑,一次性就到達了,其實這個是牛頓優化法,但如果是高維的話,這個方法就不太高效了(因為需要求解矩陣的逆,這個不在這里討論)。我們也可以按照紅色所指示的路徑來走。從A開始,先固定x,沿著y軸往讓f(x, y)值減小的方向走到B點,然后固定y,沿著x軸往讓f(x, y)值減小的方向走到C點,不斷循環,直到到達F*。反正每次只要我們都往讓f(x, y)值小的地方走就行了,這樣腳踏實地,一步步走,每一步都使f(x, y)慢慢變小,總有一天,皇天不負有心人的。到達F*也是時間問題。到這里你可能會說,這紅色線比黃色線貧富差距也太嚴重了吧。因為這里是二維的簡單的情況嘛。如果是高維的情況,而且目標函數很復雜的話,再加上樣本集很多,那么在梯度下降中,目標函數對所有αi求梯度或者在牛頓法中對矩陣求逆,都是很耗時的。這時候,如果W只對單個αi優化很快的時候,坐標下降法可能會更加高效。
數學例題講解
下面以如下的優化問題為例:
在迭代的過程中,每次固定x2更新x1,在確定了x1的條件下,固定x1,更新x2。即每次迭代求解:
也即求解
,假設我們首先固定x2,來更新x1:
令其為0,得到:
再固定x1,得到:
令其為0,得到:
不斷按照上述的過程,直到算法收斂。
七、SMO(可略過)
序列最小優化算法(Sequential minimal optimization, SMO)是一種用于解決SVM訓練過程中所產生的優化問題的算法。 于1998年由John Platt發明。SMO的思想類似坐標上升算法,我們需要優化一系列的αα的值,我們每次選擇盡量少的
來優化,不斷迭代直到函數收斂到最優值。梯度提升算法采用增量完成迭代,SMO利用自身完成迭代,如
。目標函數:
假定存在一個β*=(β1,β2,...,βm)是我們最終的最優解,那么根據KKT條件我們可以計算出w和b的最優解,如下:
進而我們可以得到最終的分離超平面為:
拉格朗日乘子法和KKT的對偶互補條件為:
β、μ和C之間的關系為:
根據這個對偶互補條件,我們有如下關系式:
也就是說我們找出的最優的分割超平面必須滿足下列的目標條件(g(x)):
拉格朗日對偶化要求的兩個限制的初始條件為:
從而可以得到解決問題的思路如下:
- 首先,初始化后一個β值,讓它滿足對偶問題的兩個初始限制條件;
- 然后不斷優化這個β值,使得由它確定的分割超平面滿足g(x)目標條件;而且在優化過程中,始終保證β值滿足初始限制條件。
- 備注:這個求解過程中,和傳統的思路不太一樣,不是對目標函數求最小值,而是讓g(x)目標條件盡可能的滿足。
在這樣一個過程中,到底如何優化這個β值呢???整理可以發現β值的優化必須遵循以下兩個基本原則:
- 每次優化的時候,必須同時優化β的兩個分量;因為如果只優化一個分量的話,新的β值就沒法滿足初始限制條件中的等式約束條件了。
- 每次優化的兩個分量應該是違反g(x)目標條件比較多的。也就是說,本來應當是大于1的,yg(x)結果越是小于1就表示違反g(x)目標條件就越多。
或者換一種思路來理解,因為目標函數中存在m個變量,直接優化比較難,利用啟發式的方法/EM算法的思想,每次優化的時候,只優化兩個變量,將其它的變量看成常數項,這樣SMO算法就將一個復雜的優化算法轉換為一個比較簡單的兩變量優化問題了。
認為β1、β2是變量,其它β值是常量,從而將目標函數轉換如下(C是常數項):
由于
,并且y2=1,也就是我們使用β2來表示β1的值:將上式帶入目標優化函數,就可以消去β1,從而只留下僅僅包含β2的式子。
V1,V2消去beta1考慮β1和β2的取值限定范圍,假定新求出來的β值是滿足我們的邊界限制的,即如下所示:
當y1=y2的時候,β1+β2=k; 由于β的限制條件,我們可以得到:
可以發現SMO算法中,是選擇兩個合適的β變量做迭代,其它變量作為常量來進行優化的一個過程,那么這兩個變量到底怎么選擇呢???
每次優化的時候,必須同時優化β的兩個分量;因為如果只優化一個分量的話,新的β值就沒法滿足初始限制條件中的等式約束條件了。
每次優化的兩個分量應該是違反g(x)目標條件比較多的。也就是說,本來應當是大于等于1的,越是小于1違反g(x)目標條件就越多。
SMO算法在選擇第一個β變量的時候,需要選擇在訓練集上違反KKT條件最嚴重的樣本點。一般情況下,先選擇0<β<C的樣本點(即支持向量),只有當所有的支持向量都滿足KKT條件的時候,才會選擇其它樣本點。因為此時違反KKT條件越嚴重,在經過一次優化后,會讓變量β盡可能的發生變化,從而可以以更少的迭代次數讓模型達到g(x)目標條件。
在選擇第一個變量β1后,在選擇第二個變量β2的時候,希望能夠按照優化后的β1和β2有盡可能多的改變來選擇,也就是說讓|E1-E2|足夠的大,當E1為正的時候,選擇最小的Ei作為E2;當E1為負的時候,選擇最大的Ei作為E2。
備注:如果選擇的第二個變量不能夠讓目標函數有足夠的下降,那么可以通過遍歷所有樣本點來作為β2,直到目標函數有足夠的下降,如果都沒有足夠的下降的話,那么直接跳出循環,重新選擇β1;
在每次完成兩個β變量的優化更新之后,需要重新計算閾值b和差值Ei。當0<β1new<C時,有:
化簡可得:
同樣的當β2的取值為: 0<β2<C的時候,我們也可以得到
最終計算出來的b為:
當更新計算閾值b后,就可以得到差值Ei為:
總結
以上是生活随笔為你收集整理的svm预测结果为同一个值_SVM算法总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软直接“偷家”:Edge新版启动时可自
- 下一篇: 调用startactivityforre