日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SVM熟练到精通3:核函数与非线性分类

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SVM熟练到精通3:核函数与非线性分类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章引自pluskid于2010年發表于“Machine Learning”板塊,本文僅做編輯。

1.回顧

前面我們介紹了線性情況下的支持向量機,它通過尋找一個線性的超平面來達到對數據進行分類的目的。不過,由于是線性方法,所以對非線性的數據就沒有辦法處理了。例如圖中的兩類數據,分別分布為兩個圓圈的形狀,不論是任何高級的分類器,只要它是線性的,就沒法處理,SVM 也不行。因為這樣的數據本身就是線性不可分的。

2.非線性映射與核函數

對于這個數據集,我可以悄悄透露一下:生成它的時候就是用兩個半徑不同的圓圈加上了少量的噪音得到的,所以,一個理想的分界應該是一個“圓圈”而不是一條線(超平面)。如果用?X1?和?X2?來表示這個二維平面的兩個坐標的話,我們知道一條二次曲線(圓圈是二次曲線的一種特殊情況)的方程可以寫作這樣的形式:

?

a1X1+a2X21+a3X2+a4X22+a5X1X2+a6=0

?

注意上面的形式,如果我們構造另外一個五維的空間,其中五個坐標的值分別為?Z1=X1,?Z2=X21,?Z3=X2,?Z4=X22,?Z5=X1X2,那么顯然,上面的方程在新的坐標系下可以寫作:

?

∑i=15aiZi+a6=0

?

關于新的坐標?Z?,這正是一個 hyper plane 的方程!也就是說,如果我們做一個映射??:R2→R5?,將?X?按照上面的規則映射為?Z?,那么在新的空間中原來的數據將變成線性可分的,從而使用之前我們推導的線性分類算法就可以進行處理了。這正是 Kernel 方法處理非線性問題的基本思想。

再進一步描述 Kernel 的細節之前,不妨再來看看這個例子映射過后的直觀例子。當然,我沒有辦法把 5 維空間畫出來,不過由于我這里生成數據的時候就是用了特殊的情形,具體來說,我這里的超平面實際的方程是這個樣子(圓心在?X2?軸上的一個正圓):

?

a1X21+a2(X2?c)2+a3=0 因此我只需要把它映射到?Z1=X21,?Z2=X22,?Z3=X2?這樣一個三維空間中即可,上圖(這是一個 gif 動畫)即是映射之后的結果,將坐標軸經過適當的旋轉,就可以很明顯地看出,數據是可以通過一個平面來分開的。 現在讓我們再回到 SVM 的情形,假設原始的數據時非線性的,我們通過一個映射??(?)?將其映射到一個高維空間中,數據變得線性可分了,這個時候,我們就可以使用原來的推導來進行計算,只是所有的推導現在是在新的空間,而不是原始空間中進行。當然,推導過程也并不是可以簡單地直接類比的,例如,原本我們要求超平面的法向量?w?,但是如果映射之后得到的新空間的維度是無窮維的(確實會出現這樣的情況,比如后面會提到的 Gaussian Kernel ),要表示一個無窮維的向量描述起來就比較麻煩。于是我們不妨先忽略過這些細節,直接從最終的結論來分析,回憶一下,我們上一次得到的最終的分類函數是這樣的:

?

f(x)=∑i=1nαiyi?xi,x?+b 現在則是在映射過后的空間,即:

?

f(x)=∑i=1nαiyi??(xi),?(x)?+b 而其中的?α也是通過求解如下 dual 問題而得到的:

?

?

maxαs.t.,∑i=1nαi–12∑i,j=1nαiαjyiyj??(xi),?(xj)?αi≥0,i=1,…,n∑i=1nαiyi=0

?

這樣一來問題就解決了嗎?似乎是的:拿到非線性數據,就找一個映射??(?)?,然后一股腦把原來的數據映射到新空間中,再做線性 SVM 即可。不過若真是這么簡單,我這篇文章的標題也就白寫了——說了這么多,其實還沒到正題吶!其實剛才的方法稍想一下就會發現有問題:在最初的例子里,我們對一個二維空間做映射,選擇的新空間是原始空間的所有一階和二階的組合,得到了五個維度;如果原始空間是三維,那么我們會得到 19 維的新空間(驗算一下?),這個數目是呈爆炸性增長的,這給??(?)?的計算帶來了非常大的困難,而且如果遇到無窮維的情況,就根本無從計算了。所以就需要 Kernel 出馬了。

不妨還是從最開始的簡單例子出發,設兩個向量?x1=(η1,η2)T?和?x2=(ξ1,ξ2)T?,而??(?)?即是到前面說的五維空間的映射,因此映射過后的內積為:

?

??(x1),?(x2)?=η1ξ1+η21ξ21+η2ξ2+η22ξ22+η1η2ξ1ξ2 另外,我們又注意到:

?

(?x1,x2+1)2=2η1ξ1+η21ξ21+2η2ξ2+η22ξ22+2η1η2ξ1ξ2+1

?

二者有很多相似的地方,實際上,我們只要把某幾個維度線性縮放一下,然后再加上一個常數維度,具體來說,上面這個式子的計算結果實際上和映射

