机器学习思考题目——05支持向量机(SVM)

本文直译自《hands on ML》课后题。(有改动的以【】表示)。

1.支持向量机的基本原理(fundamental idea)是什么?

【硬间隔】支持向量机的基本原理是在(不同的)类间找到合适的最宽的‘街道’(street)。换句话说,目标是在划分两类训练样本的决策边界之间找到最大的间隔。
【软间隔】当用软间隔(soft-margin)进行分类时,SVM在‘完美划分两类’和‘找到最宽街道’之间做一个折中(亦即少数样本会落到‘街道’上)。
【核】另外一个关键思想是当在非线性数据集上用核(kernel)。

2. 什么是支持向量(support vector)?

训练完一个SVM之后,落在‘街道’(street)及其边界上的样本称为支持向量。
决策边界完全由这些支持向量决定。不是支持向量的样本(亦即远离‘街道’的那些)对SVM没有任何影响;可以移除它们,添加更多样本或者移动它们,只要它们远离‘街道’它们就不会影响决策边界。计算预测值时只用到支持向量而非整个训练集。

3.为什么用SVM的时候,scale the input 很重要?

SVM是在不同的类中寻找最宽的合适街道,因此如果训练集没有scaled,SVM倾向于忽视小特征。如下图所示:左图为Unscaled,右图为Scaled。
在这里插入图片描述

4.SVM分类器在对样本进行分类的时候,能输出置信度数值(confidence score)么?能输出概率值么?

SVM分类器能输出(测试)样本和决策边界的距离,可以把这个距离当做一个置信度数值。当然,这个数值不能直接转化成类的概率。在Scikit-Learn的SVM函数中,设置probability=True,训练完之后,程序会用LogisticsRegression把SVM输出的分值校准(calibrate)为概率值(在这个训练集上对LR用五折交叉验证训练)。这会给SVM(python对象)添加predict_proba()和predict_log_proba()方法。

5.在一个有百万量级的样本和数以百计的特征的训练集上,该用原始形式还是对偶形式的SVM来训练模型?

这个问题只能是对线性SVM来说有意义,因为核-SVM只能用 对偶形式。
SVM的原始形式的计算复杂度与样本数m成比例(O(m)),对偶形式的计算复杂度在m2和m3之间(O(m2)~O(m3))。因此如果有百万量级的样本,肯定需要用原始形式,因为对偶形式慢得多。

6.假如用RBF核训练一个SVM分类器的时候,模型似乎出现欠拟合了:此时应该增大还是减小γ(gamma)?增大还是减小C?

欠拟合可能是因为过分正则化了。需要增加gamma或增加C(或二者都增加)。

7.用现成(off-the-shelf )的QP(二次规划,Quadratic Programming)求解器,如何设置QP参数(H,f,A,b)来解决软间隔线性SVM分类问题?【另一种表述,如何设置这些参数,把软间隔线性SVM模型转化为二次规划问题】【除非特别说明,以下向量默认为列向量】

把硬间隔SVM问题的QP参数记为H’,f’,A’,b’。软间隔问题的QP参数有m个额外参数和m个额外的约束条件。这些可以定义如下:
(a)对H’扩充,在其右侧添加m列0向量,在其底部添加m行0向量。得到H,如下:
在这里插入图片描述
(b)在f’(尾端)添加m个超参数C,得到f。
(c)在b’(尾端)添加m个0,得到b。
(d)对A’进行扩充,在其右侧添加m阶单位矩阵,在其右下方添加m阶负单位矩阵,其下方添加0矩阵,得到A如下:【个人觉得原答案有问题,右上角应该也为负单位矩阵,下面有解释】
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36810398/article/details/88298960