Home >> Blog >> 支持向量機support vector machines SVM 算法解釋

支持向量機support vector machines SVM 算法解釋

所以你正在處理一個文字分類問題。您正在完善您的訓練數據,甚至可能已經嘗試過Naive Bayes。您對自己的數據集充滿信心,並希望更進一步。

輸入支持向量機 (SVM),這是一種快速可靠的分類算法,在需要分析的數據量有限的情況下表現非常出色。

也許你已經深入挖掘了,遇到了諸如線性可分、核技巧和核函數之類的術語。但不要害怕!SVM 算法背後的想法很簡單,將其應用於NLP不需要大多數複雜的東西。

在本指南中,您將了解 SVM 的基礎知識,以及如何幫助您的SEO專案並將其用於文字分類。最後,您將看到開始使用像MonkeyLearn這樣的無程式碼工具是多麼容易。

什麼是支持向量機?

支持向量機 (SVM) 是一種有監督的機器學習模型,它使用分類算法來解決兩組分類問題。在為每個類別提供一組帶標籤的訓練數據的 SVM 模型後,他們能夠對新文字進行分類。

與神經網絡等較新的算法相比,它們具有兩個主要優點:速度更快,並且在樣本數量有限(數千個)的情況下性能更好。這使得該算法非常適合文字分類問題,在這些問題中,通常可以訪問最多包含數千個標記樣本的數據集。

SVM 是如何工作的?

支持向量機的基礎知識及其工作原理最好通過一個簡單的示例來理解。假設我們有兩個標籤:紅色和藍色,我們的數據有兩個特徵:x和y。我們想要一個分類器,給定一對(x,y)坐標,輸出它是紅色還是藍色。我們在平面上繪製我們已經標記的訓練數據:

支持向量機 (SVM) 算法解釋

支持向量機獲取這些數據點並輸出最能分離標籤的超平面(在二維中它只是一條線)。這條線是決策邊界:任何落在它一側的東西我們將歸類為藍色,而任何落在另一邊的東西都歸類為紅色。

支持向量機 (SVM) 算法解釋

但是,最好的超平面到底是什麼?對於 SVM,它是最大化兩個標籤的邊距的一種。換句話說:超平面(記住它在這種情況下是一條線)到每個標籤的最近元素的距離是最大的。

支持向量機 (SVM) 算法解釋

非線性數據

現在這個例子很簡單,因為很明顯數據是線性可分的——我們可以畫一條直線來分隔red和blue。可悲的是,通常事情並不那麼簡單。看看這個案例:

支持向量機 (SVM) 算法解釋

很明顯,沒有線性決策邊界(一條分隔兩個標籤的直線)。然而,這些向量被非常清楚地分離出來,看起來應該很容易將它們分開。

所以這就是我們要做的:我們將添加第三個維度。到目前為止,我們有兩個維度:x和y。我們創建了一個新的z維度,並規定以某種方便的方式計算它:z = x² + y²(你會注意到這是一個圓的方程)。

這將給我們一個三維空間。佔用該空間的一部分,它看起來像這樣:

支持向量機 (SVM) 算法解釋

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

支持向量機 (SVM) 算法解釋

那太棒了!請注意,由於我們現在處於三個維度中,因此超平面是在某個z處平行於x軸的平面(假設z = 1)。

剩下的是將其映射回二維:

支持向量機 (SVM) 算法解釋

我們去吧!我們的決策邊界是半徑為 1 的圓周,它使用 SVM 將兩個標籤分開。查看此 3d 可視化以查看相同效果的另一個示例:

內核技巧

在我們的示例中,我們找到了一種通過巧妙地將空間映射到更高維度來對非線性數據進行分類的方法。然而,事實證明,計算這種轉換的計算成本非常高:可能有很多新維度,每個維度都可能涉及復雜的計算。對數據集中的每個向量執行此操作可能需要大量工作,因此如果我們能找到更便宜的解決方案,那就太好了。

我們很幸運!這裡有一個技巧:SVM 不需要實際的向量來發揮它的魔力,它實際上只能通過它們之間的點積來解決。這意味著我們可以避開新維度的昂貴計算。

這就是我們所做的:

  • 想像一下我們想要的新空間:
    z = x² + y²
  • 弄清楚該空間中的點積是什麼樣的:
    a · b = xa · xb + ya · yb + za · zb
    告訴 SVM 做它的事情,但是使用新的點積——我們稱之為核函數。

而已!這就是內核技巧,它使我們能夠迴避許多昂貴的計算。通常,內核是線性的,我們得到一個線性分類器。然而,通過使用非線性內核(如上),我們可以得到一個非線性分類器,而根本不需要轉換數據:我們只需將點積更改為我們想要的空間的點積,SVM 就會很高興地繼續前進。

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

將 SVM 與自然語言分類結合使用

因此,我們可以在多維空間中對向量進行分類。偉大的!現在,我們想將此算法應用於文字分類,我們需要的第一件事是將一段文字轉換為數字向量,以便我們可以使用它們運行 SVM。換句話說,我們必須使用哪些特徵才能使用 SVM 對文字進行分類?

