支援向量機(一)

2021-08-10 05:58:14 字數 3460 閱讀 3771

一.理論

1.背景

1)歷史發展:2023年提出,目前的版本是2023年提出

2)歷史地位:深度學習出現之前(2012),倍認為最成功、表現最好的演算法『

2.機器學習的一般框架

訓練集--->提取特徵向量 --->結合一定的演算法(分類器:比如決策樹、knn)--->得到結果

3.介紹

1)例子

兩類?那條線分割較好?

2)svm尋找區分兩類的超平面(hyper plane),使邊際(margin)最大

3)思考:

總共有多少個超平面?無數個

如何選取邊際最大的超平面(max margin hyperplane)

超平面到一側最近點的距離等於另一側最近點的距離,兩側的兩個超平面平行

4)線性可區分(linear separable)和線性不可區分(linear inseparable)

4.定義和建立公式

5.求解

二.實踐

1.簡單例項實現

1)**

#svm的簡單例項

from sklearn import svm

#定義座標

x = [[2,0],[1,1],[2,3]]

#對座標進行分類,下邊為0,上邊為1

y = [0,0,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([2,1]))

2)結果

svc(c=1.0, cache_size=200, class_weight=none, coef0=0.0,

decision_function_shape=none, degree=3, gamma='auto', kernel='linear',

max_iter=-1, probability=false, random_state=none, shrinking=true,

tol=0.001, verbose=false)

[[ 1.  1.]

[ 2.  3.]]

[1 2]

[1 1]

[0]2.圖形方式顯示分類結果

1)**

# -*- coding: utf-8 -*-

import numpy as np  #矩陣運算

import matplotlib.pyplot as pl  #畫圖

from sklearn import svm   #svm

#固定每次抓取的值

np.random.seed(0)

#隨機產生均值為20,方差為2的正態分佈資料

x = np.r_[np.random.randn(20,2)-[2,2],np.random.randn(20,2)+[2,2]]

#對順訓練資料進行分類

y = [0]*20+[1]*20

print(x)

print(y)

#建立模型

clf = svm.svc(kernel='linear')

clf.fit(x,y)

#計算點斜式方程

w = clf.coef_[0]

#計算斜率

a = - w[0]/w[1]

#產生連續的x值

xx = np.linspace(-5,5)

#點斜式方程

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

b = clf.support_vectors_[0]

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:",w)

print("a:",a)

print("support_vector:",clf.support_vectors_)

print("clf.coef",clf.coef_)

pl.plot(xx,yy,"k-")

pl.plot(xx,yy_down,"k--")

pl.plot(xx,yy_up,"k--")

#把對應位置圈出來

pl.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],s=80,facecolors="none")

pl.scatter(x[:,0],x[:,1],c=y,cmap=pl.cm.paired)

pl.axis("tight")

pl.show()

2)結果
[[-0.23594765 -1.59984279]

支援向量機(一)

本篇是學習svm的初學講義,希望能夠對大家有所幫助。svm涉及到很多拉格朗日對偶等最優化知識,強烈推薦大家學習 最優化計算方法 不然理解svm會遇到很多困難。學習之前強烈推薦先玩一玩林智仁的svm toy.exe,對理解svm很有幫助,鏈結在 好了,接下來我們開始svm的學習。在本文中,會盡量避免一...

支援向量機 一)

最近在看史丹福大學的機器學習的公開課,學習了支援向量機,再結合網上各位大神的學習經驗總結了自己的一些關於支援向量機知識。一 什麼是支援向量機 svm 1 支援向量機 support vector machine,常簡稱為svm 是一種監督式學習的方法,可廣泛地應用於統計分類以及回歸分析。支援向量機屬...

支援向量機(一)

支援向量機 svm 有嚴格的數學基礎和推導理論的模式識別方法,是針對小樣本的的統計學理論,基於結構風險最小化原則,演算法在優化過程中具有全域性最優解,泛化能力也比較突出,是一套優秀的機器學習技術。機器學習是乙個不斷學習發展加深的過程,正如乙個讀書人學習svm的時候,他看書的境界分為三層,如先讀資料探...