支持向量機SVM原理(參數解讀和python腳本)

2021-02-20 PythonEducation

歡迎各位同學學習python信用評分卡建模視頻系列教程(附代碼, 博主錄製) :

騰訊課堂報名入口

網易雲課堂報名入口

(微信二維碼掃一掃)

支持向量機SVM


這是線性支持向量機,LSVM

margin

margin值越大越好,因為margin值越大,空間區分兩組數據效果越好,margin值越小,空間區分兩組數據效果越差

margin值最大的向量空間最好

lagrange multipliers拉格朗日乘數法是解決支持向量機margin最大值方法

在數學最優問題中,拉格朗日乘數法(以數學家約瑟夫·路易斯·拉格朗日命名)是一種尋找變量受一個或多個條件所限制的多元函數的極值的方法。這種方法將一個有n 個變量與k 個約束條件的最優化問題轉換為一個有n + k個變量的方程組的極值問題,其變量不受任何約束。這種方法引入了一種新的標量未知數,即拉格朗日乘數:約束方程的梯度(gradient)的線性組合裡每個向量的係數。[1] 此方法的證明牽涉到偏微分,全微分或鏈法,從而找到能讓設出的隱函數的微分為零的未知數的值。

支持向量優點

1.支持多維空間

2.不同核函數用於不同決策函數

支持多維空間

非線性SVM可以轉換為多維空間支持向量機

支持向量缺點:

1.如果數據特徵(維度)大於樣本量,支持向量機表現很差

2.支持向量機不提供概率區間估計

優點:可處理多維度數據分類,小樣本數據可以工作

缺點:找到準確的核函數和C參數,gamma參數需要很大計算量

優點:靈活,處理低維度和高維度數據,高維度數據小樣本量表現良好

缺點:高維度,大樣本表現較差,需要數據預處理和調參

很難監控和可視化

另外推薦算法:決策樹和隨機森林(方便可視化,監控,容易理解)

通過核函數,非線性空間可以轉換為線性空間

支持向量應用積極廣泛

python腳本應用

區分兩種蛋糕,根據奶油和糖兩種成分,首先數據可視化

C 參數

C參數表示,你懲罰錯誤分類點的力度

sklearn默認C參數是1

C參數設置小,算法複雜度小,C參數高,追求錯誤率最低

支持多個分層

python代碼實現分多類,decision_function_shape="ovr"

核函數

通過核函數,二維數據難以分類的可以轉換為多維函數,然後分類

python代碼kernel函數設置

gamma越高,複雜度越高

其它機器學習分類算法

decision_function

SVM分割超平面的繪製與SVC.decision_function( )的功能

blog.csdn.net/qq_330398

在李航老師的《統計學習方法》— 支持向量機那章有個例題: 
樣本點x1=(3,3),x2=(4,3),x3=(1,1),labels=(1,1,−1)

decision_function()的功能:計算樣本點到分割超平面的函數距離,分割超平面一邊數據是正數,一邊是負數,如果是二分類,正數代表一類,負數代表另一類

乳腺癌python腳本

此腳本包括參數設置,自動調優,數據規範化,概率計算,分類預測等等

"""@author: QQ:231469242"""from sklearn import preprocessingfrom sklearn.svm import SVCfrom sklearn.datasets import load_breast_cancerfrom sklearn.model_selection import train_test_splitimport matplotlib.pyplot as plt cancer=load_breast_cancer()data=cancer.datafeatureNames=cancer.feature_namesX_train,x_test,y_train,y_test=train_test_split(cancer.data,cancer.target,stratify=cancer.target,random_state=42)svm=SVC()svm.fit(X_train,y_train)print("accuracy on the training subset:{:.3f}".format(svm.score(X_train,y_train)))print("accuracy on the test subset:{:.3f}".format(svm.score(x_test,y_test))) plt.plot(X_train.min(axis=0),'o',label='Min')plt.plot(X_train.max(axis=0),'v',label='Max')plt.xlabel('Feature Index')plt.ylabel('Feature magnitude in log scale')plt.yscale('log')plt.legend(loc='upper right') X_train_scaled = preprocessing.scale(X_train)x_test_scaled = preprocessing.scale(x_test)svm1=SVC()svm1.fit(X_train_scaled,y_train)print("accuracy on the scaled training subset:{:.3f}".format(svm1.score(X_train_scaled,y_train)))print("accuracy on the scaled test subset:{:.3f}".format(svm1.score(x_test_scaled,y_test))) svm2=SVC(C=10,gamma="auto",kernel='rbf',probability=True)svm2.fit(X_train_scaled,y_train)print("after c parameter=10,accuracy on the scaled training subset:{:.3f}".format(svm2.score(X_train_scaled,y_train)))print("after c parameter=10,accuracy on the scaled test subset:{:.3f}".format(svm2.score(x_test_scaled,y_test)))print (svm2.decision_function(X_train_scaled)) print (svm2.decision_function(X_train_scaled)[:20]>0)print(svm2.classes_) print(svm2.predict_proba(x_test_scaled))print(svm2.predict(x_test_scaled))

