SVM 支援向量機(一)線性SVM分類

2022-06-22 23:48:10 字數 2851 閱讀 7723

svm-支援向量機

svm(support vector machine)-支援向量機,是乙個功能非常強大的機器學習模型,可以處理線性與非線性的分類、回歸,甚至是異常檢測。它也是機器學習中非常熱門的演算法之一,特別適用於複雜的分類問題,並且資料集為小型、或中型的資料集。

這章我們會解釋svm裡的核心概念、原理以及如何使用。

線性svm分類

我們首先介紹一下svm裡最基本的原理。這裡先看一張圖:

這個是iris資料集中的部分資料,可以看到這兩個類別可以由一條直線很簡單地直接分開(也可以說它們是線性可分)。左邊的圖上畫出了3個可能的線性分類器的決策邊界,其中綠色的最差,因為它無法將兩個類別區分開來。另外兩個看起來在訓練集上表現良好,但是它們的決策邊界與資料離的太近,所以如果有新資料引入的話,模型可能不會在新資料集上表現良好。再看看右邊的圖,實線代表的是乙個svm分類器的決策邊界。這條線不僅將兩個類別區分了開來,同時它還與(離此決策邊界)最近的訓練資料條目離的足夠遠。大家可以把svm分類器看成乙個:在兩個類別之間,能有多寬就有多寬的大馬路(這大馬路就是右圖的兩條平行虛線)。這個稱為 large margin classification(大間距分類)。

可以看到的是,在資料集中新增加的訓練資料在「馬路外側」的話,則不會對決策邊界產生任何影響,決策邊界完全僅由「馬路線」(右圖虛線)上的資料決定。這些決策邊界上的資料例項稱為支援向量(support vectors),如右圖中的兩個圓。

需要注意的是,svm對特徵的取值範圍非常敏感,如下圖所示:在左邊的圖中,縱座標的取值範圍要遠大於橫座標的取值範圍,所以「最寬的馬路」非常接近水平線。在做了特徵縮放(feature scaling)後,例如使用 sk-learn的strandardscaler,決策邊界便看起來正常的多了(如下右圖)。

軟間隔分類(soft margin classification

為了避免這些情況,我們需要用乙個更靈活的模型。所以我們的目標是:在「保持街道足夠寬」與限制「間隔侵犯」(margin violations,意思是說資料條目最終在街道中間,或者甚至是在錯誤的一邊)之間找到乙個良好的平衡。這個稱為軟間隔分類(soft margin classification)。

在sk-learn svm 類中,我們可以通過c引數控制這個平衡。較小的c值會使得街道更寬,但是間隔侵犯(margin violation)會更多。下圖是兩個軟間隔svm分類器在同乙個非線性可分的資料集上的決策邊界與間隔:

在左邊的圖中,使用的是乙個較小的c值,可以看到間隔非常大,但是很多例項都在街道上。在右邊的圖中,使用的是乙個較大的c值,所以分類器作用後的間隔侵犯(margin violation)較少,但是間隔也比較小。不過從整體來看,第乙個分類器的泛化效能看起來會更好(在訓練集上的**僅有少部分**錯誤,因為雖然有margin violation,但是實際上大部分的margin violation還是在它們所屬的決策邊界那邊)。

下面是乙個示例**,載入iris 資料集,對特徵進行縮放,然後訓練乙個線性svm模型(使用linearsvc 類,指定c=1以及hinge 損失函式)用於檢測iris-virginica flowers。模型的結果就是上圖中c=1時的圖:

import

numpy as np

from sklearn import

datasets

from sklearn.pipeline import

pipeline

from sklearn.preprocessing import

standardscaler

from sklearn.svm import

linearsvc

iris =datasets.load_iris()

x = iris['

data

'][:, (2,3)] #

petal length, petal width

y = (iris['

target

'] == 2).astype(np.float64) #

iris-virginica

svm_clf =pipeline([

("scaler

", standardscaler()),

("linear_svc

", linearsvc(c=1, loss="

hinge

")),

])svm_clf.fit(x, y)

然後使用訓練好的模型做**:

svm_clf.predict([[5.5, 1.7]])

>array([1.])

linearsvc類會對偏置項(bias term)正則,所以我們應該先通過減去訓練集的平均數,讓訓練集集居中。如果使用了standardscaler處理資料,則這個會自動完成。另一方面,必須要確保設定loss的超引數為hinge,因為它不是預設的值。最後,為了效能更好,我們應該設定dual超引數為false,除非資料集中的特徵數比訓練資料條目還要多。

支援向量機 線性分類SVM

模型原型 sklearn.svm.linearsvc penalty l2 loss squared hinge dual true,tol 0.0001,c 1.0,multi class ovr fit intercept true,intercept scaling 1,class weigh...

支援向量機SVM(一)

支援向量機,因其英文名為support vector machine,故一般簡稱svm,是90年代中期發展起來的基於統計學習理論的一種機器學習方法,它是一種二類分類模型,其基本模型定義為特徵空間上的間隔較大的線性分類器,其學習策略便是間隔較大化,最終可轉化為乙個凸二次規劃問題的求解,從而達到在統計樣...

支援向量機(SVM)

簡介 術語 支援向量機 svm 是乙個類分類器,正式的定義是乙個能夠將不同類樣本在樣本空間分隔的超平面。換句話說,給定一些標記 label 好的訓練樣本 監督式學習 svm演算法輸出乙個最優化的分隔超平面。首先我們假定有乙個未知的欲分類的集合,可以進行分割,但是我們不知道分割的函式 超平面,也叫真實...