天天看點

機器學習-10 基于sklearn支援向量機支援向量機——分類支援向量機——回歸

機器學習-10 基于sklearn支援向量機

  • 支援向量機——分類
    • 代碼展示
  • 支援向量機——回歸

支援向量機——分類

支援向量機 (SVMs) 的應用面比較廣,可用于回歸、分類和和 異常檢測。其最常見的應用是做分類。

支援向量機(Support Vector Machine, SVM) 是由最優分類面衍生而來, 線上性可分情況中, 其根本思想是将特征向量映射到一個比自身次元更高的空間裡,在這個空間裡建立一個新的隔離平面,使得隸屬不同類别的特征向量點間隔最大。各類别對應的平行超平面間的距離越大,分類器的總誤差則越小。

設 n 個樣本的訓練合集為 ( x i , y i ) , i = 1 , 2 , … … , n (x_{i},y_{i}),i=1,2,……,n (xi​,yi​),i=1,2,……,n。 d d d維空間中線性判别函數的形式為

g ( x ) = w x + b g(x)=wx+b g(x)=wx+b

某資料點 x i x_{i} xi​到分類平面的距離可以表示為 ∣ ω x + b ∣ ∥ ω ∥ \frac{\left| \omega x+b \right|}{\left\| \omega \right\|} ∥ω∥∣ωx+b∣​,點到原點的距離為 ∣ b ∣ ∥ ω ∥ \frac{\left| b \right|}{\left\| \omega \right\|} ∥ω∥∣b∣​。

離分類平面最近的資料點和它們對應的平行超平面,将判别函數歸一化使所有資料點都滿足 ∣ g ( x ) ∣ ≥ 1 \left| g(x) \right|\ge 1 ∣g(x)∣≥1,且距分類平面距離最小的資料點 ∣ g ( x ) ∣ = 1 \left| g(x) \right|=1 ∣g(x)∣=1。計算 ∥ ω ∥ 2 2 \frac{{{\left\| \omega \right\|}^{2}}}{2} 2∥ω∥2​極小值優化分類平面,使分類間隔最大化。

限制條件為:

y i [ ω x + b ] − 1 ≥ 0 {{y}_{i}}[\omega x+b]-1\ge 0 yi​[ωx+b]−1≥0

目标函數為:

φ ( ω ) = 1 2 ∥ ω ∥ 2 = 1 2 ( ω , ω ) \varphi (\omega )=\frac{1}{2}{{\left\| \omega \right\|}^{2}}=\frac{1}{2}(\omega ,\omega ) φ(ω)=21​∥ω∥2=21​(ω,ω)

可定義如下的 L a g r a n g e Lagrange Lagrange 函數

L ( ω , b , a ) = 1 2 ( ω , ω ) − ∑ i = 1 n a i { y i [ ( ω x i ) + b ] − 1 } L(\omega ,b,a)=\frac{1}{2}(\omega ,\omega )-\sum\limits_{i=1}^{n}{{{a}_{i}}\{{{y}_{i}}[(\omega {{x}_{i}})+b]-1\}} L(ω,b,a)=21​(ω,ω)−i=1∑n​ai​{yi​[(ωxi​)+b]−1}

其中 a i > 0 a_i>0 ai​>0,為 L a g r a n g e Lagrange Lagrange乘子,将所求問題轉化為對 ω \omega ω和 b b b求 L a g r a n g e Lagrange Lagrange極小值。

對 ω \omega ω和 b b b求偏微分,令其等于0。

∑ i = 1 n a i y i = 0 \sum\limits_{i=1}^{n}{{{a}_{i}}{{y}_{i}}=0} i=1∑n​ai​yi​=0

其中 a i ≥ 0 a_i\ge 0 ai​≥0。求解下列函數的最大值

Q ( a ) = ∑ i = 1 n a i ∗ − 1 2 ∑ i , j = 1 n a i a j y i y j ( x i , x j ) Q(a)=\sum\limits_{i=1}^{n}{a_{i}^{*}-\frac{1}{2}\sum\limits_{i,j=1}^{n}{{{a}_{i}}{{a}_{j}}{{y}_{i}}{{y}_{j}}({{x}_{i}},{{x}_{j}})}} Q(a)=i=1∑n​ai∗​−21​i,j=1∑n​ai​aj​yi​yj​(xi​,xj​)

若 a i ∗ a_{i}^{*} ai∗​為最優解,則

ω ∗ = ∑ i = 1 n a i ∗ y i x i {{\omega }^{*}}=\sum\limits_{i=1}^{n}{a_{i}^{*}{{y}_{i}}}{{x}_{i}} ω∗=i=1∑n​ai∗​yi​xi​

采用訓練樣本,訓練決策函數,使其具備分類功能,并在反複訓練中不斷優化确立最優分類平面,形成适用于此類樣本分類問題的支援向量機。決策函數可表示為:

