Python機器學習項目化教程(微課視頻版)課件 第8章 支持向量機_第1頁
Python機器學習項目化教程(微課視頻版)課件 第8章 支持向量機_第2頁
Python機器學習項目化教程(微課視頻版)課件 第8章 支持向量機_第3頁
Python機器學習項目化教程(微課視頻版)課件 第8章 支持向量機_第4頁
Python機器學習項目化教程(微課視頻版)課件 第8章 支持向量機_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第8章支持向量機目錄CONTENTS8.1SVM簡介8.2線性SVM算法實現(xiàn)8.3非線性SVM與核函數(shù)8.4SVM回歸8.5SVM算法實現(xiàn)8.6本章小結(jié)8.1SVM簡介學習基礎(chǔ)學習認知能力信息素養(yǎng)高支持向量機是Cortes和Vapnik于1995年提出的一種基于統(tǒng)計學習的二分類模型。它是一種監(jiān)督學習方法,在學習過程中通過最大化分類間隔使得結(jié)構(gòu)風險最小化。從圖8-2可以看出,能將不同樣本分開的超平面有很多,但只有一條超平面位于兩類樣本的“正”中間,這個超平面通常用一個方程d(X)=0來表示,d(X)被稱為判決函數(shù)或決策函數(shù)。圖8-1所示是兩類線性可分的樣本數(shù)據(jù)分布及劃分的示例。圖中的線段就是對樣本分隔的超平面。8.1SVM簡介1.感知機模型假設(shè)輸入樣本空間,輸出空間是Y={+1,-1},輸入樣本表示樣本的特征向量,即輸入空間的樣本點;輸出表示樣本的類別。從輸入樣本空間到輸出樣本空間的函數(shù)可表示為:該函數(shù)稱為感知機(Perceptron),其中,稱為權(quán)值(Weight)或權(quán)值向量(WeightVector),稱為偏置(Bias),sign為符號函數(shù),即8.1SVM簡介判決函數(shù)若f(x)>0,則屬于正例;若f(x)<0,則屬于負例。在特征空間中,令判決函數(shù)g(x)=

,線性方程是一個超平面S,其中w是超平面的法向量,b是超平面的截距。這個超平面將特征空間劃分為兩部分,這兩部分的樣本點分別被分成正、負兩例,超平面S就是分離超平面。8.1SVM簡介2模型參數(shù)學習任意一點(x,y)到直線的距離為,因此二維樣本點(x,y)到線性方程的距離為,其中,。,對于誤分樣本點(xi,yi),當時,有;當時,有。因此,

于是誤分樣本點到超平面S的距離為:若超平面S的誤分樣本點個數(shù)為N,則誤分樣本點到超平面S的總距離為:8.1SVM簡介采用隨機梯度下降法(StochasticGradientDescent,SGD)學習參數(shù)w和b:參數(shù)w和b的迭代更新公式:8.1SVM簡介輸入:訓練數(shù)據(jù)集D={(x1,y1),(x2,y2),…,(xN,yN)}、迭代次數(shù)、學習率,其中:,Y={+1,-1}。過程:(1)初始化參數(shù):,b=0。(2)對于j=1,2,…,N,當為空集,即沒有誤分樣本點,則結(jié)束循環(huán),否則轉(zhuǎn)到第(3)步執(zhí)行。(3)任意取X中的樣本點(xi,yi)更新參數(shù)。輸出:感知機模型參數(shù)w和b,并利用計算分類的準確率。8.1SVM簡介利用以上感知機算法對樣本進行分類,其散點圖及分類結(jié)果如圖8-4所示。8.1SVM簡介1.間隔最大化在對樣本數(shù)據(jù)分類時,超平面離數(shù)據(jù)點的間隔越大,產(chǎn)生誤差的可能性就會越小,也就是分類的確信度越大。因此,為了使分類的確信度盡可能高,需要讓選擇的超平面盡可能地最大化這個間隔。以最大間隔把兩類樣本分開的超平面,稱之為最大間隔超平面。分類問題中的最大間隔、支持向量表示如圖8-5所示。8.1SVM簡介支持向量就是離最大間隔超平面最近的樣本點,根據(jù)前面得到的支持向量到超平面的距離為將上式進行變換,進而有:8.1SVM簡介SVM算法的目標就是最大化這個幾何間隔d:間隔最大化問題就是求最優(yōu)化問題:8.1SVM簡介這是一個凸二次規(guī)劃問題,不容易求解,可用拉格朗日乘子法對其對偶問題進行求解。對上面的公式構(gòu)造拉格朗日函數(shù):其中,。原問題與對偶問題有相同的解:調(diào)整w和b,使拉格朗日函數(shù)取最小值。8.1SVM簡介將上式代入拉格朗日函數(shù):下面調(diào)整參數(shù),使目標函數(shù)取得最大值:對任意的支持向量(xs,ys),有:8.1SVM簡介輸入:訓練數(shù)據(jù)集D={(x1,y1),(x2,y2),…,(xN,yN)}、迭代次數(shù)、懲罰因子C、學習率,其中:,

。過程:(1)初始化參數(shù):,b=0。(2)對于j=1,2,…,N:①計算誤差向量,其中。②取出誤差最大的一項,即。③如果,則退出循環(huán);否則對該樣本數(shù)據(jù)利用隨機梯度下降算法進行優(yōu)化:

