當前位置:成語大全網 - 新華字典 - SVM常考細節

SVM常考細節

SVM的原理是什麽?

SVM是壹種二類分類模型。它的基本模型是在特征空間中尋找間隔最大化的分離超平面的線性分類器。(間隔最大是它有別於感知機)

(1)當訓練樣本線性可分時,通過硬間隔最大化,學習壹個線性分類器,即線性可分支持向量機;

(2)當訓練數據近似線性可分時,引入松弛變量,通過軟間隔最大化,學習壹個線性分類器,即線性支持向量機;

(3)當訓練數據線性不可分時,通過使用核技巧及軟間隔最大化,學習非線性支持向量機。

註:以上各SVM的數學推導應該熟悉: 硬間隔最大化(幾何間隔)---學習的對偶問題---軟間隔最大化(引入松弛變量)---非線性支持向量機(核技巧)。

SVM為什麽采用間隔最大化?

當訓練數據線性可分時,存在無窮個分離超平面可以將兩類數據正確分開。

感知機利用誤分類最小策略,求得分離超平面,不過此時的解有無窮多個。

線性可分支持向量機 利用間隔最大化求得最優分離超平面 ,這時,解是唯壹的。另壹方面,此時的分隔超平面所產生的分類結果是 最魯棒 的,對未知實例的 泛化能力最強 。

然後應該借此闡述,幾何間隔,函數間隔,及從函數間隔—>求解最小化1/2 ||w||^2 時的w和b。即線性可分支持向量機學習 算法 —最大間隔法的由來。

為什麽要將求解SVM的原始問題轉換為其對偶問題?

壹、是對偶問題往往更易求解(當我們尋找約束存在時的最優點的時候,約束的存在雖然減小了需要搜尋的範圍,但是卻使問題變得更加復雜。為了使問題變得易於處理,我們的方法是 把目標函數和約束全部融入壹個新的函數,即拉格朗日函數,再通過這個函數來尋找最優點。 )

二、自然引入核函數,進而推廣到非線性分類問題。

為什麽SVM要引入核函數?

當樣本在原始空間線性不可分時,可將樣本從原始空間映射到壹個更高維的特征空間,使得樣本在這個特征空間內線性可分。

引入映射後的對偶問題:

在學習預測中,只定義核函數 K ( x , y ),而不是顯式的定義映射函數 ? 。因為 特征空間維數可能很高,甚至可能是無窮維,因此直接計算 ? ( x )· ? ( y )是比較困難的。 相反,直接計算 K ( x , y )比較容易(即直接在原來的低維空間中進行計算,而不需要顯式地寫出映射後的結果)。

核函數的定義: K ( x , y )=< ? ( x ), ? ( y )>,即在特征空間的內積等於它們在原始樣本空間中通過核函數K計算的結果。

除了 SVM 之外,任何將計算表示為數據點的內積的方法,都可以使用核方法進行非線性擴展。

svm RBF核函數的具體公式?

Gauss徑向基函數則是局部性強的核函數,其外推能力隨著參數σ的增大而減弱。

這個核會將原始空間映射為無窮維空間。不過,如果 σ 選得很大的話,高次特征上的權重實際上衰減得非常快,所以實際上(數值上近似壹下)相當於壹個低維的子空間;反過來,如果 σ 選得很小,則可以將任意的數據映射為線性可分——當然,這並不壹定是好事,因為隨之而來的可能是非常嚴重的過擬合問題。不過,總的來說,通過調控參數 σ , 高斯核實際上具有相當高的靈活性,也是使用最廣泛的核函數之壹。

為什麽SVM對缺失數據敏感?

這裏說的缺失數據是指缺失某些特征數據,向量數據不完整。SVM沒有處理缺失值的策略(決策樹有)。而SVM希望樣本在特征空間中線性可分,所以特征空間的好壞對SVM的性能很重要。缺失特征數據將影響訓練結果的好壞。

SVM是用的是哪個庫?Sklearn/libsvm中的SVM都有什麽參數可以調節?

用的是sklearn實現的。采用sklearn.svm.SVC設置的參數。本身這個函數也是基於libsvm實現的(PS: libsvm中的二次規劃問題的解決算法是SMO)。

SVC函數的訓練時間是隨訓練樣本平方級增長,所以不適合超過10000的樣本。

對於多分類問題,SVC采用的是one-vs-one投票機制,需要兩兩類別建立分類器,訓練時間可能比較長。

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 )

參數:

l? C:C-SVC的懲罰參數C?默認值是1.0

C越大,相當於懲罰松弛變量,希望松弛變量接近0,即對誤分類的懲罰增大,趨向於對訓練集全分對的情況,這樣對訓練集 測試 時準確率很高,但泛化能力弱。C值小,對誤分類的懲罰減小,允許容錯,將他們當成噪聲點,泛化能力較強。

l kernel :核函數,默認是rbf,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’

0 – 線性:u'v

1 – 多項式:(gamma*u'*v + coef0)^degree

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

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

l degree :多項式poly函數的維度,默認是3,選擇其他核函數時會被忽略。

l gamma :?‘rbf’,‘poly’ 和‘sigmoid’的核函數參數。默認是’auto’,則會選擇1/n_features

l coef0 :核函數的常數項。對於‘poly’和 ‘sigmoid’有用。

l probability: 是否采用概率估計?.默認為False

l shrinking :是否采用shrinking heuristic方法,默認為true

l tol: 停止訓練的誤差值大小,默認為1e-3

l cache_size :核函數cache緩存大小,默認為200

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

l verbose :允許冗余輸出?

l max_iter :最大叠代次數。-1為無限制。

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

l random_state :數據洗牌時的種子值,int值

主要調節的參數有:C、kernel、degree、gamma、coef0。

SVM如何處理多分類問題?

壹般有兩種做法:壹種是直接法,直接在目標函數上修改,將多個分類面的參數求解合並到壹個最優化問題裏面。看似簡單但是計算量卻非常的大。

另外壹種做法是間接法:對訓練器進行組合。其中比較典型的有 壹對壹 ,和 壹對多 。

壹對多,就是對每個類都訓練出壹個分類器,由svm是二分類,所以將此而分類器的兩類設定為目標類為壹類,其余類為另外壹類。這樣針對k個類可以訓練出k個分類器,當有壹個新的樣本來的時候,用這k個分類器來測試,那個分類器的概率高,那麽這個樣本就屬於哪壹類。這種方法效果不太好,bias比較高。

svm壹對壹法(one-vs-one),針對任意兩個類訓練出壹個分類器,如果有k類,壹***訓練出C(2,k) 個分類器,這樣當有壹個新的樣本要來的時候,用這C(2,k)?個分類器來測試,每當被判定屬於某壹類的時候,該類就加壹,最後票數最多的類別被認定為該樣本的類。