SVM分類

SVM 支持向量機,在sklearn裡面,有兩種,SVC支持向量分類,用於分類問題,SVR,支持向量回歸,用於回歸問題。

核方法

用於產生非線性分類邊界。 
linear,線性核,會產生線性分類邊界,一般來說它的計算效率最高,而且需要數據最少。線性函數。

from sklearn import svmsvc = svm.SVC(kernel='linear')svc.fit(X, y)

poly,多項式核,會產生多項式分類邊界。多項式函數。

svc = svm.SVC(kernel='poly',degree=4)svc.fit(X, y)

rbf,徑向基函數,也就是高斯核,是根據與每一個支持向量的距離來決定分類邊界的,它能映射到無限維,是最靈活的方法,但是也需要最多的數據。容易產生過擬合問題。指數函數。

svc = svm.SVC(kernel='rbf', gamma=1e2)

多分類器 
採用」one vs one」,在任意兩個樣本之間設計一個SVM,k個類別的樣本設計k(k-1)/2個svm,當對一個未知樣本進行分類時,最後得票最多的類別即為該未知樣本的類別。 
線性支持向量分類器(LinearSVC):相比於svm.SVC,使用了不同的算法,在某些數據集(比如稀疏數據集,文本挖掘)上運行得更快,對於多分類採用的就是」one vs all」的策略

支持向量

就是最靠近分離邊界的樣本點,它們是二分類問題中最具有代表性的點。支持向量的坐標可以通過方法support_vectors_來找到。

svc.support_vectors_[:, 0], svc.support_vectors_[:, 1]

正則化

只考慮支持向量。使模型在處理樣本特徵的時候變得更加簡單。 
正則項可以通過調整係數C來決定

svc = svm.SVC(kernel='linear', C=1e3)svc = svm.SVC(kernel='linear', C=1e-3)

默認參數C=1,對於很多數據集,默認值就能工作的很好。 
實踐經驗:對許多分類器來說,對樣本正則化,採用標準差正則方法是非常重要的提升預測效果的手段。

SVC參數解釋

(1)C: 目標函數的懲罰係數C,用來平衡分類間隔margin和錯分樣本的,default C = 1.0;

(2)kernel:參數選擇有RBF, Linear, Poly, Sigmoid, 默認的是"RBF";

(3)degree:if you choose 'Poly' in param 2, this is effective, degree決定了多項式的最高次冪;

(4)gamma:核函數的係數('Poly', 'RBF' and 'Sigmoid'), 默認是gamma = 1 / n_features;

(5)coef0:核函數中的獨立項,'RBF' and 'Poly'有效;

(6)probablity: 可能性估計是否使用(true or false);

(7)shrinking:是否進行啟發式;

(8)tol(default = 1e - 3): svm結束標準的精度;

(9)cache_size: 制定訓練所需要的內存(以MB為單位);

(10)class_weight: 每個類所佔據的權重,不同的類設置不同的懲罰參數C, 預設的話自適應;

(11)verbose: 跟多線程有關,不大明白啥意思具體;

(12)max_iter: 最大迭代次數,default = 1, if max_iter = -1, no limited;(迭代次數過小,模型擬合不足,次數過高模型訓練時間過長,一般選擇默認值,不限制迭代次數)

(13)decision_function_shape :『ovo』 一對一, 『ovr』 多對多 or None 無, default=None

(14)random_state :用於概率估計的數據重排時的偽隨機數生成器的種子。

