支持向量机

Demo实践

首先利用sklearn直接调用SVM函数进行实践尝试

Step 1 库函数导入

#基础函数库
import numpy as np 
#导入画图库
import matplotlib.pyplot as plt
import seaborn as sns
#导入逻辑回归模型函数
from sklearn  import svm

Step 2 构建数据集并进行模型训练

#Demo演示LogisticRegression分类
#构造数据集
x_fearures = np.array([[-1, -2], [-2, -1], [-3, -2], [1, 3], [2, 1], [3, 2]])
y_label = np.array([0, 0, 0, 1, 1, 1])
#调用SVC模型 (支持向量机分类)
svc = svm.SVC(kernel='linear')
#用SVM模型拟合构造的数据集
svc = svc.fit(x_fearures, y_label) 

Step 3 模型参数查看

#查看其对应模型的w
print('the weight of Logistic Regression:',svc.coef_)
#查看其对应模型的w0
print('the intercept(w0) of Logistic Regression:',svc.intercept_)

在这里插入图片描述

Step 4 模型预测

#模型预测
y_train_pred = svc.predict(x_fearures)
print('The predction result:',y_train_pred)

在这里插入图片描述

Step 5 模型可视化

由于此处选择的线性核函数,所以在此我们可以将svm进行可视化

#最佳函数
x_range = np.linspace(-3, 3)
w = svc.coef_[0]
a = -w[0] / w[1]
y_3 = a*x_range - (svc.intercept_[0]) / w[1]
#可视化决策边界
plt.figure()
plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap='viridis')
plt.plot(x_range, y_3, '-c')
plt.show()

在这里插入图片描述
可以对照之前的逻辑回归模型的决策边界,我们可以发现两个决策边界是有一定差异的(可以对比两者在X,Y轴上的截距),这说明这两个不同在相同数据集上找到的判别线是不同的,而这不同的原因其实是由于两者选择的最
优目标是不一致的。

支持向量机的介绍

我们常常会碰到这样的一个问题,首先给你一些分属于两个类别的数据

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_blobs
%matplotlib inline
#画图
X, y = make_blobs(n_samples=60, centers=2, random_state=0, cluster_std=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, s=60, cmap=plt.cm.Paired)

在这里插入图片描述
现在需要一个线性分类器,将这些数据分开,我们可能会有很多种分法。

#画散点图
X, y = make_blobs(n_samples=60, centers=2, random_state=0, cluster_std=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=plt.cm.Paired)
x_fit = np.linspace(0, 3)
#画函数
y_1 = 1 * x_fit + 0.8
plt.plot(x_fit, y_1, '-c')
y_2 = -0.3 * x_fit + 3
plt.plot(x_fit, y_2, '-k')

在这里插入图片描述
那么现在有个问题,两种分类器,哪种最好呢?为了判断好坏,我们需要引入一个准则:好的分类器不仅仅是能够很好的分开已有的数据集,还能对未知数据集进行两个的划分。
假设,现在有一个属于红色数据点的新数据(3,2.8)

#画散点图
X, y = make_blobs(n_samples=60, centers=2, random_state=0, cluster_std=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=plt.cm.Paired)
plt.scatter([3], [2.8], c='#cccc00', marker='<', s=100, cmap=plt.cm.Paired)
x_fit = np.linspace(0, 3)
#画函数
y_1 = 1 * x_fit + 0.8
plt.plot(x_fit, y_1, '-c')
y_2 = -0.3 * x_fit + 3
plt.plot(x_fit, y_2, '-k')

在这里插入图片描述
此时两条线一条会分对而另一条分错,这只是我们的主观感觉,为了客观的评判两条线的健壮性,引入最大间隔这个概念。
最大间隔刻画着当前分类器与数据集的边界,以这两个分类器为例:

#画散点图
X, y = make_blobs(n_samples=60, centers=2, random_state=0, cluster_std=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=plt.cm.Paired)
x_fit = np.linspace(0, 3)
#画函数
y_1 = 1 * x_fit + 0.8
plt.plot(x_fit, y_1, '-c')
#画边距
plt.fill_between(x_fit, y_1 - 0.6, y_1 + 0.6, edgecolor='none', color='#AAAAAA', alpha=0.4)
y_2 = -0.3 * x_fit + 3
plt.plot(x_fit, y_2, '-k')
plt.fill_between(x_fit, y_2 - 0.4, y_2 + 0.4, edgecolor='none', color='#AAAAAA', alpha=0.4)

