數(shù)據(jù)挖掘十大經(jīng)典算法之支持向量機(jī)(SVM)

支持向量機(jī)(SVM)

它是一種監(jiān)督式學(xué)習(xí)的方法,廣泛應(yīng)用于統(tǒng)計(jì)分類和回歸分析中。

一、主要思想

1. 它是針對(duì)線性可分情況進(jìn)行分析,對(duì)于線性不可分的情況,通過(guò)使用非線性映射算法將低維輸入空間線性不可分的樣本轉(zhuǎn)化為高維特征空間使其線性可分,從而使得高維特征空間采用線性算法對(duì)樣本的非線性特征進(jìn)行線性分析成為可能;

2.?它基于結(jié)構(gòu)風(fēng)險(xiǎn)最小化理論之上在特征空間中建構(gòu)最優(yōu)分割超平面,使得學(xué)習(xí)器得到全局最優(yōu)化,并且在整個(gè)樣本空間的期望風(fēng)險(xiǎn)以某個(gè)概率滿足一定上界。

概括:支持向量機(jī)將向量映射到一個(gè)更高維的空間里,在這個(gè)空間里建立有一個(gè)最大間隔超平面。在分開(kāi)數(shù)據(jù)的超平面的兩邊建有兩個(gè)互相平行的超平面。分隔超平面使兩個(gè)平行超平面的距離最大化。假定平行超平面間的距離或差距越大,分類器的總誤差越小。

有很多個(gè)分類器(超平面)可以把數(shù)據(jù)分開(kāi),但是只有一個(gè)能夠達(dá)到最大分割。?我們通常希望分類的過(guò)程是一個(gè)機(jī)器學(xué)習(xí)的過(guò)程。這些數(shù)據(jù)點(diǎn)并不需要是中的點(diǎn),而可以是任意(統(tǒng)計(jì)學(xué)符號(hào))中或者 ?(計(jì)算機(jī)科學(xué)符號(hào)) 的點(diǎn)。我們希望能夠把這些點(diǎn)通過(guò)一個(gè)n-1維的超平面分開(kāi),通常這個(gè)被稱為線性分類器。有很多分類器都符合這個(gè)要求,但是我們還希望找到分類最佳的平面,即使得屬于兩個(gè)不同類的數(shù)據(jù)點(diǎn)間隔最大的那個(gè)面,該面亦稱為最大間隔超平面,會(huì)更有魯棒性。如果我們能夠找到這個(gè)面,那么這個(gè)分類器就稱為最大間隔分類器。

圖解

二、目標(biāo)函數(shù):

SVM是要使到超平面最近的樣本點(diǎn)的“距離”最大。

使margin最大化,margin為

之后再進(jìn)行化簡(jiǎn)轉(zhuǎn)化...

具體推導(dǎo)見(jiàn):https://zhuanlan.zhihu.com/p/77750026?utm_source=wechat_session

線性不可分時(shí):

將低維空間映射到高維空間,使其線性可分。例如

線性不可分
映射到高維空間后可分

而此時(shí),會(huì)造成計(jì)算量太大,也容易過(guò)擬合,有學(xué)者已經(jīng)解決了這個(gè)問(wèn)題。使用核函數(shù)k(x,y)的計(jì)算結(jié)果與高維空間的內(nèi)積計(jì)算相同,可以代替。

常用核函數(shù)有:線性核函數(shù)、多項(xiàng)式核函數(shù)和高斯核函數(shù)。

三、優(yōu)缺點(diǎn)

1. 優(yōu)點(diǎn)

有嚴(yán)格的數(shù)學(xué)理論支持,可解釋性強(qiáng),不依靠統(tǒng)計(jì)方法,從而簡(jiǎn)化了通常的分類和回歸問(wèn)題;

能找出對(duì)任務(wù)至關(guān)重要的關(guān)鍵樣本(即:支持向量);

采用核函數(shù)技巧之后,可以處理非線性分類/回歸任務(wù);

最終決策函數(shù)只由少數(shù)的支持向量所確定,計(jì)算的復(fù)雜性取決于支持向量的數(shù)目,而不是樣本空間的維數(shù),這在某種意義上避免了“維數(shù)災(zāi)難”。

2. 缺點(diǎn)

訓(xùn)練時(shí)間長(zhǎng)。

當(dāng)采用核技巧時(shí),如果需要存儲(chǔ)核矩陣,則空間復(fù)雜度為O(N^2 )

模型預(yù)測(cè)時(shí),預(yù)測(cè)時(shí)間與支持向量的個(gè)數(shù)成正比。當(dāng)支持向量的數(shù)量較大時(shí),預(yù)測(cè)計(jì)算復(fù)雜度較高。

