一個簡單的案例帶你了解支持向量機算法(Python代碼)

2021-01-08 CDA數據分析師

介紹

掌握機器學習算法並不是一個不可能完成的事情。大多數的初學者都是從學習回歸開始的。是因為回歸易於學習和使用,但這能夠解決我們全部的問題嗎?當然不行!因為,你要學習的機器學習算法不僅僅只有回歸!

把機器學習算法想像成一個裝有斧頭,劍,刀,弓箭,匕首等等武器的軍械庫。你有各種各樣的工具,但你應該學會在正確的時間和場合使用它們。作為一個類比,我們可以將「回歸」想像成一把能夠有效切割數據的劍,但它無法處理高度複雜的數據。相反,「支持向量機」就像一把鋒利的刀—它適用於較小的數據集,但它可以再這些小的數據集上面構建更加強大的模型。

現在,我希望你現在已經掌握了隨機森林,樸素貝葉斯算法和模型融合的算法基礎。如果沒有,我希望你先抽出一部分時間來了解一下他們,因為在本文中,我將指導你了解認識機器學習算法中關鍵的高級算法,也就是支持向量機的基礎知識。

如果你是初學者,並且希望開始你的數據科學之旅,那麼我希望你先去了解一些基礎的機器學習算法, 支持向量機相對來說對於數據科學的初學者來講的確有一點難了。

0.什麼是分類分析

讓我們用一個例子來理解這個概念。假如我們的人口是按照50%-50%分布的男性和女性。那麼使用這個群體的樣本,就需要創建一些規則,這些規則將指導我們將其他人的性別進行分類。如果使用這種算法,我們打算建立一個機器人,可以識別一個人是男性還是女性。這是分類分析的樣本問題。我們將嘗試使用一些規則來劃分性別之間的不同。為簡單起見,我們假設使用的兩個區別因素是:個體的身高和頭髮長度。以下是樣本的散點圖。

圖中的藍色圓圈表示女性,綠色方塊表示男性。圖中的一些預期見解是:

我們人口中的男性的平均身高較高。

我們人口中的女性的頭髮較長。

如果我們看到一個身高180釐米,頭髮長度為4釐米的人,我們最好的分類是將這個人歸類為男性。這就是我們進行分類分析的方法。

1.什麼是支持向量機

「支持向量機」(SVM)是一種有監督的機器學習算法,可用於分類任務或回歸任務。但是,它主要適用於分類問題。在這個算法中,我們將每個數據項繪製為n維空間中的一個點(其中n是你擁有的是特徵的數量),每個特徵的值是特定坐標的值。然後,我們通過找到很好地區分這兩個類的超平面來執行分類的任務(請看下面的演示圖片)。

支持向量只是個體觀測的坐標。支持向量機是一個最好地隔離兩個類(超平面或者說分類線)的前沿算法。

在我第一次聽到「支持向量機」這個名字,我覺得這個名字聽起來好複雜,如果連名字都這麼複雜的話,那麼這個名字的概念將超出我的理解。幸運的是,在我看了一些大學的講座視頻,才意識到這個算法其實也沒有那麼複雜。接下來,我們將討論支持向量機如何工作。我們將詳細探討該技術,並分析這些技術為什麼比其他技術更強。

2.它是如何工作的?

上面,我們已經習慣了用超平面來隔離兩種類別的過程,但是現在最迫切的問題是「我們如何識別正確的超平面?」。關於這個問題不用急躁,因為它並不像你想像的那麼難!

讓我們一個個的來理解如何識別正確的超平面:

選擇正確的超平面(場景1):這裡,我們有三個超平面(A、B、C)。現在,讓我們用正確的超平面對星形和圓形進行分類。

你需要記住一個經驗的法則來識別正確的超平面:「選擇更好的可以隔離兩個類別的超平面」。在這種情況下,超平面「B」就非常完美的完成了這項工作。

選擇正確的超平面(場景2):在這裡,我們有三個超平面(A,B,C),並且所有這些超平面都很好地隔離了類。現在,我們如何選擇正確的超平面?

