機器學習第三個演算法SVM上(支援向量機)

2021-08-11 17:25:06 字數 2042 閱讀 2425

svm 全名support vector machine ,翻譯成中文是支援向量機,據說是機器學習中近十幾年來最好的演算法之一,最早是由vladimir n.vapnik 和alexey ya.chervonenkis 在2023年提出的。這也是一種分類演算法,根據所給資料,畫出一條超平面將資料隔開,而這個超平面就是我們所需要訓練的模型。

(機器學習一般框架:訓練集->提取特徵向量->結合一定演算法,分類器:比如決策樹,knn->得到結果)

具體舉例:

圖中所示,如果讓和我們去畫一條直線去區別這兩類資料,很明顯根據直觀判斷我們也會選取h2這條直線來區別兩類,而這中間的數學依據我們把他抽象成超平面。

總共可能有多個超平面?無數條,那麼如何選取超平面呢?直觀上就是選取使得邊際最大的超平面,但是在數學上如何實現呢?

重要概念理一下:

我們建立的模型是乙個超平面:

指得是兩類資料中最中的那條線(平面)

而靠近兩邊資料的兩條虛線是邊界線邊界線的斜率和超平面斜率一致。

在邊界線上的資料點,成為支援向量。

舉個具體例子:

簡單例子裡只有三個資料,分成兩類,(1,1)和(2,0)是一類,(2,3)是一類,根據描述,(1,1)和(2,3)是支援向量。

簡單**如下我增加了兩個點:

from sklearn import svm

import pylab as pl

import numpy as np

x = [[2,0],[0,0],[1,1],[2,3],[4,5]] #點的座標

y = [0,0,0,1,1] #對應的分類

clf = svm.svc(kernel = 'linear') #線性分類

clf.fit(x,y)

#print(clf)

#print(clf.support_vectors_) # 支援向量

#print(clf.support_)

#print(clf.n_support_)

#print(clf.predict([[5,6]]))

w = clf.coef_[0] #目前只有乙個權重

#print(w)

a = -w[0]/w[1] #斜率

xx = np.linspace(-5,5)

yy = a*xx -(clf.intercept_[0]/w[1])

#print(clf.intercept_[0])

b = clf.support_vectors_[0]#支援向量,第乙個點

#print(b)

yy_down = a * xx +(b[1] - a * b[0]) #截距

b = clf.support_vectors_[-1] #最後乙個點

yy_up = a * xx +(b[1] - a *b[0])

print("w:"+str(w))

print("a:"+str(a))

print("support_vectors_:"+str(clf.support_vectors_))

print("coef_:"+str(clf.coef_))

pl.plot(xx,yy,'r-') #中間那條線

pl.plot(xx,yy_up,'k--') #這畫的是上面支援向量

pl.plot(xx,yy_down,'k--') #這畫的是下面的支援向量

print(clf.support_vectors_)

pl.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],s=100,facecolor='k')

pl.scatter([2,0,1,2,4],[0,0,1,3,5],c = y,cmap=pl.cm.paired,s=50)

pl.axis("tight")

pl.show()

addEventListener第三個引數作用

dom方法 addeventlistener 和 removeeventlistener 是用來分配和刪除事件的函式。這兩個方法都需要三個引數,分別為 事件名稱 string 要觸發的事件處理函式 function 指定事件處理函式的時期或階段 boolean dom事件流如圖 當第三個引數設定為t...

第三個Sprint總結

成員 羅凱旋 羅林傑 吳偉鋒 黎文衷 第三階段四則運算專案預期的所有功能功能已經實現,包括自動生成各種難度的算式以及計時功能和小遊戲比賽 看誰一分鐘內算的題目最多等等 團隊github 燃盡圖 結果圖 1.每個成員第二個sprint階段有何需要改進?成員介紹 需要改進 羅凱旋首頁的ui設計有待改進,...

addEventListener的第三個引數詳解

示例 element.addeventlistener mousedown func,element.addeventlistener mousedown func,element.addeventlistener mousedown func,element.addeventlistener mo...