歡迎各位學員報名系列課,學習更多金融建模知識

python金融風控模型模型和數據分析微專業課

(微信二維碼掃一掃報名)

相關焦點

  • 支持向量機(SVM)原理剖析
    這顯示出支持向量機的一個重要性質:「訓練完成後,大部分的訓練樣本都不需要保留,最終模型僅與支持向量有關」。由於在線性支持向量機學習的對偶問題裡,目標函數和分類決策函數都「只涉及實例和實例之間的內積,所以不需要顯式地指定非線性變換,而是用核函數替換當中的內積」。核函數表示,通過一個非線性轉換後的兩個實例間的內積。
  • 支持向量機(SVM)算法總結
    版權所有©德塔精要,轉載請註明出處 支持向量機算法作為機器學習領域的經典算法,從被提出開始提出後快速發展,在很多場景和領域都取得了非常好的效果
  • 關於支持向量機(SVM)的原理,你了解多少?(萬字長文 速收)
    其實Coursera的課堂上Andrew Ng講過支持向量機,但顯然他沒有把這作為重點,加上Ng講支持向量機的方法我一時半會難以完全消化,所以聽的也是一知半解。真正開始了解支持向量機就是看的這篇「三重境界」,之後才對這個算法有了大概的概念,以至如何去使用,再到其中的原理為何,再到支持向量機的證明等。總之,這篇文章開啟了我長達數月的研究支持向量機階段,直到今日。」
  • SVM | 支持向量機原理講解(一)
    SVM本來是一種線性分類和非線性分類都支持的二元分類算法,但經過演變,現在也支持多分類問題,也能應用到了回歸問題。本篇文章重點講解線性支持向量機的模型原理和目標函數優化原理。目錄一、感知機模型這個思想將會應用到支持向量機的目標函數優化上,後文將會詳細講解。
  • sklearn學習(五):支持向量機原理實現及簡單參數優化(附代碼)
    支持向量機的核心在於他的優化目標,其通俗解釋為找到一條線,使得離最近的點的距離能夠最遠。現在回到我們的距離公式。為什麼叫支持向量機支持向量機,機其實是指邊界,若向量在邊界上則α大於零,若不在邊界上則統一都為零為零的向量不是支持向量,對結果半點影響都沒有。
  • 機器學習實戰 | 支持向量機·sklearn 參數詳解
    支持向量在線性可分的情況下,訓練數據集的樣本點與分離超平面距離最近的樣本點稱為支持向量,而支持向量機的目的就是求取距離這個點最遠的分離超平面,這個點在確定分離超平面時起著決定性作用,所以把這種分類模型稱為支持向量機。sklearn 提供了很多模型供我們使用,包括以下幾種:
  • 支持向量機超參數的可視化解釋
    在這篇文章中,我們將深入探討支持向量機的兩個重要超參數C和gamma,並通過可視化解釋它們的影響。所以我假設你對算法有一個基本的理解,並把重點放在這些超參數上。支持向量機用一個決策邊界來分離屬於不同類別的數據點。
  • 一個簡單的案例帶你了解支持向量機算法(Python代碼)
    相反,「支持向量機」就像一把鋒利的刀—它適用於較小的數據集,但它可以再這些小的數據集上面構建更加強大的模型。現在,我希望你現在已經掌握了隨機森林,樸素貝葉斯算法和模型融合的算法基礎。如果沒有,我希望你先抽出一部分時間來了解一下他們,因為在本文中,我將指導你了解認識機器學習算法中關鍵的高級算法,也就是支持向量機的基礎知識。
  • 經典算法解讀:一文看懂支持向量機以及推導
    本文是吳恩達老師的和的筆記和代碼復現部分(支持向量機)。作者:備註:筆記和作業(含數據、原始作業文件)、視頻都在 github 中下載。我將陸續將課程筆記和課程代碼發布在公眾號「機器學習初學者」,敬請關注。
  • 【機器學習基礎】數學推導+純Python實現機器學習算法8-9:線性可分支持向量機和線性支持向量機
    但實際上在神經網絡興起之前,基於感知機的另一種模型——支持向量機,同樣可以解決非線性問題。     支持向量機一般來說有三種任務類型:線性可分情況,近似線性可分情況以及線性不可分情況。針對這三種分別線性可分支持向量機、線性支持向量機和線性不可分支持向量機。筆者將分三次對這三種支持向量機進行介紹。
  • 支持向量機SVM來預測晶片未知信息
    本文是用支持向量機SVM的方法去預測未知樣本的信息。
  • 機器學習算法筆記-SVM支持向量機簡介及JAVA小實現
    前言最近開始學習一些機器學習裡的主要算法,SVM支持向量機是我目前產品裡用到的核心算法,想在這裡把我學到的一些東西記錄下來。
  • 如何學習SVM(支持向量機)以及改進實現SVM算法程序?
    MLNLP」,選擇「星標」公眾號重磅乾貨,第一時間送達編輯:憶臻https://www.zhihu.com/question/31211585/answer/640501555本文僅作為學術分享,如果侵權,會刪文處理如何學習SVM(支持向量機
  • 【機器學習基礎】支持向量機超參數的可視化解釋
    在這篇文章中,我們將深入探討支持向量機的兩個重要超參數C和gamma,並通過可視化解釋它們的影響。所以我假設你對算法有一個基本的理解,並把重點放在這些超參數上。支持向量機用一個決策邊界來分離屬於不同類別的數據點。
  • 機器學習算法入門之「支持向量機」
    對於邏輯回歸算法,在確定最優分類器時,藉助的工具有sigmoid函數和最大似然估計,對於接下來要介紹的支持向量機算法,藉助的工具有最大化間隔和核技巧。因此,簡單理解的話,支持向量機算法是通過某種方式,找到一個最優的分類器,從而實現分類的過程。明白了這一點,下面就具體介紹一下該算法的原理。
  • 機器學習測試筆記(13)——支持向量機
    2 支持向量機原理支持向量機(Support Vector Machine,以下簡稱SVM),作為傳統機器學習的一個非常重要的分類算法,它是一種通用的前饋網絡類型,最早是由Vladimir支持向量機通過某非線性變換 φ( x) ,將輸入空間映射到高維特徵空間。特徵空間的維數可能非常高。如果支持向量機的求解只用到內積運算,而在低維輸入空間又存在某個函數 K(x, x') ,它恰好等於在高維空間中這個內積,即K( x, x') =<φ( x) ⋅φ( x') > 。
  • 【典型算法】SVM算法
    支持向量機是一個相對較新和較先進的機器學習技術,最初提出是為了解決二類分類問題,現在被廣泛用於解決多類非線性分類問題和回歸問題。繼續閱讀本文,你將學習到支持向量機如何工作,以及如何利用R語言實現支持向量機。支持向量機如何工作?
  • 從零推導支持向量機 (SVM) | 雷鋒網
    摘要支持向量機 (SVM) 是一個非常經典且高效的分類模型。但是,支持向量機中涉及許多複雜的數學推導,並需要比較強的凸優化基礎,使得有些初學者雖下大量時間和精力研讀,但仍一頭霧水,最終對其望而卻步。儘管現在深度學習十分流行,了解支持向量機的原理,對想法的形式化、簡化,及一步步使模型更一般化的過程,及其具體實現仍然有其研究價值。另一方面,支持向量機仍有其一席之地。相比深度神經網絡,支持向量機特別擅長於特徵維數多於樣本數的情況,而小樣本學習至今仍是深度學習的一大難題。1.
  • 動手寫機器學習算法:SVM支持向量機(附代碼)
    ,其中:線性可分的,指定核函數為linear:'''data1——線性分類'''data1 = spio.loadmat('data1.mat')X = data1['X']y = data1['y']y = np.ravel(y)plot_data(X,y)model = svm.SVC
  • Python機器學習筆記:SVM-sklearn實現 (4)FlyAI
    4,理論上高斯核不會比線性核差,但是這個理論就建立在要花費更多的時間上調參上,所以實際上能用線性核解決的問題我們儘量使用線性核函數  在SVM中,其中最重要的就是核函數的選取和參數選擇了,當然這個需要大量的經驗來支撐,這裡幾個例子只是自己網上找的SVM的小例子。8. SVM調參實例1  下面學習支持向量機的使用方法以及一些參數的調整,支持向量機的原理就是將低維不可分問題轉換為高維可分問題。