**
可以看出,蓝色线的最大间隔大于黑色线,所以会选择蓝色线作为我们的分类器.

#画散点图
X, y = make_blobs(n_samples=60, centers=2, random_state=0, cluster_std=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=plt.cm.Paired)
#画图
y_1 = 1 * x_fit + 0.8
plt.plot(x_fit, y_1, '-c')
#画边距
plt.fill_between(x_fit, y_1 - 0.6, y_1 + 0.6, edgecolor='none', color='#AAAAAA', alpha=0.4)

在这里插入图片描述
那么,我们现在的分类器是最优的吗?间隔是最大的吗?
为了找出最优分类器,引出SVM

from sklearn.svm import SVC
#SVM 函数
clf = SVC(kernel='linear')
clf.fit(X, y)

在这里插入图片描述

#最佳函数
w = clf.coef_[0]
a = -w[0] / w[1]
y_3 = a*x_fit - (clf.intercept_[0]) / w[1]
#最大边距 下届
b_down = clf.support_vectors_[0]
y_down = a* x_fit + b_down[1] - a * b_down[0]
#最大边距 上届
b_up = clf.support_vectors_[-1]
y_up = a* x_fit + b_up[1] - a * b_up[0]
#画散点图
X, y = make_blobs(n_samples=60, centers=2, random_state=0, cluster_std=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=plt.cm.Paired)
#画函数
plt.plot(x_fit, y_3, '-c')
#画边距
plt.fill_between(x_fit, y_down, y_up, edgecolor='none', color='#AAAAAA', alpha=0.4)
#画支持向量
plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], edgecolor='b',
s=80, facecolors='none')

在这里插入图片描述
带黑边的点数距离当前分类器最近的点,我们称之为支持向量
支持向量机为我们提供了在众多可能的分类器之间进行选择的原则,从而确保对未知数据集具有更高的泛化性。

软间隔

但很多时候,我们拿到的数据是这样子的

#画散点图
X, y = make_blobs(n_samples=60, centers=2, random_state=0, cluster_std=0.9)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=plt.cm.Paired)

在这里插入图片描述
这种情况并不容易找到这样的最大间隔。
于是我们就有了软间隔,相比于硬间隔而言,我们允许个别数据出现在间隔带中。
我们知道,如果没有一个原则进行约束,满足软间隔的分类器也会出现很多条。
所以需要对分错的数据进行惩罚,SVC 函数中,有一个参数 C 就是惩罚参数。
惩罚参数越小,容忍性就越大。
以 C=1 为例子,比如说:

#画散点图
X, y = make_blobs(n_samples=60, centers=2, random_state=0, cluster_std=0.9)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=plt.cm.Paired)
#惩罚参数:C=1 
clf = SVC(C=1, kernel='linear')
clf.fit(X, y)
#最佳函数
w = clf.coef_[0]
a = -w[0] / w[1]
y_3 = a*x_fit - (clf.intercept_[0]) / w[1]
#最大边距 下届
b_down = clf.support_vectors_[0]
y_down = a* x_fit + b_down[1] - a * b_down[0]
#最大边距 上届
b_up = clf.support_vectors_[-1]
y_up = a* x_fit + b_up[1] - a * b_up[0]
#画散点图
X, y = make_blobs(n_samples=60, centers=2, random_state=0, cluster_std=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=plt.cm.Paired)
#画函数
plt.plot(x_fit, y_3, '-c')
#画边距
plt.fill_between(x_fit, y_down, y_up, edgecolor='none', color='#AAAAAA', alpha=0.4)
#画支持向量
plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], edgecolor='b',
            s=80, facecolors='none')

在这里插入图片描述
惩罚参数 C=0.2 时,SVM 会更具包容性,从而兼容更多的错分样本:

