第7章 支持向量机
习题7.1
比较感知机的对偶形式与线性可分支持向量机的对偶形式。
解答:
解答思路:
- 列出感知机的原始形式;
- 写出感知机的对偶形式;
- 列出线性可分支持向量机的原始形式;
- 写出线性可分支持向量机的对偶形式;
- 比较感知机和线性可分支持向量机的对偶形式。
解答步骤:
第1步:感知机的原始形式
根据书中第2.3.1节的感知机学习算法的原始形式:
给定一个训练数据集
其中,
,求参数 ,使其为以下损失函数极小化问题的解 其中
为误分类点的集合。
根据书中第2章的算法2.1:
算法2.1(感知机学习算法的原始形式)
输入:训练数据集,其中 ;学习率 ( );
输出:;感知机模型
(1)选取初值;
(2)在训练集中选取数据;
(3)如果, (4)转至步骤(2),直至训练集中没有误分类点。
第2步:感知机的对偶形式
根据书中第2章的算法2.2:
算法2.2(感知机学习算法的对偶形式)
输入:线性可分的数据集,其中 ;学习率 ( ); 输出: ;感知机模型 ,其中
(1);
(2)在训练集中选取数据;
(3)如果, (4)转至(2),直至训练集中没有误分类数据。
根据书中第2.3.3节对偶形式的基本思想
从学习过程不难看出,最后学习到的
可以分别表示为 这里,
综上所述:
- 感知机的原始形式中的损失函数:
- 感知机的对偶形式中的损失函数:可知
表示为 的线性组合形式,则
其中,
第3步:线性可分支持向量机的原始形式
根据书中第7.1.3节的线性可分支持向量机学习的最优化问题,可作为原始最优化问题(7.13)~(7.14):
第4步:线性可分支持向量机的对偶形式
根据书中第7章的算法7.2:
算法7.2(线性可分支持向量机学习算法)
输入:线性可分训练集,其中 , , ;
输出:分离超平面和分类决策函数。
(1)构造并求解约束最优化问题求得最优解
。
(2)计算并选择
的一个正分量 ,计算 (3)求得分离超平面
分类决策函数:
综上所述:
- 线性可分支持向量机的原始形式中的损失函数:
- 线性可分支持向量机的对偶形式中的损失函数:根据定理7.2,可知
表示为 的线性组合形式,则
其中,
第5步:感知机和线性可分支持向量机对偶形式的比较
- 在两者的对偶形式中,
都可以表示为 的线性组合形式; - 在两者的对偶形式中,都可以通过求解
,最后代入由 表示的 和 公式中,从而求解最优化问题的解 和 ; - 感知机学习得到一个分隔超平面,而线性可分支持向量机学习得到所有分隔超平面中的间隔最大分隔超平面。
习题7.2
已知正例点
解答:
解答思路:
- 通过调用sklearn.svm的SVC类构建模型,根据题目中的数据训练模型,得到
、 和支持向量; - 调用matplotlib库,画出分离超平面、间隔边界和支持向量。
解答步骤:
第1步:训练模型,得到
%matplotlib inline
from sklearn.svm import SVC
# 加载数据
X = [[1, 2], [2, 3], [3, 3], [2, 1], [3, 2]]
y = [1, 1, 1, -1, -1]
# 训练SVM模型
clf = SVC(kernel='linear', C=10000)
clf.fit(X, y)
# 得到w、b和支持向量
print("w =", clf.coef_)
print("b =", clf.intercept_)
print("support vectors =", clf.support_vectors_)w = [[-1. 2.]]
b = [-2.]
support vectors = [[3. 2.]
[1. 2.]
[3. 3.]]
可得:
- 最大间隔分离超平面:
- 分类决策函数:
- 支持向量:
第2步:在图中画出分离超平面、间隔边界和支持向量
import matplotlib.pyplot as plt
import numpy as np
# 绘制数据点
color_seq = ['red' if v==1 else 'blue' for v in y]
plt.scatter([i[0] for i in X], [i[1] for i in X], c=color_seq)
# 得到x轴的所有点
xaxis = np.linspace(0, 3.5)
w = clf.coef_[0]
# 计算斜率
a = -w[0] / w[1]
# 得到分离超平面
y_sep = a * xaxis - (clf.intercept_[0]) / w[1]
# 下边界超平面
b = clf.support_vectors_[0]
yy_down = a * xaxis + (b[1] - a * b[0])
# 上边界超平面
b = clf.support_vectors_[-1]
yy_up = a * xaxis + (b[1] - a * b[0])
# 绘制超平面
plt.plot(xaxis, y_sep, 'k-')
plt.plot(xaxis, yy_down, 'k--')
plt.plot(xaxis, yy_up, 'k--')
# 绘制支持向量
plt.xlabel('$x^{(1)}$')
plt.ylabel('$x^{(2)}$')
plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1],
s=150, facecolors='none', edgecolors='k')
plt.show()
习题7.3
线性支持向量机还可以定义为以下形式:
试求其对偶形式。
解答:
解答思路:
参考书中第7.2.2节“学习的对偶算法”内容`
- 根据附录C 拉格朗日对偶性,写出拉格朗日函数;
- 对
求 的极小; - 对
求 的极大; - 整理得到对偶形式。
解答步骤:
第1步:原始问题的拉格朗日函数
根据书中附录C 拉格朗日对偶性:
假设
是定义在 上的连续可微函数。考虑约束最优化问题 称此约束最优化问题为原始最优化问题,或原始问题。
引入广义拉格朗日函数
这里,
, 是拉格朗日乘子, 。考虑 的函数: 这里,下标
表示原始问题。
根据书中附录C的原始问题极小化:
如果考虑极小化问题
它是与原始最优化问题(C.1)~(C.3)等价的,即它们有相同的解。问题
称为广义拉格朗日函数的极小极大问题。
根据题意,原始问题为
根据最优化函数的对应关系,可得
根据拉格朗日函数的定义,可得原始问题的拉格朗日函数为
其中,
第2步:对
根据拉格朗日对偶性,对偶问题是拉格朗日函数的极大极小问题,先对
可得:
将上式代入到原始问题的拉格朗日函数中,可得
第3步:对
根据第2步,对
第4步:进行公式变换,得到对偶形式
再将对目标函数求极大转换为求极小,于是得到原始问题的对偶形式
习题7.4
证明内积的正整数幂函数:$$K(x,z)=(x \bullet z)^p$$是正定核函数,这里
解答:
解答思路:
- 写出正定核函数的判定依据
- 使用数学归纳法,证明
- 当
时,根据定理7.5,证明 是正定核函数 - 假设当
且 时, 是正定核函数 - 证明当
时, 是正定核函数
解答步骤:
第1步:列出正定核函数的判定依据
根据书中第7章的定理7.5(正定核的充要条件):
定理7.5(正定核的充要条件) 设
是对称函数,则 为正定核函数的充要条件是对任意 , 对应的Gram矩阵: 是半正定矩阵。
第2步:使用数学归纳法,证明
- 当
时, ,对任意 ,有
可得,当
- 假设
且 是大于1的正整数时, 是正定核函数
根据书中第7章的定义7.6的(核函数):
定义7.6(核函数) 设
是输入空间(欧式空间 的子集或离散集合),又设 为特征空间(希尔伯特空间),如果存在一个从 到 的映射 使得对所有
,函数 满足条件 则称
为核函数, 为映射函数,式中 为 和 的内积。
故存在一个输入空间为
使得对所有
可假设
- 当
时
可得
故存在从
根据《矩阵分析》书中定理7.5.3:
7.5.3定理 如果
是半正定矩阵,则 也是半正定矩阵,此外如果 和 都是正定矩阵,则 也是正定矩阵。
其中,称为 和 的Hadamard乘积。
由根据书中定理7.5,可得
根据数学归纳法可得:
当
参考文献
【1】Roger A.Horn, Charles R.Johnson, 杨奇(译). 矩阵分析[M]. 2005(1):324