最常見的答案是詞頻,就像我們在 Naive Bayes 中所做的那樣。這意味著我們將文字視為一個單詞包,並且對於該包中出現的每個單詞,我們都有一個特徵。該特徵的價值將是該詞在文字中出現的頻率。

這種方法歸結為僅計算每個單詞在文字中出現的次數,然後將其除以單詞總數。所以在句子“All monkeys are primates but not all primates are monkeys”中, monkeys一詞的頻率為 2/10 = 0.2,but一詞的頻率為 1/10 = 0.1。

對於計算頻率的更高級的替代方法,我們還可以使用TF-IDF。

既然我們已經這樣做了,我們數據集中的每個文字都表示為一個具有數千(或數万)維的向量,每個維都代表文字中某個單詞的頻率。完美的!這就是我們提供給 SVM 進行訓練的內容。我們可以通過使用預處理技術來改進這一點,例如詞幹提取、刪除停用詞和使用 n-gram。

選擇核函數

現在我們有了特徵向量,剩下要做的就是為我們的模型選擇一個核函數。每個問題都是不同的,核函數取決於數據的樣子。在我們的示例中,我們的數據以同心圓排列,因此我們選擇了與這些數據點匹配的內核。

考慮到這一點,什麼最適合自然語言處理?我們需要非線性分類器嗎?或者數據是線性可分的?事實證明,最好堅持使用線性內核。為什麼?

回到我們的示例中,我們有兩個功能。SVM 在其他領域的一些實際使用可能會用到數十甚至數百個特徵。同時,NLP 分類器使用數千個特徵,因為訓練數據中出現的每個單詞最多可以有一個特徵。這稍微改變了問題:雖然在其他情況下使用非線性內核可能是一個好主意,但擁有這麼多特徵最終會使非線性內核過度擬合數據。因此,最好只堅持使用良好的舊線性內核,這實際上會在這些情況下產生最佳性能。

把它們放在一起

現在唯一要做的就是訓練!我們必須獲取我們的標記文字集,使用詞頻將它們轉換為向量,並將它們提供給算法——該算法將使用我們選擇的核函數——因此它產生了一個模型。然後,當我們有一個新的未標記文字要分類時,我們將其轉換為向量並將其提供給模型,模型將輸出文字的標籤。

簡單的 SVM 分類器教學

要創建自己的 SVM 分類器,而無需涉足向量、內核和 TF-IDF,您可以使用MonkeyLearn 的預構建分類模型之一立即開始。由於該平台超級直觀的用戶界面和無程式碼方法,您也可以輕鬆創建自己的方式。

對於那些不想投入大量資金聘請機器學習專家的人來說,這也很棒。

讓我們通過 8 個簡單的步驟向您展示創建 SVM 分類器是多麼容易。在開始之前,您需要免費註冊 MonkeyLearn

1.新建分類器

轉到使用介面,單擊“創建模型”並選擇“分類器”。

支持向量機 (SVM) 算法解釋

2. 選擇您希望如何對數據進行分類

我們將選擇“主題分類”模型來根據主題、方面或相關性對文字進行分類。

支持向量機 (SVM) 算法解釋

3. 導入您的訓練數據

選擇並上傳您將用於訓練模型的數據。請記住,當您提供更多訓練數據時,分類器會學習並變得更智能。您可以從 CSV 或 Excel 文件中導入數據。

支持向量機 (SVM) 算法解釋

4. 定義 SVM 分類器的標籤

是時候定義您的標籤了,您將使用它來訓練您的主題分類器。添加至少兩個標籤以開始使用 - 您以後可以隨時添加更多標籤。

支持向量機 (SVM) 算法解釋

5. 標記數據以訓練您的分類器

通過為每個示例選擇標籤開始訓練您的主題分類器:

支持向量機 (SVM) 算法解釋

在手動標記一些示例後,分類器將開始自行進行預測。如果您希望您的模型更準確,則必須標記更多示例以繼續訓練您的模型。

您標記的數據越多,您的模型就會越智能

6. 將你的算法設置為 SVM

轉到設置並確保在高級部分中選擇 SVM 算法。

支持向量機 (SVM) 算法解釋

7. 測試你的分類器

現在您可以通過單擊“運行”>“演示”來測試您的 SVM 分類器。編寫您自己的文字,看看您的模型如何對新數據進行分類:

支持向量機 (SVM) 算法解釋

8.集成主題分類器

您已訓練模型在對文字進行分類時做出準確的預測。現在是上傳新數據的時候了!使用 MonkeyLearn 可以通過三種不同的方式執行此操作:

  1. 批處理:轉到“運行”>“批處理”並上傳 CSV 或 Excel 文件。分類器將分析您的數據並向您發送一個包含預測的新文件。
  2. API:使用MonkeyLearn API對來自任何地方的新數據進行分類。
  3. 集成:連接日常應用程序以自動將新文字數據導入您的分類器。無需鍵入任何程式碼即可使用Google Sheets、Zapier和Zendesk等集成:

最後的話

這就是支持向量機的基礎知識!

總結一下:

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

使用MonkeyLearn等MLaaS工具,可以非常簡單地實施 SVM 進行文字分類並立即獲得洞察力。

Source from MonkeyLearn