因此支持向量機(jī)目前只適合小批量樣本的任務(wù),無(wú)法適應(yīng)百萬(wàn)甚至上億樣本的任務(wù)。但是有的說(shuō)適用于大量數(shù)據(jù),筆者還未弄明白。

四、SVC方法

sklearn.svm.SVC(C=1.0,kernel='rbf',?degree=3,?gamma='auto',coef0=0.0,shrinking=True,probability=False,tol=0.001,cache_size=200,?class_weight=None,verbose=False,max_iter=-1,decision_function_shape=None,random_state=None)

參數(shù)說(shuō)明:

l ?C:C-SVC的懲罰參數(shù)C?默認(rèn)值是1.0

C越大,相當(dāng)于懲罰松弛變量,希望松弛變量接近0,即對(duì)誤分類的懲罰增大,趨向于對(duì)訓(xùn)練集全分對(duì)的情況,這樣對(duì)訓(xùn)練集測(cè)試時(shí)準(zhǔn)確率很高,但泛化能力弱。C值小,對(duì)誤分類的懲罰減小,允許容錯(cuò),將他們當(dāng)成噪聲點(diǎn),泛化能力較強(qiáng)。

l ?kernel :核函數(shù),默認(rèn)是rbf,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’

  0 – 線性:u’v

   1 – 多項(xiàng)式:(gamma*u’*v + coef0)^degree

  2 – RBF函數(shù):exp(-gamma|u-v|^2)

  3 –sigmoid:tanh(gamma*u’*v + coef0)

l ?degree :多項(xiàng)式poly函數(shù)的維度,默認(rèn)是3,選擇其他核函數(shù)時(shí)會(huì)被忽略。

l ?gamma : ‘rbf’,‘poly’ 和‘sigmoid’的核函數(shù)參數(shù)。默認(rèn)是’auto’,則會(huì)選擇1/n_features

l ?coef0 :核函數(shù)的常數(shù)項(xiàng)。對(duì)于‘poly’和 ‘sigmoid’有用。

l ?probability :是否采用概率估計(jì)?.默認(rèn)為False

l ?shrinking :是否采用shrinking heuristic方法,默認(rèn)為true

l ?tol :停止訓(xùn)練的誤差值大小,默認(rèn)為1e-3

l ?cache_size :核函數(shù)cache緩存大小,默認(rèn)為200

l ?class_weight :類別的權(quán)重,字典形式傳遞。設(shè)置第幾類的參數(shù)C為weight*C(C-SVC中的C)

l ?verbose :允許冗余輸出?

l ?max_iter :最大迭代次數(shù)。-1為無(wú)限制。

l ?decision_function_shape :‘ovo’, ‘ovr’ or None, default=None3

l ?random_state :數(shù)據(jù)洗牌時(shí)的種子值,int值

主要調(diào)節(jié)的參數(shù)有:C、kernel、degree、gamma、coef0。

五、SVR

1. 介紹

SVM/SVR圖示

SVR回歸與SVM分類的區(qū)別在于,SVR的樣本點(diǎn)最終只有一類,它所尋求的最優(yōu)超平面不是SVM那樣使兩類或多類樣本點(diǎn)分的“最開(kāi)”,而是使所有的樣本點(diǎn)離著超平面的總偏差最小。SVM是要使到超平面最近的樣本點(diǎn)的“距離”最大;SVR則是要使到超平面最遠(yuǎn)的樣本點(diǎn)的“距離”最小。

統(tǒng)計(jì)上的理解就是:使得所有的數(shù)據(jù)的類內(nèi)方差最小,把所有的類的數(shù)據(jù)看作是一個(gè)類。

傳統(tǒng)的回歸方法當(dāng)且僅當(dāng)回歸f(x)完全等于y時(shí)才認(rèn)為是預(yù)測(cè)正確,需計(jì)算其損失;而支持向量回歸(SVR)則認(rèn)為只要是f(x)與y偏離程度不要太大,既可認(rèn)為預(yù)測(cè)正確,不用計(jì)算損失。具體的就是設(shè)置一個(gè)閾值α,只是計(jì)算 |f(x) - y| > α 的數(shù)據(jù)點(diǎn)的loss。如圖:支持向量回歸表示只要在虛線內(nèi)部的值都可認(rèn)為是預(yù)測(cè)正確,只要計(jì)算虛線外部的值的損失即可。

SVR超平面示意圖

損失函數(shù)相關(guān)的問(wèn)題及改進(jìn):

在SVR中對(duì)于損失函數(shù)構(gòu)成的模型,有些權(quán)重很大,有些權(quán)重很小,這樣就會(huì)容易導(dǎo)致過(guò)擬合(就是過(guò)分?jǐn)M合了訓(xùn)練數(shù)據(jù)集),而過(guò)擬合則是因?yàn)闃颖咎嗟奶卣鞅话M(jìn)來(lái),很多與項(xiàng)目本身無(wú)關(guān)的特征也被包含進(jìn)來(lái)。

