6.3 支持向量機算法(下)

  1. SVM算法特性:
    這裏寫圖片描述
    1.1 訓練好的模型的算法複雜度是由支持向量的個數決定的,而不是由數據的維度決定的。所以SVM不太容易產生overfitting
    1.2 SVM訓練出來的模型完全依賴於支持向量(Support Vectors), 即使訓練集裏面所有非支持向量的點都被去除,重複訓練過程,結果仍然會得到完全一樣的模型。
    1.3 一個SVM如果訓練得出的支持向量個數比較小,SVM訓練出的模型比較容易被泛化。

  2. 線性不可分的情況 (linearly inseparable case)
    這裏寫圖片描述

    2.1 數據集在空間中對應的向量不可被一個超平面區分開

    2.2 兩個步驟來解決:
    2.2.1 利用一個非線性的映射把原數據集中的向量點轉化到一個更高維度的空間中
    2.2.2 在這個高維度的空間中找一個線性的超平面來根據線性可分的情況處理
    這裏寫圖片描述

    這裏寫圖片描述

    這裏寫圖片描述

      2.2.3 視覺化演示 https://www.youtube.com/watch?v=3liCbRZPrZA
    

    2.3 如何利用非線性映射把原始數據轉化到高維中?
    2.3.1 例子:
    3維輸入向量:這裏寫圖片描述
    轉化到6維空間 Z 中去: 這裏寫圖片描述
    這裏寫圖片描述

    新的決策超平面:這裏寫圖片描述 其中W和Z是向量,這個超平面是線性的
    解出W和b之後,並且帶入回原方程:
    這裏寫圖片描述

      2.3.2 思考問題:
                2.3.2.1: 如何選擇合理的非線性轉化把數據轉到高緯度中?
                2.3.2.2: 如何解決計算內積時算法複雜度非常高的問題?
    
      2.3.3 使用核方法(kernel trick)
    
  3. 核方法(kernel trick)
    3.1 動機
    在線性SVM中轉化爲最優化問題時求解的公式計算都是以內積(dot product)的形式出現的
    這裏寫圖片描述,其中 這裏寫圖片描述是把訓練集中的向量點轉化到高維的非線性映射函數,因爲內積的算法複雜
    度非常大,所以我們利用核函數來取代計算非線性映射函數的內積

    3.1 以下核函數和非線性映射函數的內積等同
    這裏寫圖片描述

    3.2 常用的核函數(kernel functions)

      h度多項式核函數(polynomial kernel of degree h): 
    

    這裏寫圖片描述
    高斯徑向基核函數(Gaussian radial basis function kernel):
    這裏寫圖片描述
    S型核函數(Sigmoid function kernel):
    這裏寫圖片描述

      如何選擇使用哪個kernel?
      根據先驗知識,比如圖像分類,通常使用RBF,文字不使用RBF
      嘗試不同的kernel,根據結果準確度而定
    

    3.3 核函數舉例:
    假設定義兩個向量: x = (x1, x2, x3); y = (y1, y2, y3)
    定義方程:f(x) = (x1x1, x1x2, x1x3, x2x1, x2x2, x2x3, x3x1, x3x2, x3x3)

        K(x, y ) = (<x, y>)^2
    
        假設x = (1, 2, 3); y = (4, 5, 6). 
    
        f(x) = (1, 2, 3, 2, 4, 6, 3, 6, 9)
        f(y) = (16, 20, 24, 20, 25, 36, 24, 30, 36)
        <f(x), f(y)> = 16 + 40 + 72 + 40 + 100+ 180 + 72 + 180 + 324 = 1024
    
    
       K(x, y) = (4  + 10 + 18 ) ^2 = 32^2 = 1024
    
       同樣的結果,使用kernel方法計算容易很多
    
  4. SVM擴展可解決多個類別分類問題
    對於每個類,有一個當前類和其他類的二類分類器(one-vs-rest)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章