X, y = make_blobs(n_samples=60, centers=2, random_state=0, cluster_std=0.9)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=plt.cm.Paired)
#惩罚参数:C=0.2 
clf = SVC(C=0.2, kernel='linear')
clf.fit(X, y)
x_fit = np.linspace(-1.5, 4)
#最佳函数
w = clf.coef_[0]
a = -w[0] / w[1]
y_3 = a*x_fit - (clf.intercept_[0]) / w[1]
#最大边距 下届
b_down = clf.support_vectors_[10]
y_down = a* x_fit + b_down[1] - a * b_down[0]
#最大边距 上届
b_up = clf.support_vectors_[1]
y_up = a* x_fit + b_up[1] - a * b_up[0]
#画散点图
X, y = make_blobs(n_samples=60, centers=2, random_state=0, cluster_std=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=plt.cm.Paired)
#画函数
plt.plot(x_fit, y_3, '-c')
#画边距
plt.fill_between(x_fit, y_down, y_up, edgecolor='none', color='#AAAAAA', alpha=0.4)
#画支持向量
plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], edgecolor='b',
            s=80, facecolors='none')

在这里插入图片描述

超平面

如果我们遇到这样的数据集,没有办法利用线性分类器进行分类

from sklearn.datasets.samples_generator import make_circles
#画散点图
X, y = make_circles(100, factor=.1, noise=.1, random_state=2019)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=plt.cm.Paired)
clf = SVC(kernel='linear').fit(X, y)
#最佳函数
x_fit = np.linspace(-1.5, 1.5)
w = clf.coef_[0]
a = -w[0] / w[1]
y_3 = a*X - (clf.intercept_[0]) / w[1]
plt.plot(X, y_3, '-c')

在这里插入图片描述
我们可以将二维(低维)空间的数据映射到三维(高维)空间中。
此时,我们便可以通过一个超平面对数据进行划分
所以,我们映射的目的在于使用 SVM 在高维空间找到超平面的能力。

#画图
X, y = make_circles(100, factor=.1, noise=.1, random_state=2019)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=plt.cm.Paired)
clf = SVC(kernel='rbf')
clf.fit(X, y)
ax = plt.gca()
x = np.linspace(-1, 1)
y = np.linspace(-1, 1)
x_1, y_1 = np.meshgrid(x, y)
P = np.zeros_like(x_1)
for i, xi in enumerate(x):
    for j, yj in enumerate(y):
        P[i, j] = clf.decision_function(np.array([[xi, yj]]))
ax.contour(x_1, y_1, P, colors='k', levels=[-1, 0, 0.9], alpha=0.5,
            linestyles=['--', '-', '--'])
plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], edgecolor='b',
            s=80, facecolors='none');

在这里插入图片描述
此时便完成了非线性分类。

思考与讨论

1.什么是支持向量
假设超平面 ( w , b ) (w,b) (w,b)能将训练样本正确分类,即对于 ( x i , y i ) ∈ D (x_i,y_i)\in D (xi,yi)D,若 y i = + 1 y_i=+1 yi=+1,则有 w T x i + b > 0 w^Tx_i+b>0 wTxi+b>0;若 y i = − 1 y_i=-1 yi=1,则有 w T x i + b < 0 w^Tx_i+b<0 wTxi+b<0.令
w T x i + b ≥ + 1 , y i = + 1 w T + x i + b ≤ − 1 , y i = − 1 w^Tx_i+b\geq +1,y_i=+1\\ w^T+x_i+b\leq-1,y_i=-1 wTxi+b+1,yi=+1wT+xi+b1,yi=1
如下图所示,
在这里插入图片描述
距离超平面(黑色实线)最近的这几个训练样本点使得上式的等号成立,它们被称为“支持向量”(support vector),两个异类支持向量到超平面的距离之和为:
γ = 2 ∣ ∣ w ∣ ∣ \gamma=\frac{2}{||w||} γ=w2
它被称为“间隔”(margin).
注意:R语言生成上图的代码为:

#绘制所有点
if( ! require("ISLR") ){ install.packages("ISLR") }
if( ! require("e1071") ){ install.packages("e1071") }
set.seed(0)
DF = data.frame( x1=c(3,2,4,1,2,4,4), x2=c(4,2,4,4,1,3,1),
                y=as.factor(c(rep(1,4),rep(0,3))) )