在這裡,在這裡,將最近的數據點(任一類)和超平面之間的距離最大化將有助於我們選擇正確的超平面。該距離稱為邊距。讓我們看一下下面的圖片:

上面,你可以看到超平面C的邊距與A和B相比都很高。因此,我們將正確的超平面選擇為C。選擇邊距較高的超平面的另一個決定性因素是穩健性。如果我們選擇一個低邊距的超平面,那麼很有可能進行錯誤分類。

選擇正確的超平面(場景3):提示: 使用我們前面討論的規則來選擇正確的超平面

你們中的一些人可能選擇了超平面B,因為它與A相比具有更高的邊距。但是SVM選擇超平面是需要在最大化邊距之前準確地對類別進行分類。這裡,超平面B有一個分類的錯誤,而且A進行了正確的分類。因此,正確的超平面應該是A.

我們可以對這個兩個類進行分類嗎?(場景4):下面這張圖片中,我們無法使用直線來分隔這兩個類,因為其中一個星星位於圓形類別的區域中作為一個異常值。

正如我剛剛已經提到的,另一端的那一顆星星就像是一個異常值。SVM具有忽略異常值並找到具有最大邊距的超平面的功能。因此,我們可以說,SVM對異常值有很強的穩健性

找到一個超平面用來隔離兩個類別(場景5):在下面的場景中,我們不能在兩個類之間有線性的超平面,那麼SVM如何對這兩個類進行分類?到目前為止,我們只研究過線性超平面。

SVM可以解決這個問題。並且是輕鬆就可以做到!它通過引入額外的特徵來解決這個問題。在這裡,我們將添加一個新特徵

現在,讓我們繪製軸x和z上的數據點:

在上圖中,要考慮的問題是:

z的所有值都是正的,因為z是x和y的平方和在原圖中,紅色圓圈出現在靠近x和y軸原點的位置,導致z值比較低。星形相對遠離原點,導致z值較高。在SVM中,很容易就可以在這兩個類之間建立線性超平面。但是,另一個需要解決的問題是,我們是否需要手動添加一個特徵以獲得超平面。不,並不需要這麼做,SVM有一種稱為核技巧的技術。這些函數把低維度的輸入空間轉換為更高維度的空間,也就是它將不可分離的問題轉換為可分離的問題,這些函數稱為內核函數。它主要用於非線性的分離問題。簡而言之,它執行一些非常複雜的數據轉換,然後根據你定義的標籤或輸出找出分離數據的過程。

當SVM找到一條合適的超平面之後,我們在原始輸入空間中查看超平面時,它看起來像一個圓圈:

現在,讓我們看看在數據科學中應用SVM算法的方法。

3.如何在Python中實現SVM?

在Python中,scikit-learn是一個廣泛使用的用於實現機器學習算法的庫,SVM也可在scikit-learn庫中使用並且遵循相同的結構(導入庫,創建對象,擬合模型和預測)。我們來看下面的代碼:

#導入庫from sklearn import svm#假設您有用於訓練數據集的X(特徵數據)和Y(目標),以及測試數據的x_test(特徵數據)#創建SVM分類對象model = svm.svc(kernel='linear', c=1, gamma=1) #與之相關的選項有很多,比如更改kernel值(內核)、gamma值和C值。下一節將對此進行更多討論。使用訓練集訓練模型,並檢查成績model.fit(X, y)model.score(X, y)#預測輸出predicted= model.predict(x_test)

4.如何調整SVM的參數?

對機器學習算法進行調整參數值可以有效地提高模型的性能。讓我們看一下SVM可用的參數列表。

sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma=0.0, coef0=0.0, shrinking=True, probability=False,tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, random_state=None)

下面將討論一些對模型性能影響較大的重要參數,如「kernel」,「gamma」和「C」。