?

φ(X1,X2)=(2√X1,X21,2√X2,X22,2√X1X2,1)T

?

之后的內積??φ(x1),φ(x2)??的結果是相等的區別在于什么地方呢?一個是映射到高維空間中,然后再根據內積的公式進行計算;而另一個則直接在原來的低維空間中進行計算,而不需要顯式地寫出映射后的結果。回憶剛才提到的映射的維度爆炸,在前一種方法已經無法計算的情況下,后一種方法卻依舊能從容處理,甚至是無窮維度的情況也沒有問題。

我們把這里的計算兩個向量在映射過后的空間中的內積的函數叫做核函數 (Kernel Function),例如,在剛才的例子中,我們的核函數為:

?

κ(x1,x2)=(?x1,x2?+1)2

核函數能簡化映射空間中的內積運算——剛好“碰巧”的是,在我們的 SVM 里需要計算的地方數據向量總是以內積的形式出現的。對比剛才我們寫出來的式子,現在我們的分類函數為:

?

∑i=1nαiyiκ(xi,x)+b

?

其中?α?由如下 dual 問題計算而得:

?

maxαs.t.,∑i=1nαi–12∑i,j=1nαiαjyiyjκ(xi,xj)αi≥0,i=1,…,n∑i=1nαiyi=0 這樣一來計算的問題就算解決了,避開了直接在高維空間中進行計算,而結果卻是等價的,實在是一件非常美妙的事情!當然,因為我們這里的例子非常簡單,所以我可以手工構造出對應于?φ(?)?的核函數出來,如果對于任意一個映射,想要構造出對應的核函數就很困難了

3.關于非線性映射與核函數

最理想的情況下,我們希望知道數據的具體形狀和分布,從而得到一個剛好可以將數據映射成線性可分的??(?)?,然后通過這個??(?)?得出對應的?κ(?,?)?進行內積計算。然而,第二步通常是非常困難甚至完全沒法做的。不過,由于第一步也是幾乎無法做到,因為對于任意的數據分析其形狀找到合適的映射本身就不是什么容易的事情,所以,人們通常都是“胡亂”選擇映射的,所以,根本沒有必要精確地找出對應于映射的那個核函數,而只需要“胡亂”選擇一個核函數即可——我們知道它對應了某個映射,雖然我們不知道這個映射具體是什么。由于我們的計算只需要核函數即可,所以我們也并不關心也沒有必要求出所對應的映射的具體形式。?

當然,說是“胡亂”選擇,其實是夸張的說法,因為并不是任意的二元函數都可以作為核函數,所以除非某些特殊的應用中可能會構造一些特殊的核(例如用于文本分析的文本核,注意其實使用了 Kernel 進行計算之后,其實完全可以去掉原始空間是一個向量空間的假設了,只要核函數支持,原始數據可以是任意的“對象”——比如文本字符串),通常人們會從一些常用的核函數中選擇(根據問題和數據的不同,選擇不同的參數,實際上就是得到了不同的核函數),例如:

?

  • 多項式核?κ(x1,x2)=(?x1,x2+R)d?,顯然剛才我們舉的例子是這里多項式核的一個特例(R=1,d=2)。雖然比較麻煩,而且沒有必要,不過這個核所對應的映射實際上是可以寫出來的,該空間的維度是?(m+dd)?,其中?m?是原始空間的維度。

?

  • 高斯核?κ(x1,x2)=exp(?∥x1?x2∥22σ2)?,這個核就是最開始提到過的會將原始空間映射為無窮維空間的那個家伙。不過,如果?σ?選得很大的話,高次特征上的權重實際上衰減得非常快,所以實際上(數值上近似一下)相當于一個低維的子空間;反過來,如果?σ?選得很小,則可以將任意的數據映射為線性可分——當然,這并不一定是好事,因為隨之而來的可能是非常嚴重的過擬合問題。不過,總的來說,通過調控參數σ?,高斯核實際上具有相當高的靈活性,也是使用最廣泛的核函數之一。
  • 線性核?κ(x1,x2)=?x1,x2??,這實際上就是原始空間中的內積。這個核存在的主要目的是使得“映射后空間中的問題”和“映射前空間中的問題”兩者在形式上統一起來了。

4.小結

對于非線性的情況,SVM 的處理方法是選擇一個核函數?κ(?,?)?,通過將數據映射到高維空間,來解決在原始空間中線性不可分的問題。由于核函數的優良品質,這樣的非線性擴展在計算量上并沒有比原來復雜多少,這一點是非常難得的。當然,這要歸功于核方法——除了 SVM 之外,任何將計算表示為數據點的內積的方法,都可以使用核方法進行非線性擴展。

此外,略微提一下,也有不少工作試圖自動構造專門針對特定數據的分布結構的核函數,感興趣的同學可以參考,比如 NIPS 2003 的 Cluster Kernels for Semi-Supervised Learning 和 ICML 2005 的 Beyond the point cloud: from transductive to semi-supervised learning 等。

總結

以上是生活随笔為你收集整理的SVM熟练到精通3:核函数与非线性分类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。