colors = c( rep('red',4), rep('blue',3) )
plot( DF$x1, DF$x2, col=colors, pch=19, cex=2.0, xlab='X_1', ylab='X_2', main='' )
grid()
#超平面斜率
slope = ( 3.5 - 1.5 ) / ( 4 - 2 )
#超平面截距
intercept = -2 * slope + 1.5
#上边界
slope_m_upper = slope
intercept_m_upper = -2 * slope_m_upper + 2 
#下边界
slope_m_lower = slope
intercept_m_lower = -2 * slope_m_lower + 1 
#画图
plot( DF$x1, DF$x2, col=colors, pch=19, cex=2.0, xlab='X_1', ylab='X_2', main='' )
grid()
#画边界线及超平面
abline(a=intercept,b=slope,col='black')
abline(a=intercept_m_upper,b=slope_m_upper,col='gray',lty=2,lwd=2)
abline(a=intercept_m_lower,b=slope_m_lower,col='gray',lty=2,lwd=2)
grid()

2.支持向量机的推导
欲找到具有“最大间隔”(maximum margin)的划分超平面,也就是要找到能满足1中式中约束的参数 w w w b b b,使得 γ \gamma γ最大,即
m a x w , b   2 ∣ ∣ w ∣ ∣ s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , … , m \begin{aligned} &max_{w,b}\ \frac{2}{||w||}\\ &s.t.\quad y_i(w^Tx_i+b) \geq1,\quad i=1,2,…,m \end{aligned} maxw,b w2s.t.yi(wTxi+b)1,i=1,2,,m
显然,为了最大化间隔,仅需最大化 ∣ ∣ w ∣ ∣ − 1 ||w||^{-1} w1,这等价于最小化 ∣ ∣ w ∣ ∣ 2 ||w||^2 w2.于是,1中的式子可以重写为
m i n w , b   1 2 ∣ ∣ w ∣ ∣ 2 s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , … , m \begin{aligned} &min_{w,b}\ \frac12||w||^2\\ &s.t.\quad y_i(w^Tx_i+b) \geq1,\quad i=1,2,…,m \end{aligned} minw,b 21w2s.t.yi(wTxi+b)1,i=1,2,,m
这就是支持向量机(Spuuort Vector Machine,简称SVM)的基本型。
这是一个凸二次规划问题,最优解在边界上达到,支持向量仍然存在。由于训练集是线性可分的,所以可行域非空,该问题有解。
3.SVM的损失函数
SVM的损失函数为
①合页损失(hinge loss),损失函数定义如下:
L i = ∑ j ≠ y i m a x ( 0 , s j − s y i + Δ ) L_i=\sum_{j\not = y_i}max(0,s_j-s_{y_i}+\Delta) Li=j=yimax(0,sjsyi+Δ)
其中, i i i表示第 i i i个样品, j j j表示第 j j j个种类,那么 y i y_i yi表示第 i i i个样品的真实种类。常用的数学表达式为: s j = w T j x i s_j=w^j_{T}x_i sj=wTjxi.
例如:有3个分类,并且得到了分值, s = [ 13 , − 7 , 11 ] s=[13,-7,11] s=[13,7,11]。其中,第一个类别是正确类别,即 y i = 0 y_i=0 yi=0。同时假设 Δ = 10 \Delta=10 Δ=10,因此该SVM的损失函数就是两个部分的不正确分类加起来,即为
L i = m a x ( 0 , − 7 − 13 + 10 ) + m a x ( 0 , 11 − 13 + 10 ) = 8 L_i=max(0,-7-13+10)+max(0,11-13+10)=8 Li=max(0,713+10)+max(0,1113+10)=8

② 指数损失(exponential loss): l e x p ( z ) = e x p ( − z ) l_{exp}(z)=exp(-z) lexp(z)=exp(z)
③ 对率损失(logistic loss): l l o g ( z ) = l o g ( 1 + e x p ( − z ) ) l_{log}(z)=log(1+exp(-z)) llog(z)=log(1+exp(z))
从损失加罚的角度看,支持向量机被看作正则化的函数估计问题,其合页损失下的最优估计的概率意义为
f ( x ) = s g n [ P r ( Y = + 1 ∣ x ) − 1 2 ] f(x)=sgn[Pr(Y=+1|x)-\frac12] f(x)=sgn[Pr(Y=+1x)21]
即为,给定 x x x,对于 Y = 1 Y=1 Y=1的预测超过一半则取1,小于一半则取-1

