天天看點

“學”、“習”二合一:監督學習——支援向量機(SVM)入門

“學”、“習”二合一:監督學習——支援向量機(SVM)入門

當你正在處理文本分類問題,當你正在改進你的訓練集,也許你已經嘗試使用naive bayes。但是現在你對資料集分類有信心,并希望進一步了解整個資料集的特征。我想支援向量機(svm):一種快速可靠的分類算法,可以在有限的資料量下幫你做的更好。

svm算法背後的思想很簡單,将其應用于自然語言分類并不需要大部分複雜的東西。

<b>svm</b><b>如何工作?</b>

“學”、“習”二合一:監督學習——支援向量機(SVM)入門

支援向量機采用這些資料點并輸出最佳分類的超平面(其在二維中隻是一條線)。這條線是<b>決策邊界</b>:任何落在其一側的東西,我們将分類為藍色,另外一側就是紅色。

“學”、“習”二合一:監督學習——支援向量機(SVM)入門

但是,什麼是最優的超平面?對于svm來說,如果訓練資料可以無誤差地被劃分,并且每一類資料中距離超平面最近點和超平面之間的距離最大。超平面決定了我們對資料分類的準确度。

“學”、“習”二合一:監督學習——支援向量機(SVM)入門

<b>非線性資料</b>

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

“學”、“習”二合一:監督學習——支援向量機(SVM)入門

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

是以這裡是我們要做的:我們将添加第三維。到目前為止,我們有兩個次元:x和y。我們建立一個新的次元z,我們建立它是因為它是一種友善的方式可以計算出來的:z = x2 + y2(你會注意到這是一個圓的方程式)。

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

“學”、“習”二合一:監督學習——支援向量機(SVM)入門

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

“學”、“習”二合一:監督學習——支援向量機(SVM)入門

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

我們将其映射回二維:

“學”、“習”二合一:監督學習——支援向量機(SVM)入門

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

<b>核技巧</b>

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

這是一個竅門:svm不需要實際的向量來工作,它實際上可以通過它們之間的點積(dot product)獲得。這意味着我們可以回避昂貴的計算!

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

z = x 2 + y 2

弄清楚該空間中的點積(dot product)是什麼樣的:

a·b = xa·xb+ ya·yb+ za·zb

a·b = xa·xb+ ya·yb+(xa2 + ya2)·(xb2 + yb2)

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

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

<b>svm</b><b>如何與自然語言分類一起使用?</b>

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

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

<b>選擇一個核函數</b>

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

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

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

<b>訓練</b><b>:</b>

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

<b>總結:</b>

支援向量機允許您對可線性分離的資料進行分類。

如果它不是線性分離的,你可以使用核心技巧使其工作。

然而,對于文本分類,最好隻是堅持線性核心。

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

文章原标題《an introduction to support vector machines (svm)》

繼續閱讀