
{
y
(
x
i
)
>
0
y
i
=
1
y
(
x
i
)
<
0
y
i
=
−
1
⇒
y
i
y
(
x
i
)
>
0
arg
ω
,
x
max
{
1
∣
∣
ω
∣
∣
min
i
[
y
i
(
ω
T
x
i
+
b
)
]
}
注:点到平面的距离:
∣
ω
T
x
i
+
b
∣
∣
∣
ω
∣
∣
\frac{|\omega^Tx_i+b|}{||\omega||}
∣∣ω∣∣∣ωTxi+b∣
目标:
max
ω
,
b
1
∣
∣
ω
∣
∣
约束条件:
y
i
(
ω
T
x
i
+
b
)
≥
1
⇒
目标:
min
ω
,
b
1
2
∣
∣
ω
∣
∣
2
约束条件:
y
i
(
ω
T
x
i
+
b
)
≥
1
注:此时的超平面称为规范超平面
此目标规划是凸优化(二次规划),数据量和维数较少时,可以用matlab中的quadprog函数求解
min
ω
,
b
max
α
L
(
ω
,
b
,
α
)
α
i
≥
1
,
i
=
1
,
.
.
.
,
n
其中,
L
(
ω
,
b
,
α
)
=
1
2
∣
∣
ω
∣
∣
2
+
∑
i
=
1
n
α
i
(
1
−
y
i
(
ω
T
x
i
+
b
)
)
L(\omega,b,\alpha)=\frac{1}{2}||\omega||^2+\sum_{i=1}^n\alpha_i(1-y_i(\omega^Tx_i+b))
L(ω,b,α)=21∣∣ω∣∣2+∑i=1nαi(1−yi(ωTxi+b)),
α
i
\alpha_i
αi是拉格朗日乘子
注:可以这样理解两个问题是等价的:
若
1
−
y
i
(
ω
T
x
i
+
b
)
>
0
,
max
L
=
1
2
∣
∣
ω
∣
∣
2
+
∞
=
∞
1-y_i(\omega^Tx_i+b)>0,\max L=\frac{1}{2}||\omega||^2+\infty=\infty
1−yi(ωTxi+b)>0,maxL=21∣∣ω∣∣2+∞=∞
若
1
−
y
i
(
ω
T
x
i
+
b
)
≤
0
,
max
L
=
1
2
∣
∣
ω
∣
∣
2
+
0
=
1
2
∣
∣
ω
∣
∣
2
1-y_i(\omega^Tx_i+b)\le0,\max L=\frac{1}{2}||\omega||^2+0=\frac{1}{2}||\omega||^2
1−yi(ωTxi+b)≤0,maxL=21∣∣ω∣∣2+0=21∣∣ω∣∣2
所以
min
ω
,
b
max
α
L
(
ω
,
b
,
α
)
=
min
ω
,
b
{
∞
,
1
2
∣
∣
ω
∣
∣
2
}
=
min
ω
,
b
1
2
∣
∣
ω
∣
∣
2
\min_{\omega,b}\max_{\alpha}L(\omega,b,\alpha)=\min_{\omega,b}\{\infty,\frac{1}{2}||\omega||^2\}=\min_{\omega,b}\frac{1}{2}||\omega||^2
minω,bmaxαL(ω,b,α)=minω,b{∞,21∣∣ω∣∣2}=minω,b21∣∣ω∣∣2,而且无约束问题的解
(
ω
,
b
)
(\omega,b)
(ω,b)满足
1
−
y
i
(
ω
T
x
i
+
b
)
≤
0
1-y_i(\omega^Tx_i+b)\le0
1−yi(ωTxi+b)≤0
max
α
min
ω
,
b
L
(
ω
,
b
,
α
)
α
i
≥
1
,
i
=
1
,
.
.
.
,
n
由
{
∂
L
∂
b
=
0
∂
L
∂
ω
=
0
min
α
1
2
∑
i
=
1
n
∑
j
=
1
n
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
∑
i
=
1
n
α
i
{
∑
i
=
1
n
α
i
y
i
=
0
α
i
≥
0
\min_{\alpha}\frac{1}{2}\sum_{i=1}^n\sum_{j=1}^n\alpha_i\alpha_j y_i y_j(x_i\cdot x_j)-\sum_{i=1}^n\alpha_i \\
ω ∗ = ∑ i = 1 n α i ∗ x i y i \omega^*=\sum_{i=1}^n\alpha_i^*x_iy_i ω∗=i=1∑nαi∗xiyi
α
i
∗
(
1
−
y
i
(
ω
∗
⋅
x
i
+
b
∗
)
)
=
0
\alpha_i^*(1-y_i(\omega^*\cdot x_i+b^*))=0
αi∗(1−yi(ω∗⋅xi+b∗))=0
由此推断可知,当
x
i
x_i
xi为支持向量时(
1
−
y
i
(
ω
∗
⋅
x
i
+
b
∗
)
=
0
1-y_i(\omega^*\cdot x_i+b^*)=0
1−yi(ω∗⋅xi+b∗)=0),对应得
α
i
\alpha_i
αi为正;当
x
i
x_i
xi不为支持向量时(
1
−
y
i
(
ω
∗
⋅
x
i
+
b
∗
)
<
0
1-y_i(\omega^*\cdot x_i+b^*)<0
1−yi(ω∗⋅xi+b∗)<0),对应得
α
i
\alpha_i
αi为0;
并可以计算得
b
∗
=
y
j
−
∑
i
=
1
n
α
i
∗
y
i
(
x
i
⋅
x
j
)
b^*=y_j-\sum_{i=1}^n\alpha_i^*y_i(x_i\cdot x_j)
b∗=yj−i=1∑nαi∗yi(xi⋅xj)
注:支持向量可以理解为支撑起超平面的点,如果再增加一些边界之外的点,是不影响超平面的,即超平面由支持向量决定。如下图:

决策方程
g
(
x
)
=
ω
∗
⋅
x
+
b
∗
=
∑
i
=
1
n
α
i
∗
y
i
(
x
i
⋅
x
)
+
b
∗
g(x)=\omega^*\cdot x+b^*=\sum_{i=1}^n\alpha_i^*y_i(x_i\cdot x)+b^*
g(x)=ω∗⋅x+b∗=i=1∑nαi∗yi(xi⋅x)+b∗
分类函数
f
(
x
)
=
s
g
n
(
g
(
x
)
)
=
s
g
n
(
∑
i
=
1
n
α
i
∗
y
i
(
x
i
⋅
x
)
+
b
∗
)
f(x)=sgn(g(x))=sgn(\sum_{i=1}^n\alpha_i^*y_i(x_i\cdot x)+b^*)
f(x)=sgn(g(x))=sgn(i=1∑nαi∗yi(xi⋅x)+b∗)
y
i
(
ω
⋅
x
+
b
)
≥
1
−
ξ
i
,
i
=
1
,
.
.
.
,
n
y_i(\omega\cdot x+b)\ge1-\xi_i,i=1,...,n
yi(ω⋅x+b)≥1−ξi,i=1,...,n
避免
ξ
i
\xi_i
ξi取太大的值,为此要在目标函数中对它进行惩罚,得到如下的二次规划问题:
min
1
2
∣
∣
ω
∣
∣
2
+
C
∑
i
=
1
n
ξ
i
s
.
t
.
{
y
i
(
ω
⋅
x
+
b
)
≥
1
−
ξ
i
ξ
i
≥
0
,
i
=
1
,
.
.
.
,
n
注:
C
C
C越大,
ξ
i
\xi_i
ξi越小,说明要求分类得更准确,
C
→
∞
C\to\infty
C→∞时,
ξ
i
=
0
\xi_i=0
ξi=0,就是绝对准确,即硬间隔;
C
C
C越小,说明有更大的错误容忍。
C
C
C是一个常数,可以用K折交叉验证来选择合适的
C
C
C。
min
α
1
2
∑
i
=
1
n
∑
j
=
1
n
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
∑
i
=
1
n
α
i
{
∑
i
=
1
n
α
i
y
i
=
0
0
≤
α
i
≤
C
,
i
=
1
,
.
.
.
,
n
ω
∗
=
∑
i
=
1
n
α
i
∗
x
i
y
i
\omega^*=\sum_{i=1}^n\alpha_i^*x_iy_i
ω∗=i=1∑nαi∗xiyi
b
∗
=
y
j
−
∑
i
=
1
n
α
i
∗
y
i
(
x
i
⋅
x
j
)
b^*=y_j-\sum_{i=1}^n\alpha_i^*y_i (x_i\cdot x_j)
b∗=yj−i=1∑nαi∗yi(xi⋅xj)
f
(
x
)
=
s
g
n
(
g
(
x
)
)
=
s
g
n
(
∑
i
=
1
n
α
i
∗
y
i
(
x
i
⋅
x
)
+
b
∗
)
f(x)=sgn(g(x))=sgn(\sum_{i=1}^n\alpha_i^*y_i(x_i\cdot x)+b^*)
f(x)=sgn(g(x))=sgn(i=1∑nαi∗yi(xi⋅x)+b∗)


min
1
2
∣
∣
ω
∣
∣
2
y
i
(
ω
T
ϕ
(
x
i
)
+
b
)
≥
1
,
i
=
1
,
.
.
.
,
n
核函数
K
(
x
i
,
x
j
)
=
ϕ
(
x
i
)
⋅
ϕ
(
x
j
)
K(x_i,x_j)=\phi(x_i)\cdot\phi(x_j)
K(xi,xj)=ϕ(xi)⋅ϕ(xj),可以避免在高维特征空间进行复杂得运算,不同得核函数形成不同得算法。
主要的核函数:
min
α
1
2
∑
i
=
1
n
∑
j
=
1
n
α
i
α
j
y
i
y
j
K
(
x
i
⋅
x
j
)
−
∑
i
=
1
n
α
i
{
∑
i
=
1
n
α
i
y
i
=
0
α
i
≥
0
,
i
=
1
,
.
.
.
,
n
b
∗
=
y
j
−
∑
i
=
1
n
α
i
∗
y
i
K
(
x
i
⋅
x
j
)
b^*=y_j-\sum_{i=1}^n\alpha_i^*y_iK(x_i\cdot x_j)
b∗=yj−i=1∑nαi∗yiK(xi⋅xj)
f
(
x
)
=
s
g
n
(
g
(
x
)
)
=
s
g
n
(
∑
i
=
1
n
α
i
∗
y
i
K
(
x
i
⋅
x
)
+
b
∗
)
f(x)=sgn(g(x))=sgn(\sum_{i=1}^n\alpha_i^*y_iK(x_i\cdot x)+b^*)
f(x)=sgn(g(x))=sgn(i=1∑nαi∗yiK(xi⋅x)+b∗)

min
α
1
2
∑
i
=
1
n
∑
j
=
1
n
α
i
α
j
y
i
y
j
K
(
x
i
⋅
x
j
)
−
∑
i
=
1
n
α
i
{
∑
i
=
1
n
α
i
y
i
=
0
0
≤
α
i
≤
C
,
i
=
1
,
.
.
.
,
n
b
∗
=
y
j
−
∑
i
=
1
n
α
i
∗
y
i
K
(
x
i
⋅
x
j
)
b^*=y_j-\sum_{i=1}^n\alpha_i^*y_iK(x_i\cdot x_j)
b∗=yj−i=1∑nαi∗yiK(xi⋅xj)
f
(
x
)
=
s
g
n
(
g
(
x
)
)
=
s
g
n
(
∑
i
=
1
n
α
i
∗
y
i
K
(
x
i
⋅
x
)
+
b
∗
)
f(x)=sgn(g(x))=sgn(\sum_{i=1}^n\alpha_i^*y_iK(x_i\cdot x)+b^*)
f(x)=sgn(g(x))=sgn(i=1∑nαi∗yiK(xi⋅x)+b∗)
a0=load('fenlei.txt');
a=a0';
b0=a(:,1:27);%已分类的数据,一列就是一个样本点
dd0=a(:,28:end);%未分类的数据
[b,ps]=mapstd(b0);%b是已分类数据标准化处理后的矩阵,sp是标准化处理的设置
dd=mapstd('apply',dd0,ps);%未分类的数据按照上述标准化处理
group=[ones(20,1);2*ones(7,1)];%已知样本点的类别标号
s=fitcsvm(b',group);%训练向量机
sv_index=s.SupportVectorLabels%返回支持向量的标号
beta=s.Alpha%权系数
bb=s.Bias%常数项
check=predict(s,b')%验证已知样本点
err_rate=1-sum(group==check)/length(group)%计算已知样本点的错判率
solution=predict(s,dd')%对待判样本点进行分类