4.SVM的核函数有哪些,核函数的作用是什么
常见的核函数有
① 线性核 k ( x , x ′ ) = < x , x ′ > k(x,x^{'})=<x,x^{'}> k(x,x)=<x,x>
② 多项式核 k ( x , x ′ ) = ( 1 + < x , x ′ > ) d k(x,x^{'})=(1+<x,x^{'}>)^d k(x,x)=(1+<x,x>)d
③ 径向基核 k ( x , x ′ ) = e x p ( − γ ∣ ∣ x − x − x ′ ∣ ∣ ) 2 k(x,x^{'})=exp(-\gamma||x-x-x^{'}||)^2 k(x,x)=exp(γxxx)2
④ 高斯核 k ( x , x ′ ) = e x p ( − ∣ ∣ x − x ′ ∣ ∣ 2 2 σ 2 ) k(x,x^{'})=exp(\frac{-||x-x^{'}||^2}{2\sigma^2}) k(x,x)=exp(2σ2xx2)
⑤ 神经网络核 k ( x , x ′ ) = t a n h ( k , < x , x ′ + k 2 > ) k(x,x^{'})=tanh(k,<x,x^{'}+k_2>) k(x,x)=tanh(k,<x,x+k2>)
核技巧可以用线性方法解决非线性可分的情况。核技巧的想法是,在学习和预测中只定义核函数,而不显示的定义映射函数。映射函数将输入空间映射到特征空间,而特征空间一般是高维的,甚至是无穷维的。
5.硬间隔和软间隔
硬间隔:所有样本均满足1的约束,即所有样本都必须划分正确。
软间隔:允许某些样本不满足约束
y i ( w T x i + b ) ≥ 1 y_i(w^Tx_i+b)\ge 1 yi(wTxi+b)1
当然,在最大化间隔的同时,不满足约束的样本应尽可能少。于是,优化目标可写为
m i n w , b 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 m l 0 / 1 ( y i ( w T x i + b ) − 1 ) min_{w,b}\frac12||w||^2+C\sum_{i=1}^ml_{0/1}(y_i(w^Tx_i+b)-1) minw,b21w2+Ci=1ml0/1(yi(wTxi+b)1)
其中, C > 0 C>0 C>0是一个常数, l 0 / 1 l_{0/1} l0/1是“0/1损失函数“
l 0 / 1 ( z ) = 1 , i f z > 0 0 , o t h e r w i s e \begin{aligned} l_{0/1}(z)=&1,\quad if z>0\\ &0,\quad otherwise \end{aligned} l0/1(z)=1,ifz>00,otherwise
如果采用hinge损失,则优化目标式变为
m i n w , b 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 m m a x ( 0 , 1 − y i ( w T x i + b ) ) min_{w,b}\frac12||w||^2+C\sum_{i=1}^m max(0,1-y_i(w^Tx_i+b)) minw,b21w2+Ci=1mmax(0,1yi(wTxi+b))
引入”松弛变量“(slack variables) ξ i ≥ 0 \xi_i\ge0 ξi0,可将上式重写为
m i n w , b , ξ i 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 m ξ i min_{w,b,\xi_i}\frac12||w||^2+C\sum_{i=1}^m\xi_i minw,b,ξi21w2+Ci=1mξi
因此
s . t .   y i ( w T x i + b ) ≥ 1 − ξ i ξ i ≥ 0 ,   i = 1 , 2 , … , m \begin{aligned} s.t.\ &y_i(w^Tx_i+b)\ge1-\xi_i\\ &\xi_i\ge0,\ i=1,2,…,m \end{aligned} s.t. yi(wTxi+b)1ξiξi0, i=1,2,,m
这就是常用的”软间隔支持向量机“.
6.SVM可以做多分类吗,怎么做
可以,方法如下所示。
①直接法:直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多分类。这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中
②间接法:通过组合多个二分类器来实现多分类器的构造,常见的方法有一对一和一对多两种。
1)一对一为在任意两类样本之间设计一个SVM,当对一个未知样本进行分类时,得票最多的类别为该未知样本的类别;
2)一对多为训练时依次把某个类别的样本归为一类,其他剩余的归为另一类,分类时将未知样本分类为具有最大分类函数值的那一类。
7.SVM可以做回归吗,怎么做
对于样本 ( x , y ) (x,y) (x,y),传统回归模型通常直接基于模型输出 f ( x ) f(x) f(x)与真实输出 y y y之间的差别来计算损失,当且仅当 f ( x ) f(x) f(x) y y y完全相同时候,损失才为零。与此不同,支持向量回归(Support Vector Regression,简称SVR)假设我们能容忍 f ( x ) f(x) f(x) y y y之间最多有 ϵ \epsilon ϵ的偏差,即仅当 f ( x ) f(x) f(x) y y y之间的差别绝对值大于 ϵ \epsilon ϵ时才计算损失。
就相当于以 f ( x ) f(x) f(x)为中心,构建一个宽度为 2 ϵ 2\epsilon 2ϵ的间隔带,若训练样本落入此间隔带,则认为是被预测正确的。
8.SVM的对偶问题,为什么要把原问题转化为对偶问题
因为转化为对偶形式之后,解法和预测时的复杂度降低了,可以通过二次规划算法很快的算出最优解。
9.KKT限制条件有哪些
首先,明确对于拉格朗日乘子函数( α i , μ i \alpha_i,\mu_i αi,μi 为非负对偶变量)
L p = 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 n ξ i − ∑ i = 1 n α i [ y i ( w T x i + w 0 ) − ( 1 − ξ i ) ] − ∑ i = 1 n μ i ξ i L_p=\frac12||w||^2+C\sum_{i=1}^n\xi_i-\sum_{i=1}^n\alpha_i[y_i(w^Tx_i+w_0)-(1-\xi_i)]-\sum{i=1}^n\mu_i\xi_i Lp=21w2+Ci=1nξii=1nαi[yi(wTxi+w0)(1ξi)]i=1nμiξi
对应的KKT条件为
w = ∑ n α i y i x i , 0 = ∑ n α i y i , α i = c − μ i α i [ y i ( w T x i + w 0 ) − ( 1 − ξ i ) ] = 0 μ i ξ i = 0 y i ( w T x i + w 0 ) ≥ 1 − ξ i ,   ξ i ≥ 0 α i ≥ 0 , μ i ≥ 0 \begin{aligned} &w=\sum^n\alpha_iy_ix_i,\quad 0=\sum^n\alpha_iy_i,\quad \alpha_i=c-\mu_i\\ &\alpha_i[y_i(w^Tx_i+w_0)-(1-\xi_i)]=0\\ &\mu_i\xi_i=0\\ &y_i(w^Tx_i+w_0)\ge 1-\xi_i, \ \xi_i\ge0\\ &\alpha_i\ge0,\mu_i\ge0 \end{aligned} w=nαiyixi,0=nαiyi,αi=cμiαi[yi(wTxi+w0)(1ξi)]=0μiξi=0yi(wTxi+w0)1ξi, ξi0αi0,μi0

