說說SVM的基礎知識 1

2022-01-31 13:03:14 字數 2906 閱讀 4751

1. 導言

在機器學習和模式識別領域,svm絕對是除了boosting之外的又一項重大突破,在一般的應用中,我們都用libsvm這樣已經成熟的庫,但是對於內部機理和一些基礎知識我們可能很多時候並不清楚,那麼我們就把一些基礎的知識一點點說清。

2. 關於維度

首先,我們來說下維度。

維度這個概念我們都並不陌生,維度在數學中也稱作維數,代表的是引數的數目。我們說零維是點,一維是線,二維是面,三維是立體。

我們跳出數學的視角,而上公升到哲學的角度,我們說維度其實代表的是我們看一件事物的視角,每個視角都有著乙個對應的描述,於是我們將這個描述數位化,並且將這些視角的描述綜合起來,放到一起,我們將之成為多維向量。例如說,我們審視乙個長方體,需要看他的長度,高度,寬度,重量,那麼我們用多維向量來描述這個長方體便可能是 < 1,1,2,4 >,這裡面我們引入了4個維度,我們把它叫做四維向量。

在資料探勘領域,我們經常會碰到多維的概念,例如我們把乙個電影條目看做乙個事物,而把不同使用者對他的評價作為該電影的不同維度,那麼這個電影可能會有著幾萬,甚至幾十萬維的維度。那麼我舉乙個實際的業務場景,在很多**都有著喜歡這個商品的使用者也喜歡,那麼在這裡,我們把它轉換成 喜歡這個電影的人也喜歡,最簡單的方法就是最乙個簡單的cosine - similarity:

這裡我們要理解乙個常識性的概念,叫做維度災難。維度災難通常都被用作是不要處理高維資料的最好藉口。維度災難通常是指在高維空間中,所有的資料都很稀疏,於是導致在相似度度量上,距離計算上都會出現很大的偏差,因為平時我們採用的演算法也都會變得很低效。

那麼我們針對上面的問題,我們需要對資料做乙個降維處理。

3. pca和svd

pca,也稱主成份分析,是一種非常常見的降維演算法。簡單來說,pca是一種將高維的資料對映到較低維度的一種方法。

換做數學化的定義來說,就是通過乙個正交化的線性變換,把原有的資料變換到乙個新的座標系統中,使這些資料的最大方差維度落在第一座標上,稱之為第一主成份。接下來是第二主成份,等等。

這是一張最經典的pca的圖,這裡我們並不具體談實現的演算法。

svd幾乎是降維領域最常使用的技術了,我們通過將乙個矩陣拆分成三個小矩陣相乘的形式:

從而得到降維之後的結果。

那麼接下來,我們則可以利用item 在不同維度上的投影來繼續利用cosine similarity或者其他的相似度度量方式來計算兩部電影的相似度了。

4.  公升維

既然我們之前介紹了維度災難,也介紹了很多pca和svd兩種降維的技術,那為什麼這裡又要討論公升維呢?

在很多的情況下,線性的分類器無法達到讓我們滿意的效果,那麼我們通常會採用兩種方案:

a. 結合多個線性分類器來組合成乙個非線性的分類器,例如boosting方法,就是這種思想的體現。

b. 首先對資料做乙個非線性的變換,將x對映到乙個不同的空間。典型的方法就是svm。

這裡我們看乙個例子:

例如我們現在有這樣的一組資料,空心和實心分別代表兩類資料,我們現在需要對這組資料來做分類。很明顯,這組資料不是線性可分的。那麼我們試想將這組二維資料上的平面投射到三維,甚至更高維的空間上時,我們則可以利用乙個「超平面」將之分開:

這裡的紅色線和黑色線分別代表資料的兩類,這是乙個一維的資料,這是乙個非線性可分的,然後我們公升為了二維,就變成了乙個類似於拋物線的結構,這裡你可以理解把這個直線做了彎曲,那麼這個時候就成了線性可分的,這個例子就相當於我們把資料從一維公升到了二維。

我們來換個角度思考,如果給你一堆物品,人腦是如何對這些物品進行分類,依然是找出這些物品的一些特徵,例如:顏色,形狀,大小,觸感等等,然後根據這些特徵對物品做以歸類,這其實就是乙個先公升維,後劃分的過程。

5 . kernal method

上一節我們說到在svm中,需要對資料做乙個公升維的處理,這正是kernel method處理非線性的問題的整體思想。

那麼首先我們就先定義乙個對映 φ(x) 表示從低維對映到高維,然後在這個空間內通過線性的分類器對其分類。通過repesenter theorem可以證明,做了轉換之後,在訓練和測試分類器的時候,進行的仍然是兩個點之間的點積運算。我們可以將之表達成:

實在懶著打一堆公式了,還是手寫把……...

這裡只做兩點解釋:

a. 很多覺得在最初的時候我已經得到了乙個f(x) = wφ(x) 的表示式,那麼我們就可以直接去優化求w,為什麼還要費盡心思去優化到最後的一步呢? 這個問題就在於,如果我們定義乙個很簡單的核函式,我們可以解出phi。但是假設我們定乙個高斯核,那麼這個時候解出的是乙個無窮多維,無論是從效率上還是從表示上,我們都沒有辦法來針對φ(x)來做專門的計算。

b. 在svm中,每個kernel method都對應著乙個變換,那麼並不是說我們把資料根據phi函式去投射到乙個新的空間上,資料就線性可分了,或者說採用這樣的phi函式就會獲得較好的效果和效能。那麼如何採用核函式,只能利用實驗來驗證,但是傳統上,一般來說採用高斯核有著較好的效果。

那麼接下來,就把事情演變成了如何來構造核函式的問題,這個就在下篇文章中再來說把。

基礎知識1

puts hello world if false class person count 0 def initialize name age 18 name name age age motherland china enddef talk print name name n puts age ag...

基礎知識1

1 static 在c c 中的作用 對變數 a 靜態區域,初始化為0 b 在程式剛開始執行時就完成出初始化,也是唯一一次初始化。控制變數的可見範圍。保持變數內容持久。對變數 函式 主要 這是與全域性變數的差別,隱藏 不同檔案中,使用相同函式名,不會發生衝突 例如,a檔案中函式名加了static,則...

1 基礎知識

osi各層所使用的協議 應用層 telnet ftp http dns smtp pop3 傳輸層 tcp udp tcp 面向連線的可靠的傳輸協議。udp 是無連線的,不可靠的傳輸協議。網路層 ip icmp igmp 埠埠使用乙個16位的數字來表示,它的範圍是0 65535,1024以下的埠號保...