f ( x ) = s g n ( ∑ i = 1 n a i y i ( x , x i ) + b ) f(x)=sgn (\sum\limits_{i=1}^{n}{{{a}_{i}}}{{y}_{i}}(x,{{x}_{i}})+b) f(x)=sgn(i=1∑n​ai​yi​(x,xi​)+b)

所使用的核函數為 S i g m o i d Sigmoid Sigmoid函數。

K ( x , x t ) = tanh ⁡ ( v ( x i , x j ) + c ) K(x,{{x}_{t}})=\tanh (v({{x}_{i}},{{x}_{j}})+c) K(x,xt​)=tanh(v(xi​,xj​)+c)

代碼展示

支援向量機:非平衡類的超平面分離

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_blobs

# we create two clusters of random points
n_samples_1 = 1000
n_samples_2 = 100
centers = [[0.0, 0.0], [2.0, 2.0]]
clusters_std = [1.5, 0.5]
X, y = make_blobs(n_samples=[n_samples_1, n_samples_2],
                  centers=centers,
                  cluster_std=clusters_std,
                  random_state=0, shuffle=False)

# fit the model and get the separating hyperplane
clf = svm.SVC(kernel='linear', C=1.0)
clf.fit(X, y)

# fit the model and get the separating hyperplane using weighted classes
wclf = svm.SVC(kernel='linear', class_weight={1: 10})
wclf.fit(X, y)

# plot the samples
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired, edgecolors='k')

# plot the decision functions for both classifiers
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()

# create grid to evaluate model
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T

# get the separating hyperplane
Z = clf.decision_function(xy).reshape(XX.shape)

# plot decision boundary and margins
a = ax.contour(XX, YY, Z, colors='k', levels=[0], alpha=0.5, linestyles=['-'])

# get the separating hyperplane for weighted classes
Z = wclf.decision_function(xy).reshape(XX.shape)

# plot decision boundary and margins for weighted classes
b = ax.contour(XX, YY, Z, colors='r', levels=[0], alpha=0.5, linestyles=['-'])

plt.legend([a.collections[0], b.collections[0]], ["non weighted", "weighted"],
           loc="upper right")
plt.show()
           
機器學習-10 基于sklearn支援向量機支援向量機——分類支援向量機——回歸

支援向量機——回歸

支援向量分類的方法可以被擴充用作解決回歸問題. 這個方法被稱作支援向量回歸。

支援向量分類有三種不同的實作形式:SVR,NuSVR 和 LinearSVR。在隻考慮線性核的情況下,LinearSVR 比 SVR 提供一個更快的實作形式。

采用對樣本泛化性能極強的 SVR算法, 可以有效避免正常算法因樣本資料不足引起的計算精度低和不易收斂等不足。給定訓練集 :

T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … … , ( x n , y n ) } T=\{(x_1,y_1),(x_2,y_2),……,(x_n,y_n)\} T={(x1​,y1​),(x2​,y2​),……,(xn​,yn​)}

假設其回歸函數為:

y = f ( x ) = ω T ( x ) + b y=f(x)={{\omega }^{T}}(x)+b y=f(x)=ωT(x)+b

為了提高SVR算法的泛化能力, 引入核函數 K ( x i , x j ) K(x_i,x_j) K(xi​,xj​),将低維回歸問題轉化為高維優化問題。

min ⁡ ∑ i , j = 1 n ( α i − α i ∗ ) ( α j − α j ∗ ) K ( x i , x j ) + ε ∑ i = 1 n ( α i + α i ∗ ) − ∑ i = 1 n y i ( α i − α i ∗ ) \min \sum\limits_{i,j=1}^{n}{({{\alpha }_{i}}-\alpha _{i}^{*})}({{\alpha }_{j}}-\alpha _{j}^{*})K({{x}_{i}},{{x}_{j}})+\varepsilon \sum\limits_{i=1}^{n}{({{\alpha }_{i}}+\alpha _{i}^{*})}-\sum\limits_{i=1}^{n}{{{y}_{i}}({{\alpha }_{i}}-\alpha _{i}^{*})} mini,j=1∑n​(αi​−αi∗​)(αj​−αj∗​)K(xi​,xj​)+εi=1∑n​(αi​+αi∗​)−i=1∑n​yi​(αi​−αi∗​)

由此可以得到最優的非線性回歸函數:

f ( x ) = ∑ i = 1 n ( α i − α i ∗ ) K ( x i , x j ) + b f(x)=\sum\limits_{i=1}^{n}{({{\alpha }_{i}}-\alpha _{i}^{*})}K({{x}_{i}},{{x}_{j}})+b f(x)=i=1∑n​(αi​−αi∗​)K(xi​,xj​)+b

選取徑向基函數作為核函數:

K ( x i , x j ) = exp ⁡ ( − ∥ x i − x j ∥ 2 2 σ 2 ) K({{x}_{i}},{{x}_{j}})=\exp (-\frac{{{\left\| {{x}_{i}}-{{x}_{j}} \right\|}^{2}}}{2{{\sigma }^{2}}}) K(xi​,xj​)=exp(−2σ2∥xi​−xj​∥2​)

繼續閱讀