解決過(guò)擬合問(wèn)題有很多方式,常見(jiàn)的有以下幾種:

1).喂數(shù)據(jù),也就是給足夠多的數(shù)據(jù),只有數(shù)據(jù)多了,數(shù)據(jù)的很多特征才會(huì)更加明顯的體現(xiàn)出來(lái),訓(xùn)練的模型也會(huì)不斷的修正,特征的作用也會(huì)體現(xiàn)的越來(lái)越大。

2).特征降維,越多的特征導(dǎo)致訓(xùn)練集的維度越高,降維就是把高維空間的數(shù)據(jù)投影到低維空間中(保存下來(lái)的特征是數(shù)據(jù)量大的)。主要有:PCA降維(主成分分析,無(wú)監(jiān)督)、反向特征消除、隨機(jī)森林/組合樹(shù)、LDA(線性判別分析,有監(jiān)督)、LLE(局部線性嵌入)、Laplacian Eigenmaps(拉普拉斯特征映射)等

3).針對(duì)具體的負(fù)荷預(yù)測(cè),對(duì)電量值進(jìn)行標(biāo)準(zhǔn)化或者歸一化。可以時(shí)特征訓(xùn)練集能夠快速的收斂,可以使特征值域范圍變小,有利于提高精度。

2. svr方法

sklearn.svm.SVR(kernel='rbf', degree=3, gamma='auto_deprecated', coef0=0.0, tol=0.001, C=1.0, epsilon=0.1, shrinking=True, cache_size=200, verbose=False, max_iter=-1)

參數(shù)解釋:

kernel: type: string;optional(default=‘rbf’)

? ? ? ? ? ? ?算法中所使用的核函數(shù)類型,其中有(‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’,‘precomputer’,默認(rèn)使用‘rbf’)

?degree:type:int, optional(default=3)

? ? ? ? ? ? ?多項(xiàng)式核函數(shù)的次數(shù),默認(rèn)為3,所以當(dāng)核函數(shù)為‘poly’時(shí)用到,其它核函數(shù)忽略

gamma:type:float, optional(default=‘a(chǎn)uto’)

? ? ? ? ? ? ?核函數(shù)的系數(shù), 在核函數(shù)為‘rbf’, ‘poly’, ‘sigmoid’時(shí)使用,其他核函數(shù)忽略。gamma的值必須大于0, 隨著gamma的增大,對(duì)于測(cè)試集分類效果越差,對(duì)于訓(xùn)練集分類效果好,并且使模型的復(fù)雜度提高,泛化能力(對(duì)未知數(shù)的預(yù)測(cè)能力)較差,從而出現(xiàn)過(guò)擬合的情況。

coef0:type:float, optional(default=0.0)

? ? ? ? ? ? ?核函數(shù)中的獨(dú)立項(xiàng),只在核函數(shù)為‘poly’跟‘sigmoid’時(shí)使用。

tol:type:float, optional(default=1e-3)停止判斷的公差

C:type:float, optional(default=1.0)

? ? ? ? ? ?錯(cuò)誤項(xiàng)的懲罰因子:表征有多重視離群點(diǎn),C越大越重視,也就是越不想丟掉這些離群點(diǎn)。C值大時(shí)對(duì)誤差分類的懲罰增大,C值小時(shí)對(duì)誤差分類的懲罰減小。當(dāng)C趨近于無(wú)窮大時(shí),表示不允許分類誤差的存在;當(dāng)C趨于0時(shí),表示不再關(guān)注分類是否正確。

epsilon:type:float, optional(default=0.1)

shrinking:type:boolean,optional(default=True)

? ? ? ? ? ?是否使用收縮啟發(fā)式

cache_size:type:float, optional

? ? ? ? ? ?內(nèi)核緩存的大小

verbose:type:bool, default:False

? ? ? ? ? 啟用詳細(xì)輸出。如果啟用,在多線程環(huán)境下可能無(wú)法正常工作

max_iter:type:int, optional(default=-1)

? ? ? ? ? ?解算器內(nèi)迭代的硬性限制,默認(rèn)為-1(無(wú)限制)

SVM常見(jiàn)面試問(wèn)題:https://blog.csdn.net/yanhx1204/article/details/79481003

參考:

https://blog.csdn.net/u011067360/article/details/24368085

https://blog.csdn.net/qq_36523839/article/details/82383597

數(shù)學(xué)解釋:https://zhuanlan.zhihu.com/p/77750026?utm_source=wechat_session

SVC方法解釋:https://www.imooc.com/article/details/id/40903

SVR介紹:https://zhuanlan.zhihu.com/p/76609851、http://www.itdecent.cn/p/399ddcac2178

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容