機器學習:支持向量機(SVM)

機器學習:支持向量機(SVM)

支持向量機是一種可用於分類和迴歸的監督機器學習算法。SVM更常用於分類問題,因此,這就是我們在本文中關注的內容。

在該算法中,我們將每個數據項繪製為n維空間中的一個點(其中n是您擁有的特性的數量),每個特性的值是一個特定座標的值。然後,我們通過尋找最優超平面來進行分類,從而很好地區分這兩個類。

超平面是一維數據的點,二維數據的線,三維數據的平面等。

最佳超平面

機器學習:支持向量機(SVM)

在圖中,顯然存在兩個類。一個類用藍色圓圈表示,另一個類用紅色方塊表示。現在我們必須找到一條線,將這兩個類分開。正如你看到的,有很多行分離了這兩個類,那麼在這種情況下,最優的線是什麼?

如果線過得太靠近點,就會很糟糕,因為它會對噪聲敏感,而且不會正確地泛化。因此,我們的目標應該是找到從所有點儘可能遠的經過的直線。

機器學習:支持向量機(SVM)

支持向量機算法的操作是基於尋找給訓練樣本最大最小距離的超平面。在支持向量機的理論中,這個距離兩次接收到重要的邊界名。因此,最佳分離超平面最大化了訓練數據的邊際。

現在尋找最優超平面的任務在上面的例子中很簡單,因為數據點是線性可分離的。但是如果數據點不是線性可分的呢?在這種情況下,我們如何找到最優超平面。

如果DATAPOINTS不是線性可分的?

機器學習:支持向量機(SVM)

考慮下面的情況,我們的目標是找到一個超平面,將兩個類分開。正如你所看到的那樣,不存在可以分隔兩個類的一條線。SVM可以解決這個問題。我們可以引入一個新的特徵z =x²+y²並繪製z特徵。

機器學習:支持向量機(SVM)

在SVM中,在這兩個類之間很容易有一個線性超平面。但是,另一個亟待解決的問題是,我們是否需要手動添加這個特性才能擁有一個超平面。SVM有一種叫做kernel trick的技術。這些函數取低維輸入空間並將其轉化為高維空間,即將不可分離問題轉化為可分離問題,這些函數稱為kernels。它在非線性分離問題中最有用。

KERNELS

SVM算法是在實踐中使用kernel實現的。在線性支持向量機中,超平面的學習是通過使用一些線性代數來轉換問題來完成的。

SVM KERNELS示例

多項式內核

它在圖像處理中很受歡迎。

等式是:

機器學習:支持向量機(SVM)

其中d是多項式的次數。

高斯內核

它是通用的內核;當對數據沒有預先了解時使用。方程是:

機器學習:支持向量機(SVM)

拉普拉斯RBF內核

它是通用內核; 在沒有關於數據的先驗知識時使用。

等式是:

機器學習:支持向量機(SVM)

SVM的TUNNING參數

SVM可以使用sklearn在python中實現

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

我正在採取的參數是: -

  • Kernel:我們有各種可用的內核選項,如' linear ', ' rbf ', ' poly '等。這裡的“rbf”和“poly”用於非線性超平面。
  • Gamma:“rbf”、“poly”和“sigmoid”的核係數。當伽馬值越高時,則會嘗試根據訓練數據集擬合,即泛化誤差,導致過擬合問題。
  • C:誤差項的懲罰參數C。它還控制了平滑決策邊界和正確分類訓練點之間的權衡。

與SVM相關的優點和缺點

優點:

  • 它工作得很好,分離的邊界很清晰
  • 它在高維空間中很有效。
  • 它在維數大於樣本數的情況下有效。
  • 它使用決策函數中的一個訓練點子集(稱為支持向量),因此它也具有內存效率。

缺點:

  • 如果我們有大量數據,因為所需的訓練時間較長,它表現不佳
  • 當數據集有更多的噪音即目標類重疊時,它也表現不佳
  • 支持向量機不直接提供概率估計,這些是使用昂貴的五倍交叉驗證來計算的。它與Python scikit-learn庫的SVC方法有關。


分享到:


相關文章: