svm的原理是什麼?
svm是一種二類分類模型。它的基本模型是在特徵空間中尋找間隔最大化的分離超平面的線性分類器。(間隔最大是它有別於感知機)
(1)當訓練樣本線性可分時,通過硬間隔最大化,學習乙個線性分類器,即線性可分支援向量機;
(2)當訓練資料近似線性可分時,引入鬆弛變數,通過軟間隔最大化,學習乙個線性分類器,即線性支援向量機;
(3)當訓練資料線性不可分時,通過使用核技巧及軟間隔最大化,學習非線性支援向量機。
注:以上各svm的數學推導應該熟悉:硬間隔最大化(幾何間隔)—學習的對偶問題—軟間隔最大化(引入鬆弛變數)—非線性支援向量機(核技巧)。
在超平面w⋅x+b=0w⋅x+b=0確定的情況下,|w⋅x+b|可以相對地表示點x距離超平面的遠近。對於兩類分類問題,如果w⋅x+b>0w⋅x+b>0,則xx的類別被判定為1;否則判定為-1。
所以如果y(w⋅x+b)>0y(w⋅x+b)>0,則認為x的分類結果是正確的,否則是錯誤的。且y(w⋅x+b)y(w⋅x+b)的值越大,分類結果的確信度越大。反之亦然。
那麼問題又來了:
函式間隔越大, 代表我們對於分類的結果非常確定. 我們希望函式間隔越大越好. 看上去好像沒什麼毛病, 但這裡的確有乙個問題, 就是其實我們可以在不改變這個超平面的情況下可以讓函式間隔任意大, 為什麼?
只要我們成比增加w,b就可以達到這個目的了. 例如, 我們將 w變為2w, b變為2b, 那麼我們的函式間隔將會是原來的兩倍, 但是超平面2wt
x+2b
=0和w
tx+b
=02w^tx+2b=0 和w^tx+b=0
2wtx+2
b=0和
wtx+
b=0是一回事. 所以我們在選擇超平面時光有函式間隔是不夠的。
為了解決這個問題, 我們就需要加上一些限制條件,所以,需要將w的大小固定,如||w||=1,使得函式間隔固定。這時的間隔也就是幾何間隔 .(看完後面幾何間隔的定義就明白了)
svm為什麼採用間隔最大化?
當訓練資料線性可分時,存在無窮個分離超平面可以將兩類資料正確分開。
感知機利用誤分類最小策略,求得分離超平面,不過此時的解有無窮多個。
線性可分支援向量機利用間隔最大化求得最優分離超平面,這時,解是唯一的。另一方面,此時的分隔超平面所產生的分類結果是最魯棒的,對未知例項的泛化能力最強。
然後應該藉此闡述,幾何間隔,函式間隔,及從函式間隔—>求解最小化1/2 ||w||^2 時的w和b。即線性可分支援向量機學習演算法—最大間隔法的由來。
為什麼要將求解svm的原始問題轉換為其對偶問題?
一、是對偶問題往往更易求解(當我們尋找約束存在時的最優點的時候,約束的存在雖然減小了需要搜尋的範圍,但是卻使問題變得更加複雜。為了使問題變得易於處理,我們的方法是把目標函式和約束全部融入乙個新的函式,即拉格朗日函式,再通過這個函式來尋找最優點。)
二、自然引入核函式,進而推廣到非線性分類問題。
為什麼svm要引入核函式?
當樣本在原始空間線性不可分時,可將樣本從原始空間對映到乙個更高維的特徵空間,使得樣本在這個特徵空間內線性可分
使用核函式對映到高維空間一定是線性可分的嗎?
不一定,對映到高維空間,只是較低維空間中線性可分的可能性更大。但是也會使得模型的複雜性更高,有過擬合的風險。
線性核:主要用於線性可分的情況,引數少,速度快,對於一般的資料,分類效果比較理想。
高斯核:主要用於線性不可分的情況,引數多,分類結果非常依賴引數。有很多人是通過訓練資料的交叉驗證來尋找合適的引數,不過這個過程比較耗時。我個人的體會是:使用libsvm,預設引數,rbf核比linear核效果稍差。通過進行大量引數的嘗試,一般能找到比linear核更好的效果。
什麼是對偶問題?
在引入拉格朗日運算元之後,本來是要求w,b的最小值函式,方法是對w,b分別求偏導數,得出w,b然後帶入 拉格朗日方程就可以消除w,b。
這時候我們引入對偶問題,即在消除w,b的基礎上,對拉格朗日方程求a極大時的結果。
簡而言之,對偶問題就是拉格朗日方程的極大極小問題。
不管什麼是什麼型別的svm,什麼樣的問題,我們的目標都是求解w,b 得到決策函式(最優的分類超平面)
為什麼svm對缺失資料敏感?
這裡說的缺失資料是指缺失某些特徵資料,向量資料不完整。svm沒有處理缺失值的策略(決策樹有)。而svm希望樣本在特徵空間中線性可分,所以特徵空間的好壞對svm的效能很重要。缺失特徵資料將影響訓練結果的好壞。
svm是用的是哪個庫?sklearn/libsvm中的svm都有什麼引數可以調節?
用的是sklearn實現的。採用sklearn.svm.svc設定的引數。本身這個函式也是基於libsvm實現的(ps: libsvm中的二次規劃問題的解決演算法是smo)。
svc函式的訓練時間是隨訓練樣本平方級增長,所以不適合超過10000的樣本。
對於多分類問題,svc採用的是one-vs-one投票機制,需要兩兩類別建立分類器,訓練時間可能比較長。
未完待續ing
一文搞懂MySQL的Join
經常聽到2種觀點 其實對於上面的觀點一定程度上是正確的,但不是完全正確。但之所以流傳這麼廣,主要還是沒有搞清楚實際狀態,而根據實際使用中總結出來的一些模糊規律。只有了解的mysql的join實際執行方式,就會知道上面2種觀點是一種模糊的規律,這種規律並不能指導我們實際開發。下面就說說mysql的實際...
一文搞懂pandas中的去重
有兩個資料集a和b,找出資料集b中不屬於資料集a中的資料,如下圖所示 資料集a a b b b c c為a和b重複的資料 主要要過濾掉b中的c即可求解問題 首先需要對a和b去重 a pd.dataframe np.random.randint 0,9,5 columns a b pd.datafra...
一文帶你搞懂python中的property
通常我們在獲得變數的一些私有屬性時,必須通過方法來獲取私有屬性,並不能直接訪問 修改其數值的時候也是要通過方法去修改,這樣非常的不方便 所以python提供了一種方式,將呼叫方法的的形式轉變為訪問屬性,這樣使用非常方便 class student def init self 這是乙個私有屬性 sel...