因此KKT条件为
α i = 0 y i g ( x i ) ≥ 1 0 < α i < C y i g ( x i ) = 1 x j = C y i g ( x i ) ≤ 1 \begin{aligned} &\alpha_i=0\quad y_ig(x_i)\ge1\\ &0<\alpha_i<C\quad y_ig(x_i)=1\\ &x_j=C\quad y_ig(x_i)\le1 \end{aligned} αi=0yig(xi)10<αi<Cyig(xi)=1xj=Cyig(xi)1
其中, g ( x i ) = ∑ j = 1 n α j y j x j ⋅ x i + b b = w 0 g(x_i)=\sum_{j=1}^n\alpha_jy_jx_j\cdot x_i+b\quad b=w_0 g(xi)=j=1nαjyjxjxi+bb=w0
10.假如你在训练SVM时发现模型过拟合了,应该怎样调参数?
调节正则化参数C,一般C越大越容易过拟合,C越小越容易欠拟合。
11.LDA与SVM什么条件下等价?
线性SVM和LDA求出的w互相垂直时,两者是等价的。因为LDA的思想是投影,投影过程和偏置是没有任何关系的,所以SVM这个时候比LDA仅多了个偏移b。
LDA是从多分类出发提出的,其求解有不同方法,但都是一个优化的结果。有的教材是贝叶斯定理,本质上是最大化后验概率,周志华书上是一个二次规划思想。在二分类情形与SVM很相近,但由于优化目标函数不同,结果通常是不同的。两个优化问题的解系数成比例时,二者的分类结果就是等价的。

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页