一、SVM代价函数
支持向量机(SVM, Support Vector Machines)是一种非常流行与强大的监督算法。
SVM 的代价函数与逻辑回归的代价函数很相似。
逻辑回归与 SVM 的代价函数
现在定义
SVM 代价函数演化过程
其中,参数 C 相当于
SVM 代价函数最终形态
如果你有一个正样本,即
反之,如果有一个负样本,即
SVM 优化目标
最后,SVM 的假设函数
SVM 假设函数
二、大边距分类器
在SVMs中,决策边界有一个特殊的属性:尽可能远离正样本和负样本。决策边界与离便觉最近样本的距离称为边距。 由于 SVM 最大化此边距,因此通常称为「大边距分类器」。
大边距分类器
SVM 需要尽可能最大化边距,那么只有参数 C 值很大才能实现大边距。
因为参数 C 值很大,想要
2.2 数学解释:SVM 为何被称为大边距分类器?
解释之前需要讲解向量内积的知识:
向量内积数学含义
为了方便讲解,令
之前讲想要最小化代价函数时,我们得到如下结论:
如果 y = 1,我们希望
如果 y = 0,我们希望
根据向量内积,得
如果
如果
因为只有参数 C 值很大才能实现大边距。
三、核函数(Kernels)
核函数允许 SVM 制作复杂的非线性分类器。
给定特征
对应的,SVM 代价函数变为
其中,
高斯核函数
高斯核函数有如下的特点如下图所示。换句话说,当特征
高斯核函数的特点
3.1 高斯核函数如何选取标志 呢?
这里提供一种方法:让每一个样本
那么,就有了
3.2 参数 C 与 的取值对高斯核函数的影响
核函数的参数
2.3 核函数的选取原则
不是所有的函数都能作为核函数,核函数必须满足一个技术性要求「默塞尔定理」,需要这个条件的原因是 SVM 算法或者 SVM 实现函数有许多熟练的数值优化技巧,为了有效求解参数
四、SVM 的使用
现在已经有很多编写并优化过的 SVM 库可供直接调用,如 'liblinear' 和 'libsvm' 。 在实际应用中,应该调用 SVM 库,而不是自己编程实现 SVM 算法。
还需要注意两点:
选用高斯核函数时,要先对原特征
进行特征缩放; 并非所有相似性函数都是有效的核函数。 它们必须满足“Mercer定理”,这保证了 SVM 包中对核函数优化的运行正确。
Tips:大部分 SVM 软件包会自动增加特征
,对于这类 SVM 软件包就不需要人工在数据集中增加特征 。最好,在使用某个 SVM 软件包之前,查看是否需要人为增加特征 。
五、逻辑回归与 SVM 选择
n = 特征数量(
)
m = 样本数量
当
时,选用 逻辑回归模型; 当
较小, 适中时,选用高斯核函数的 SVM (比如n = 1~1000,m = 10~10,000); 当
时,就需要先增加特征后,再选用逻辑回归模型;
Tips:神经网络都能很好地应对上面几种情况,但是神经网络训练速度较慢
总结
SVM 实现步骤:
提取特征;
选择核函数,如果是高斯函数,还需要先进行特征缩放;
调用 SVM 软件包;
使用训练集训练模型,调整参数 C 和
执行 SVM; 用验证集计算模型误差率;
选择产生最小误差率的参数 C 和
。
% X, y, Xval, Yval 分别是训练集特征向量、训练集标签、验证集的特征向量、验证集标签C_list = [0.01,0.03,0.1,0.3,1,3,10,30]; sigma_list = [0.01,0.03,0.1,0.3,1,3,10,30]; min = [-1,0,0];for i = 1:size(C_list(:),1) for j = 1:size(sigma_list(:),1) model= svmTrain(X, y, C_list(i), @(x, l) gaussianKernel(x, l, sigma_list(j))); predictions = svmPredict(model, Xval); error = mean(double(predictions ~= yval)); if min(1) == -1 || min(1) > error min = [error, C_list(i), sigma_list(j)]; end endfor endfor
作者:数据搬瓦工
链接:https://www.jianshu.com/p/a2b23d501ca3