輸出:SVM模型參數(shù)w和b,并利用計算分類的準確率。8.2線性SVM算法實現(xiàn)1分別隨機生成兩類樣本數(shù)據(jù)各20條,繪制散點圖#生成二維正態(tài)分布的樣本數(shù)據(jù)mu=np.array([3,5])Sigma=np.array([[1,0],[0,2]])#半正定矩陣Q=np.linalg.cholesky(Sigma)sigma=np.array([2,4])x1=np.random.normal(0,1,(20,2))8.2線性SVM算法實現(xiàn)為了訓練SVM算法中的w和b參數(shù),可利用cvxopt模塊庫中的solvers.qp函數(shù)求解,其格式為cvxopt.solvers.qp(P,q[,G,h[,A,b[,solver[,initvals]]]])。二次規(guī)劃問題的標準形式如下:Gx≤b表示的是所有的不等式約束,同樣,若存在諸如x≥0的限制條件,也可以通過乘以?1轉(zhuǎn)換為≤的形式。Ax=b表示所有的等式約束。8.2線性SVM算法實現(xiàn)#y的內(nèi)積r=np.inner(y,y)#定義凸優(yōu)化pq方法p=matrix(r*m)#目標函數(shù)q=matrix(np.ones(40)*-1)A=matrix(y.reshape(1,-1))#定義等式約束b=matrix(0.)#定義不等式約束g=matrix(np.vstack((np.eye(40)*-1,np.eye(40))))h=matrix(np.vstack((np.zeros(len(y)).reshape(-1,1),np.ones(len(y)).reshape(-1,1)*C)))8.3非線性SVM與核函數(shù)所謂線性不可分,是指用線性分類器進行劃分時,存在一些樣本會被誤分類的情況。對于在有限維度向量空間中線性不可分的樣本,我們將其映射到更高維度的向量空間里,再通過間隔最大化的方式,學習得到支持向量機,就是非線性SVM。8.3非線性SVM與核函數(shù)對于圖8-7中線性不可分問題,在原空間中無法用一條直線將正例和副例正確分隔開來,但可通過一個圓形曲線分隔開來,這就屬于非線性分類問題。而求解分隔超曲面要比求解分隔超平面復雜得多,但我們可以將這樣的非線性分類問題通過非線性變換,將原空間中的數(shù)據(jù)映射到高維的空間H中8.3非線性SVM與核函數(shù)序列最小優(yōu)化(SequentialMinimalOptimization,SMO)算法作為非線性SVM的典型代表,于1998年由JohnPlatt提出,目前被廣泛應(yīng)用于各領(lǐng)域。SMO算法的思想是將大的優(yōu)化問題轉(zhuǎn)換為多個小優(yōu)化問題,這些小的優(yōu)化往往很容易求解,并且對其進行順序求解和作為整體求解的結(jié)果是完全一致的。輸入:訓練數(shù)據(jù)集D={(x1,y1),(x2,y2),…,(xN,yN)}、迭代次數(shù)、容錯誤差,其中:,={+1,-1}。過程:(1)初始化參數(shù):,,計算核矩陣:

8.3非線性SVM與核函數(shù)2)對于j=1,2,…,N:①選擇違反KKT條件最嚴重的樣本點(xi,yi),若違反程度小于容錯誤差,則退出循環(huán)。②否則,選擇其他任何一個樣本點,其對應(yīng)下標為j,針對和,構(gòu)造一個新的只有兩個變量的二次規(guī)劃問題,并求出解析解。具體地說,就是更新參數(shù):8.3非線性SVM與核函數(shù)③利用更新、b1:④利用和進一步更新b1、b2和ei:⑤利用和更新預測向量:8.3非線性SVM與核函數(shù)根據(jù)SMO算法描述,我們來實現(xiàn)SVM分類器。在構(gòu)造SVM分類器之前,首先加載樣本數(shù)據(jù),觀察散點圖的分布情況,如圖8-8所示。#利用測試樣本進行評測error_count=0test_dat_mat=np.mat(test_data)test_label_mat=np.mat(test_label).transpose()rows,cols=np.shape(test_dat_mat)foriinrange(rows):kernel_eval=kernel_value(sv_sample,test_dat_mat[i,:],('rbf',k))pre=kernel_eval.T*np.multiply(sv_label,lambdas[sv_index])+b#預測值

ifnp.sign(pre)!=np.sign(test_label[i]):error_count+=1accuracy=100*(1-float(error_count)/rows)print("準確率:%%%f"%(accuracy))總迭代次數(shù):141[01256712192023343637384143454651]有19個支持向量準確率:%100.0000008.4SVM回歸SVM也可以用于解決回歸問題。假定訓練數(shù)據(jù)集D={(x1,y1),(x2,y2),…,(xN,yN)},回歸模型就是要讓與y盡可能接近,以確定w和b的值。f(x)-與f(x)+之間的區(qū)域稱為街道或管道區(qū)域。最小化誤差函數(shù)的優(yōu)化目標為:8.5SVM算法實現(xiàn)──鳶尾花的分類SVM可分為兩類:支持向量機分類(SupportVectorClassification,SVC)和支持向量機回歸(SupportVectorRegression,SVR)。data_X,data_y=load_data()X_train,X_test,y_train,y_test=split_data(data_X,data_y)show_data(X_train,y_train)#使用linear線性核函數(shù),C越大分類效果越好,但可能會過擬合

linear_svm=svm.SVC(C=1,kernel='linear',decision_function_shape='ovr').fit(X_train,y_train)#使用rbf徑向基核函數(shù)rbf_svm=svm.SVC(C=1,kernel='rbf',gamma=1).fit(X_train,y_train)#使用poly多項式核函數(shù)

poly_svm=svm.SVC(kernel='poly').fit(X_train,y_train)defSVC(C=1.0,kernel='rbf',degree=3,gamma='auto_deprecated',coef0=0.0,shrinking=True,probability=False,tol=1e-3,cache_size=200,class_weight

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論