kernel:我們之間已經簡單的討論過了。在算法參數中,我們可以為kernel值提供各種內核選項,如「linear」,「rbf」,「poly」等(默認值為「rbf」)。其中「rbf」和「poly」對於找到非線性超平面是很有用的。讓我們看一下這個例子,我們使用線性內核函數對iris數據集中的兩個特性進行分類。

示例:使用linear的內核

import numpy as npimport matplotlib.pyplot as pltfrom sklearn import svm, datasets

#導入數據iris = datasets.load_iris()X = iris.data[:, :2] #我們可以只考慮前兩個特徵#我們可以使用雙數據集來避免醜陋的切片y = iris.target

#我們創建了一個SVM實例並對數據進行擬合。不進行縮放#是因為我們想要畫出支持向量C = 1.0 #SVM正則化參數svc = svm.SVC(kernel='linear', C=1,gamma=0).fit(X, y)

#創建一個網格來進行可視化x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1h = (x_max / x_min)/100xx, yy = np.meshgrid(np.arange(x_min, x_max, h),np.arange(y_min, y_max, h))

plt.subplot(1, 1, 1)Z = svc.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)

plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)plt.xlabel('Sepal length')plt.ylabel('Sepal width')plt.xlim(xx.min(), xx.max())plt.title('SVC with linear kernel')plt.show()

示例:使用RBF內核

將內核類型更改為下面的代碼行中的rbf並查看影響。

