閱讀314 返回首頁    go 技術社區[雲棲]


支持向量機(SVM)簡介

更多深度文章,請關注:https://yq.aliyun.com/cloud


3846ebdb5e82384313c163c1c91193016e5749be

當你正在處理文本分類問題,當你正在改進你的訓練集,也許你已經嚐試使用Naive Bayes。但是現在您對數據集分類有信心,並希望進一步了解整個數據集的特征。我想支持向量機(SVM):一種快速可靠的分類算法,可以在有限的數據量下幫你做的更好。

SVM算法背後的思想很簡單,將其應用於自然語言分類並不需要大部分複雜的東西。

在繼續之前,我們建議您首先閱讀our guide to Naive Bayes classifiersNaive Bayes分類器的解釋),因為有關文本處理的許多事情也與此相關。

SVM如何工作?

支持向量機的基礎知識及其工作原理可以通過一個簡單的例子來理解。我們假設有兩個類別:紅色和藍色,我們的數據有兩個特征xy。我們想要一個分類器,給定一對(xy坐標,如果它是紅色或藍色,則輸出。我們將我們已經標記的訓練數據繪製在坐標軸上:

d65a822db458e79370f0379d907e909d3e566d0d

支持向量機采用這些數據點並輸出最佳分類的超平麵(其在二維中隻是一條線)。這條線是決策邊界:任何落在其一側的東西,我們將分類為藍色,另外一側就是紅色。

8155456db9ab9abc0dc517cc2ba20dfc8cd72455

但是,什麼是最優的超平麵?對於SVM來說,如果訓練數據可以無誤差地被劃分,並且每一類數據超平麵距離最近的向量與超平麵之間的距離最大。超平麵決定了我們對數據分類的準確度。

e5e2944925b11b48f726e1d3450ba6298e1adb33

您可以查看此視頻教程,了解如何找到最佳超平麵。

現在這個例子很簡單,因為數據顯然是線性分離的,我們可以畫一條直線來分開紅色和藍色。可悲的是,通常情況並不簡單。看看這種情況:

3f64b07cb049b949abf0eaaf3bc950a613cccdc1

很清楚的可以看到這沒有一個線性決策邊界(一個直線分開兩個類別)。然而,這些向量非常清楚地分離,看起來好像應該很容易分開它們。

所以這裏是我們要做的:我們將添加第三維。到目前為止,我們有兩個維度:xy。我們創建一個新的維度z,我們創建它是因為它是一種方便的方式可以計算出來的:z = x2 + y2(你會注意到這是一個圓的方程式)。

這將給我們一個三維的空間。看一下這個空間,看起來像這樣:

797e3436490ebfa1d6aed2527e3f94b5966598bb

SVM可以做什麼?讓我們來看看:

abbdf0ec8130169660ef6e57388797d972828c61

請注意,由於現在我們處於三維空間,超平麵是在某一z(即z = 1)平行於x軸的平麵。

我們將其映射回二維:

6cdd7aefe2b0887a197fe19d5f7a177ddced6a84

我們的決策邊界是半徑為1的圓周。

在我們的例子中,我們找到了一種通過將我們的空間巧妙地映射到更高維度來分類非線性數據的方法。然而,事實證明,計算這種轉換可能會帶來很大的計算成本:可能有很多新的維度,每一個都可能涉及複雜的計算。為數據集中的每個向量執行此操作都可以做很多工作,所以去找到一個更便宜的解決方案就變得非常重要了。

這是一個竅門:SVM不需要實際的向量來工作,它實際上可以通過它們之間的點產品Dot product獲得。這意味著我們可以回避昂貴的計算!

想象一下我們想要的新空間:

z = x 2 + y 2

弄清楚該空間中的點產品(Dot product)是什麼樣的:

a·b = x a ·x b  + y a ·y b  + z a ·z b

a·b = x a ·x b  + y a ·y b +a 2 + y a 2·b 2 + y b 2

告訴SVM做它的事情,但要使用新的點產品 - 我們稱之為內核功能

這是內核技巧,這使我們能夠避開很多昂貴的計算。通常,內核是線性的,我們得到一個線性分類器。然而,通過使用非線性內核(如上所述),我們可以得到一個非線性分類器,且不用轉換數據,我們隻將數量積改變為我們想要的空間。

注意,內核技巧實際上不是SVM的一部分。它可以與其他線性分類器一起使用,如邏輯回歸。支持向量機隻負責找出決策邊界。

SVM如何與自然語言分類一起使用?

我們可以在多維空間中對向量進行分類。但現在我們要將這個算法應用於文本分類,首先我們需要的是將一段文本轉換為一個數字向量,以便我們可以運行SVM。換句話說,我們必須使用哪些功能才能使用SVM對文本進行分類?

最常見的答案是字頻,就像我們在Naive Bayes一樣。這意味著我們將一個文本視為一個單詞,對於這個包中出現的每個單詞,我們都能記錄它出現的頻率。

這種方法隻是為了計算每個單詞在文本中出現次數,並將其除以總字數。所以,在句子All monkeys are primates but not all primates are monkeys這個monkey2/10 = 0.2的頻率,and這個詞,但有1/10 = 0.1的頻率。

對於更高級的計算頻率的替代方案,我們也可以使用TF-IDF(逆文檔頻率)。

現在我們已經做到了,我們的數據集中每個文本都被表示為具有數千(或數萬)維度的向量,每一個都代表文本中的一個單詞的頻率。我們可以通過使用預處理技術來改善這一點,例如詞幹,刪除和使用n-gram

現在我們有特征向量,唯一需要做的就是為我們的模型選擇一個內核函數。每個問題都不同,內核功能取決於數據分布的外觀。在我們的例子中,我們的數據是以同心圓排列的,所以我們選擇了一個與這些數據分布外觀匹配的內核。

考慮到這一點,自然語言處理最好用哪一種?我們需要一個非線性分類器嗎?還是數據線性分離?事實證明,最好堅持線性內核。為什麼?

回到我們的例子中,我們有兩個特征。SVM在其他領域的一些實際用途可能會使用數十甚至數百個特征,而NLP分類器使用有成千上萬的特征。這會出現新的問題:在其他情況下使用非線性內核可能是一個好主意,有這麼多特征將最終使非線性內核過擬合數據。因此,最好隻是堅持一個好的舊線性內核,在這些情況下它往往是表現最好的。

訓練:

這些都準備好後,最後唯一要做的就是訓練!我們必須使用我們的標簽文本集,將它們轉換為使用字頻率的向量,並將它們送到算法,這將使用我們選擇的內核函數,最後它生成一個模型。然後,當我們有一個我們想要分類的新的未標記的文本時,我們將其轉換為一個向量,並將其轉換為模型,這將輸出文本的類別。

總結:

  • 支持向量機允許您對可線性分離的數據進行分類。
  • 如果它不是線性分離的,你可以使用內核技巧使其工作。
  • 然而,對於文本分類,最好隻是堅持線性內核。

與較新的算法(如神經網絡)相比,它們具有兩個主要優點:具有較高速度和更好的性能,數量有限(以千計)。這使得算法非常適合於文本分類問題,其中通常可以訪問至多幾千個標記樣本的數據集。

本文由北郵@愛可可-愛生活推薦,阿裏雲雲棲社區翻譯。
文章原標題《An introduction to Support Vector Machines (SVM)

作者:Bruno Stecanella,機器學習愛好者,譯者:袁虎,審閱:
文章為簡譯,更為詳細的內容,請查看原文


最後更新:2017-06-29 23:03:16

  上一篇:go  Naive Bayes(樸素貝葉斯)分類器的實用解釋
  下一篇:go  阿裏雲對象存儲服務OSS 學習筆記