支持向量機(SVM)
什麼是支持向量機呢?支持向量機是監督機器學習模型,可對數據進行分類分析。實際上,支持向量機算法是尋找能將實例進行分離的最佳超平面的過程。
如果數據像上面那樣是線性可分離的,那麼我們用一個線性分類器就能將兩個類分開。如果我們的數據是非線性可分的,我們應該怎麼做呢?就像這樣:
正如我們所看到的,即使來自不同類的數據點是可分離的,我們也不能簡單地畫一條直線來進行分類。
那麼我們如何使用支持向量機來擬合非線性機器學習數據集呢?
使用SVM進行實驗
創建機器學習數據集
首先創建非線性機器學習數據集。Python代碼如下:
嘗試使用線性支持向量機
我們首先嘗試使用線性支持向量機,Python實現如下:
C是與錯誤分類相關的成本。C值越高,算法對數據集的正確分離就越嚴格。對於線性分類器,我們使用kernel='linear'。
如我們所見,即使我們將成本設置得很高,但這條線也無法很好地分離紅點和藍點。
徑向基函數核
到目前為止,我們使用的線性分類器為:
正如我們所看到的,g(x)是一個線性函數。當g(x) >為0時,預測值為1。當g(x) <0時,預測值為-1。但是由於我們不能使用線性函數處理像上面這樣的非線性數據,我們需要將線性函數轉換成另一個函數。
這個分類器似乎是我們非線性數據的理想選擇。讓我們來看看Python的代碼:
gamma是1 / sigma。請記住,sigma是調節函數。因此,gamma值越小,sigma值就越大,分類器對各個點之間的距離就越不敏感。
讓我們把伽瑪放大看看會發生什麼
好像將伽瑪值提高100倍可以提高分類器對訓練集的準確性。把伽馬值再乘以10會怎麼樣呢?
這是否意味著如果我們將伽瑪提高到10000,它將更加準確呢?事實上,如果伽瑪值太大,則分類器最終會對差異不敏感。
讓我們增加C。C是與整個機器學習數據集的錯誤分類相關的成本。換句話說,增加C將增加對整個數據集的敏感性,而不僅僅是單個數據點。
我們已經找到了參數,因此我們的SVM分類器可以成功地將兩組點分開。
最後
我希望本文能讓您對SVM分類器是什麼以及如何使用它來學習非線機器學習性數據集有一個直觀的認識。如果數據是高維的,您則無法通過可視化來判斷分類器的性能。好的做法是根據訓練集進行訓練,並在測試集上使用混淆矩陣或f1-分數等指標。