svm的原理是什麼?
svm是一種二類分類模型。它的基本模型是在特徵空間中尋找間隔最大化的分離超平面的線性分類器。(間隔最大是它有別於感知機)
(1)當訓練樣本線性可分時,通過硬間隔最大化,學習乙個線性分類器,即線性可分支援向量機;
(2)當訓練資料近似線性可分時,引入鬆弛變數,通過軟間隔最大化,學習乙個線性分類器,即線性支援向量機;
(3)當訓練資料線性不可分時,通過使用核技巧及軟間隔最大化,學習非線性支援向量機。
注:具體原理推導見
svm為什麼採用間隔最大化?
當訓練資料線性可分時,存在無窮個分離超平面可以將兩類資料正確分開。
感知機利用誤分類最小策略,求得分離超平面,不過此時的解有無窮多個。
線性可分支援向量機利用間隔最大化求得最優分離超平面,這時,解是唯一的。另一方面,此時的分隔超平面所產生的分類結果是最魯棒的,對未知例項的泛化能力最強。
然後應該藉此闡述,幾何間隔,函式間隔,及從函式間隔—>求解最小化1/2 ||w||^2 時的w和b。即線性可分支援向量機學習演算法—最大間隔法的由來。
為什麼要將求解svm的原始問題轉換為其對偶問題?
一、是對偶問題往往更易求解(當我們尋找約束存在時的最優點的時候,約束的存在雖然減小了需要搜尋的範圍,但是卻使問題變得更加複雜。為了使問題變得易於處理,我們的方法是把目標函式和約束全部融入乙個新的函式,即拉格朗日函式,再通過這個函式來尋找最優點。)
二、自然引入核函式,進而推廣到非線性分類問題。
為什麼svm要引入核函式?
當樣本在原始空間線性不可分時,可將樣本從原始空間對映到乙個更高維的特徵空間,使得樣本在這個特徵空間內線性可分。
引入對映後的對偶問題:
在學習**中,只定義核函式k(x,y),而不是顯式的定義對映函式ϕ。因為特徵空間維數可能很高,甚至可能是無窮維,因此直接計算ϕ(x)·ϕ(y)是比較困難的。相反,直接計算k(x,y)比較容易(即直接在原來的低維空間中進行計算,而不需要顯式地寫出對映後的結果)。
核函式的定義:k(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
快取大小,預設為
200l 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) 個分類器來測試,每當被判定屬於某一類的時候,該類就加一,最後票數最多的類別被認定為該樣本的類。
SVM常見面試題
一 svm 1.svm為什麼引入對偶問題?1 方便計算,將原始問題的約束轉化為等式約束 2 便於引入核函式 2.svm怎麼防止過擬合?引入鬆弛變數 3.點到直線距離公式?點4.lr和svm有什麼不同嗎?1 分類思想不同 lr是基於概率求得,svm是基於最大化間隔 2 svm決策麵只由少量的支援向量決...
有關棧的面試題
輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序 假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。class solution ret...
java面試題 有關於繼承的面試題
面試題 1,方法過載和方法重寫的區別?方法過載能否改變返回值型別?方法過載是在本類內方法的定義一樣,引數型別,引數個數不同,返回值型別不同 方法重寫是指子類的方法定義和父類的方法定義相同。其引數型別,引數個數,返回值型別都必須相同 方法過載能否改變返回值型別,因為與返回值無關。2,this與supe...