上期我們分享了線性SVM的內容,並對凸二次規劃問題的求解進行了簡單的推導,最後得到分離超平面的函數能夠對新輸入的樣本進行分類。本期我們將繼續探討非線性SVM,了解核函數的概念,並利用Python sklearn庫中的SVM模塊對不同風格的歌曲進行分類(語料及.Py代碼下載見文章末處)。如內容有不足之處,歡迎給我們留言,共同探討學習。
1.非線性SVM
前面我們提過SVM處理非線性問題時需要轉化為線性問題,再用線性SVM的演算法進行求解,所以實質上SVM只能處理線性問題。這裡將非線性問題轉化為線性問題的方法主要是借助核函數將低維的數據映射到高維空間中,使得數據在高維空間中能夠線性可分,如下圖所示,圖左的樣本點無法使用直線分類面來劃分,但經過映射變成右圖的形式後線性可分。
這種變換可以理解為引入了一個非線性變換函數∅(·)將R^n空間的樣本X映射到R^m空間,其中n
通過構造一個5維空間,令
則在新的空間中分類方程可以寫為:
從而變成一個線性可分的問題,此時
然而隨著維度的增加,∅(·)函數的計算是非常困難的,甚至會導致維數災難,故需要引入核函數。核函數能夠接收低維空間的向量,計算出經過變換後在高維空間裡的向量內積值,而不用先映射到高維空間中再進行內積計算,不用顯示的寫出映射後的結果。關於核函數的選擇,雖然有一些經驗的結論,但缺乏比較系統有效的方法,故不進行詳細的討論,多數情況下還是通過多次實驗測試的結果來選擇最優的核函數。常用的核函數主要有:
加入核函數後分類判別函數表示為:
根據上節講到的拉格朗日方程得到對偶目標函數為:
C為加入的懲罰因數,表示對離群點的重視程度。最後根據線性SVM的演算法對目標函數進行求解,可以得到分類平面的函數。
當然本文只是用通俗淺顯的方式對SVM的知識進行了梳理,如果需要更深層的掌握核函數的運用和SVM的原理,需要大家繼續探索,相信通過初步的學習大家能夠對SVM演算法有個基本的認識。同時非常感謝在網絡中對該演算法無私分享的朋友(包括文章、圖片或著作等),若內容上有冒犯的地方請聯繫我們修改或刪除。
下面我們將分享一個簡單的使用SVM演算法對歌曲進行分類的實例。
2.利用SVM演算法進行歌曲分類
小編首先在歌詞網站上爬取了鄭源、張信哲、成龍等幾位歌手所唱歌曲的歌詞,并篩選出愛情類歌曲112首,勵志類歌曲94首,保存為songs_content.xlsx文件,并標注了具體的類別標籤。下面,我們將利用向量空間模型結合SVM算法對這兩類歌曲進行建模和分類。
首先導入後面需要用到的庫和函數,對歌詞進行預處理,使用jieba庫進行分詞,分詞后的效果如下圖所示,并將類別標籤保存在label列表。
然後通過計算歌詞中全部特征的tf-idf值,將歌詞文本轉化為向量,構建向量空間模型,得到一個206行4481維的特征向量矩陣。再使用train_test_split函數將樣本隨機分為訓練集和測試集,這裡我們取出20%的樣本用來測試,另80%的樣本用來建模。
構建SVM訓練模型,選擇參數gamma = 0.001,C為100,核函數默認為rbf核函數,將訓練集樣本輸入模型進行擬合后,再使用該模型對測試集進行預測,通過比較預測結果和實際結果,發現精確率、召回率和f1-score的值都比較低。接下來改變核函數,使用線性核linear試試,得到的模型的精確率為0.875,召回率為0.955,f1-score為0.913。
可以看出,使用線性核函數后模型能夠得到較高的精度。當然,感興趣的朋友也可以通過其他方式對該模型進一步優化,如增加樣本、刪除一些停用詞,使用其他方法對文本特征進行提取或調試模型參數等。
點擊查看》》》機器學習算法起航系列一·支持向量機(SVM)[上]
易研獨家研發的eMiner,是基於雲端、面向全球網絡數據、本土洞察的網絡大數據挖掘平台,爲企業、政府及研究機構提供品牌監測、輿情分析及各種研究項目的平台服務。點擊“閱讀原文”了解更多eMiner網絡大數據挖掘平台詳情。
领取专属 10元无门槛券
私享最新 技术干货