svc = svm.SVC(kernel ='rbf',C = 1,gamma = 0).fit(X,y)

](

如果你有大量的特徵數據(> 1000),那麼我建議你去使用線性內核,因為數據在高維空間中更可能是線性可分的。此外,你也可以使用RBF,但不要忘記交叉驗證其參數,以避免過度擬合。

gamma:'rbf','poly'和'sigmoid'的內核係數。伽馬值越高,則會根據訓練數據集進行精確擬合,也就是泛化誤差從而導致過擬合問題。

示例:如果我們使用不同的伽瑪值,如0,10或100,讓我們來查看一下不同的區別。

svc = svm.SVC(kernel ='rbf',C = 1,gamma = 0).fit(X,y)

C:誤差項的懲罰參數C. 它還控制了平滑決策邊界與正確分類訓練點之間的權衡。

我們應該始終關注交叉驗證的分數,以便更有效地組合這些參數並避免過度擬合。

5.SVM的優缺點

優點:它工作的效果很明顯,有很好的分類作用它在高維空間中同樣是有效的。它在尺寸數量大於樣本數量的情況下,也是有效的。它在決策函數(稱為支持向量)中使用訓練點的子集,因此它的內存也是有效的缺點:當我們擁有大量的數據集時,它表現並不好,因為它所需要的訓練時間更長當數據集具有很多噪聲,也就是目標類重疊時,它的表現性能也不是很好SVM不直接提供概率估計,這些是使用昂貴的五重交叉驗證來計算的。它是Python scikit-learn庫的相關SVC方法。實踐問題

找到一個正確的超平面用來將下面圖片中的兩個類別進行分類

結語

在本文中,我們詳細介紹了機器學習算法中的高階算法,支持向量機(SVM)。我們討論了它的工作原理,python中的實現過程,通過調整模型的參數來提高模型效率的技巧,討論了SVM的優缺點,以及最後留下的一個要你們自己解決的問題。我建議你使用SVM並通過調整參數來分析此模型的能力。

支持向量機是一種非常強大的分類算法。當與隨機森林和其他機器學習工具結合使用時,它們為集合模型提供了非常不同的維度。因此,在需要非常高的預測能力的情況下,他們就顯得非常重要。由於公式的複雜性,這些算法可能稍微有些難以可視化。

Understanding Support Vector Machine algorithm from examples (along with code)

相關焦點

  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    原標題:機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用高級研修班通信和信息技術創新人才培養工程項目辦公室 通人辦〔2018〕 第5號 機器學習、深度學習算法原理與案例實踐暨Python
  • Python開發簡單爬蟲【學習資料總結】
    一、簡單爬蟲架構 開發爬蟲步驟 python語言基礎:(帶你熟悉python語言的特性,學會使用python開發環境,使用python開發一些簡單的案例)
  • 25道題檢測你對支持向量機算法的掌握程度
    介紹在我們學習機器算法的時候,可以將機器學習算法視為包含刀槍劍戟斧鉞鉤叉的一個軍械庫。你可以使用各種各樣的兵器,但你要明白這些兵器是需要在合適的時間合理的地點使用它們。作為類比,你可以將「回歸算法」想像成能夠有效切割數據的劍,但無法處理高度複雜的數據。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    因篇幅有限,以下展示的只是課程裡部分內容如對python課程有更多疑問 請諮詢客服 1零基礎入門全能班 01 –python簡介 02 第一個程序 03-python執行方式和pycharm設置 04-程序的注釋和算術運算符 05 程序執行原理 06變量的使用以及類型 07
  • 機器學習算法基礎(使用Python代碼)
    我提供了對各種機器學習算法的高級理解以及運行它們的R&Python代碼。這些應該足以弄髒你的手。線性回歸主要有兩種類型:簡單線性回歸和多元線性回歸。簡單線性回歸的特徵在於一個自變量。而多元線性回歸(顧名思義)的特徵是多個(超過1個)的自變量。在找到最佳擬合線時,可以擬合多項式或曲線回歸。這些被稱為多項式或曲線回歸。
  • 機器學習算法一覽(附python和R代碼)
    常見的機器學習算法 以下是最常用的機器學習算法,大部分數據問題都可以通過它們解決: 1.線性回歸 (Linear Regression)2.邏輯回歸 (Logistic Regression)3.決策樹 (Decision Tree)4.支持向量機(SVM)5.樸素貝葉斯 (Naive Bayes
  • 改進遺傳算法的支持向量機特徵選擇解決方案
    但是如果缺少了對樣本進行有效地特徵選擇,支持向量機在分類時往往會出現訓練時間過長以及較低的分類準確率,這恰恰是由於支持向量機無法利用混亂的樣本分類信息而引起的,因此特徵選擇是分類問題中的一個重要環節。特徵選擇的任務是從原始的特徵集合中去除對分類無用的冗餘特徵以及那些具有相似分類信息的重複特徵,因而可以有效降低特徵維數,縮短訓練時間,提高分類準確率。
  • 如何使用支持向量機學習非線性數據集
    支持向量機(SVM)什麼是支持向量機呢?支持向量機是監督機器學習模型,可對數據進行分類分析。實際上,支持向量機算法是尋找能將實例進行分離的最佳超平面的過程。如果數據像上面那樣是線性可分離的,那麼我們用一個線性分類器就能將兩個類分開。
  • Python入門5大機器學習算法(附代碼),你知道哪幾個?
    一元線性回歸的特點是只有一個自變量。多元線性回歸的特點正如其名,存在多個自變量。找最佳擬合直線的時候,你可以擬合到多項或者曲線回歸。這些就被叫做多項或曲線回歸。2、邏輯回歸別被它的名字迷惑了!這是一個分類算法而不是一個回歸算法。
  • 小白學數據:教你用Python實現簡單監督學習算法
    :K近鄰決策樹樸素貝葉斯支持向量機首先,要應用機器學習算法,我們需要了解給定數據集的組成。在這個例子中,我們使用內置在sklearn包中的IRIS數據集。現在讓我們使用代碼查看IRIS數據集。如果一個算法僅存儲訓練集數據,並等待測試集數據的給出,那麼這個算法便可認為是一個「懶惰學習法」。
  • 支持向量機其實沒那麼玄乎
    在機器學習中,支持向量機也是一種常見的算法。支持向量機的原理是,在兩類的樣本中,尋找到能最好劃分類別的超平面。如果在平面中找不到,那就進入更多維度的空間,直至某個維度的空間能夠劃分出最合適的支持向量。兩條支持向量中間的那個超平面就是機器能夠利用的判斷邏輯。
  • 算法應用|機器學習python應用,簡單機器學習項目實踐
    上一篇文章中介紹了機器學習的簡單知識,還有python中進行機器學習實踐需要的生態環境,接下來將會通過鳶尾花分類這個例子對機器學習做一個簡要的介紹。通過一步一步地實現這個項目來介紹以下內容。導入和使用python中機器學習的各個方面的類庫。導入數據,並通過描述性分析、可視化等對數據進行分析。創建六個模型,並從中選擇準確度最高的模型。
  • 如何學習SVM(支持向量機)以及改進實現SVM算法程序 - 雷鋒網
    雷鋒網 AI 科技評論按,本文為韋易笑在知乎問題如何學習SVM(支持向量機)以及改進實現SVM算法程序下面的回覆,雷鋒網 AI 科技評論獲其授權轉載。以下為正文:學習 SVM 的最好方法是實現一個 SVM,可講理論的很多,講實現的太少了。
  • 「通俗易懂的文字」+「經典案例」讓你順利入門「遞歸算法」
    遞歸是非常常見的一種算法,非常經典,可以解決非常多的問題。但我估計雖然大部分人知道遞歸,也能看得懂遞歸,但在實際運用中,很容易被遞歸給搞暈(數據,變量,函數等來回的出棧入棧)。今天寫篇文章分享下,或許,能夠給你帶來一些幫助。
  • 智能財務風險預警方法—支持向量機
    「大數據與人工智慧環境下的智能財務風險預警方法」系列推文四:智能財務風險預警方法—支持向量機一、支持向量機理論支持向量機是統計模型中一個比較年輕的模型,也是一種非常實用的時間模型,它的主要理論依據是統計學習理論中的維度理論,並且遵循著結構風險最小的原則,主要應用在處理模式與識別的分類問題上,或者時間序列預測,判別樣本等其他一系列判別方面的模型
  • 改進遺傳算法的支持向量機特徵選擇解決方案介紹
    支持向量機是一種在統計學習理論的基礎上發展而來的機器學習方法[1],通過學習類別之間分界面附近的精確信息,可以自動尋找那些對分類有較好區分能力的支持
  • 電子郵件分類的最佳機器學習算法
    我們將逐一使用以下算法:樸素貝葉斯、支持向量機、決策樹、隨機森林、KNN和AdaBoost分類器。存儲庫有2個pickle文件:word_data 和email_authors。email_preprocess python文件用於處理pickles文件中的數據。它將數據拆分為10%測試數據和90%的訓練數據。
  • 從零推導支持向量機 (SVM) | 雷鋒網
    儘管現在深度學習十分流行,了解支持向量機的原理,對想法的形式化、簡化,及一步步使模型更一般化的過程,及其具體實現仍然有其研究價值。另一方面,支持向量機仍有其一席之地。相比深度神經網絡,支持向量機特別擅長於特徵維數多於樣本數的情況,而小樣本學習至今仍是深度學習的一大難題。1.
  • 【算法系列】凸優化的應用——Python求解優化問題(附代碼)
    推薦閱讀   Sklearn包含的常用算法  隨機森林算法入門(python)  下降方法:坐標下降、梯度下降、次梯度下降>  機器學習算法Python實現--邏輯回歸  機器學習算法Python實現--線性回歸分析  【機器學習算法系列】機器學習中梯度下降法和牛頓法的比較  【機器學習算法系列】如何用Apriori尋找到繁雜數據之間的隱藏關係  後臺回復「代碼
  • 加快Python算法的四個方法(二)Numba
    Numba是Python的即時編譯器,也就是說當你調用Python函數時,你的全部或部分代碼都會被計時轉換成為機器碼進行執行,然後它就會以你的本機機器碼速度運行,Numba由Anaconda公司贊助,並得到了許多組織的支持。使用Numba,你可以加速所有以集中計算的、計算量大的python函數(例如循環)的速度。它還支持numpy庫!