机器学习(周志华) 参考答案 第六章 支持向量机
机器学习(周志华西瓜书) 参考答案 总目录
总的来说支持向量机这章书上讲的比较全面,公式和推到都比较详细,可惜的就是没有具体的SMO算法过程
1.试证明样本空间中任意点x到超平面(w,b)的距离为式(6.2)。
超平面(w,b)的平面法向量为w, 任取平面上一点x0,有wTx0+b=0。x到平面的距离就是x到x0的距离往w方向的投影,就是|wT(x−x0)||w|=|wTx+b||w|。
2.使用libsvm,在西瓜数据集3.0α上分别用线性核和高斯核训练一个SVM,并比较其支持向量的差别。
由于电脑的vs是2015的,而matlab上最高只支持2013来编译libsvm,所以只能在vs上用libsvm了。
训练的结果是线性核与高斯核得到了完全一样的支持向量,由于没去分析libsvm内部是如何计算的,这里只贴结果。
第一列是支持向量的权值,后面则是支持向量对应的属性
a_i | x_1 | x_2 |
---|---|---|
1 | 0.697 | 0.46 |
1 | 0.744 | 0.376 |
1 | 0.634 | 0.264 |
1 | 0.608 | 0.318 |
1 | 0.556 | 0.215 |
1 | 0.403 | 0.237 |
1 | 0.481 | 0.149 |
1 | 0.437 | 0.211 |
-1 | 0.666 | 0.091 |
-1 | 0.243 | 0.267 |
-1 | 0.343 | 0.099 |
-1 | 0.639 | 0.161 |
-1 | 0.657 | 0.198 |
-1 | 0.36 | 0.37 |
-1 | 0.593 | 0.042 |
-1 | 0.719 | 0.103 |
3.选择两个UCI数据集,分别用线性核和高斯核训练一个SVM,并与BP神经网络和C4.5决策树进行实验比较。
使用的是iris数据集,选取其中分类为1,2的样本,各50个,4属性。
每类选前40个样本训练,后10个样本作为测试
线性核:找出3个支持向量
a_i | x_1 | x_2 | x_3 | x_4 |
---|---|---|---|---|
0.04 | 5.1 | 3.3 | 1.7 | 0.5 |
0.16 | 4.8 | 3.4 | 1.9 | 0.2 |
-0.20 | 4.9 | 2.5 | 4.5 | 1.7 |
偏置为1.50709
高斯核:找出9个支持向量
a_i | x_1 | x_2 | x_3 | x_4 |
---|---|---|---|---|
0.48 | 4.4 | 2.9 | 1.4 | 0.2 |
0.45 | 4.3 | 3 | 1.1 | 0.1 |
0.90 | 5.7 | 4.4 | 1.5 | 0.4 |
-0.17 | 6.3 | 3.3 | 6 | 2.5 |
-0.66 | 4.9 | 2.5 | 4.5 | 1.7 |
-0.03 | 6.5 | 3.2 | 5.1 | 2 |
-0.40 | 7.7 | 2.6 | 6.9 | 2.3 |
-0.15 | 6 | 2.2 | 5 | 1.5 |
-0.41 | 7.9 | 3.8 | 6.4 | 2 |
偏置为-0.212437
编写一个验证的matlab程序
读取数据
w1 = xlsread('C:\Users\icefire\Desktop\ml\tmp.xlsx', 'sheet1', 'A1:C1');
w2 = xlsread('C:\Users\icefire\Desktop\ml\tmp.xlsx', 'sheet1', 'D1:L1');
x1 = xlsread('C:\Users\icefire\Desktop\ml\tmp.xlsx', 'sheet1', 'A2:C5');
x2 = xlsread('C:\Users\icefire\Desktop\ml\tmp.xlsx', 'sheet1', 'D2:L5');
x = xlsread('C:\Users\icefire\Desktop\ml\tmp.xlsx', 'sheet1', 'A7:T10');
y1=zeros(20,1);
y2=zeros(20,1);
%验证线性核
for i=1:20
for j=1:3
y1(i)=y1(i)+w1(j)*(x(:,i)'*x1(:,j));
end
end
y1=y1+1.50709;
%验证高斯核
for i=1:20
for j=1:9
y2(i)=y2(i)+w2(j)*exp(-0.25*(x2(:,j)-x(:,i))'*(x2(:,j)-x(:,i)));
end
end
y2=y2-0.212437;
得到结果表格如下
y1 | y2 | y |
---|---|---|
1.155205016 | 1.164557907 | 1 |
0.997242309 | 0.780919564 | 1 |
1.148298718 | 1.068992278 | 1 |
0.906038093 | 1.085988234 | 1 |
0.842638654 | 1.042299416 | 1 |
1.035492502 | 1.062906963 | 1 |
1.062585631 | 1.141980465 | 1 |
1.09304642 | 1.100071803 | 1 |
1.101546038 | 1.141056647 | 1 |
1.103671899 | 1.13405161 | 1 |
-1.839224592 | -1.049900524 | 0 |
-1.542242776 | -0.95432202 | 0 |
-1.471406411 | -1.085122464 | 0 |
-1.958761346 | -1.084832335 | 0 |
-1.895362864 | -1.029274823 | 0 |
-1.608120552 | -1.002438466 | 0 |
-1.448029593 | -1.0262247 | 0 |
-1.519044109 | -1.03794725 | 0 |
-1.658415695 | -0.995288562 | 0 |
-1.402518712 | -1.058306748 | 0 |
这里没和神经网络和决策树做对比了,这个数据集的数据线性可分,应该都是0误差。
4.讨论线性判别分析与线性核支持向量机在何种情况下等价。
在线性可分的情况下,LDA求出的w_l与线性核支持向量机求出的w_s有w_l*w_s=0,即垂直,此时两者是等价的。
当初在做这个题的时候也没细想,就想当然的认为在线性可分时两者求出来的w会垂直,现在看来并不一定。
首先,如果可以使用软间隔的线性SVM,其实线性可分这个条件是不必要的,如果是硬间隔线性SVM,那么线性可分是必要条件。这个题只说了是线性SVM,就没必要关心数据是不是可分,毕竟LDA是都可以处理的。
第二,假如当前样本线性可分,且SVM与LDA求出的结果相互垂直。当SVM的支持向量固定时,再加入新的样本,并不会改变求出的w,但是新加入的样本会改变原类型数据的协方差和均值,从而导致LDA求出的结果发生改变。这个时候两者的w就不垂直了,但是数据依然是可分的。所以我上面说的垂直是有问题的。
我认为这个题的答案应该就是,当线性SVM和LDA求出的w互相垂直时,两者是等价的,SVM这个时候也就比LDA多了个偏移b而已。
5.试述高斯核SVM与RBF神经网络的联系
RBF网络的径向基函数与SVM都可以采用高斯核,也就分别得到了高斯核RBF网络与高斯核SVM。
神经网络是最小化累计误差,将参数作为惩罚项,而SVM相反,主要是最小化参数,将误差作为惩罚项。
在二分类问题中,如果将RBF中隐层数为样本个数,且每个样本中心就是样本参数,得出的RBF网络与核SVM基本等价,非支持向量将得到很小的w.
使用LIBSVM对异或问题训练一个高斯核SVM得到α,修改第5章RBF网络的代码,固定β参数为高斯核SVM的参数,修改每个隐层神经元的中心为各个输入参数,得到结果w,w与α各项成正比例。
6.试析SVM对噪声敏感的原因。
SVM的目的是求出与支持向量有最大化距离的直线,以每个样本为圆心,该距离为半径做圆,可以近似认为圆内的点与该样本属于相同分类。如果出现了噪声,那么这个噪声所带来的错误分类也将最大化,所以SVM对噪声是很敏感的。
7.试给出式(6.52)的完整KT条件。
非等式约束写成拉格朗日乘子式,取最优解要满足两个条件
- 拉格朗日乘子式对所有非拉格朗日参数的一阶偏导为0
- 非等式约束对应的拉格朗日项,要么非等式的等号成立,要么对应的拉格朗日参数为0
所以得到完整KT条件
w=\sum_i(α_i'-α_i)x_i
0=\sum_i(α_i'-α_i)
对所有的i
C=α_i+u_i
C=α_i'+u_i'
α_i(f(x_i)-y_i-ε-ξ_i)=0
α_i'(y_i-f(x_i)-ε-ξ_i')=0
(C-α_i)ξ_i=0
(C-α_i')ξ_i'=0
8.以西瓜数据集3.0α的“密度”属性为输入,“含糖率”为输出,使用LIBSVM训练一个SVR。
含糖率和密度有什么必然联系吗?训练后得到的支持向量为
α_i | 密度x_i |
---|---|
1 | 0.697 |
1 | 0.744 |
0.798 | 0.608 |
-1 | 0.666 |
0.452 | 0.243 |
-1 | 0.245 |
-0.25 | 0.343 |
1 | 0.36 |
-1 | 0.593 |
-1 | 0.719 |
偏置为 0.213589
得到含糖率与密度的关系
假设密度为x
含糖率(x)=\sum_i{α_ie^{-(x-x_i)^2}}+0.213589
9.试使用和技巧推广对率回归,产生“核对率回归”。
10.设计一个显著减少SVM中支持向量数目而不显著降低泛化性能的方法。
对于线性的SVM,三个属性不完全一样的支持向量就能确定这个SVM,而其他的落在边缘上的点都可以舍弃。
还没太想明白,以后有机会更新。