SVC和SVR

SVC和SVR

我们可以发现,在sklearn的SVM中有sklearn.svm.SVC()和sklearn.svm.SVR()两个方法,他们对应的其实是SVM在分类和回归两种问题下的结构:

  • support vector classify(SVC)支持分类机做二分类的,找出分类面,解决分类问题
  • support vector regression(SCR)支持回归机做曲线拟合、函数回归 ,做预测,温度,天气,股票
  • 这些都会用于数据挖掘、文本分类、语音识别、生物信息,具体问题具体分析

对于SVC,其实就是我们之前学过的SVM,这里就说一下SVR

知乎这个回答讲的非常好,我这里摘录如下:

简介

直观上来讲 SVM 分类(SVC Support Vector Classification)与 SVR(Support Vector Regression)图形上的区别如下:

img

对于样本 [公式] ,传统的回归模型通常直接输出 [公式] 与真实输出 [公式] 之间的差别来计算损失,当且仅当 [公式][公式] 完全相同时,损失才是零。与此不同 SVR 假设我们能容忍 [公式][公式] 之间最多有 [公式] 的偏差,即仅当 [公式][公式] 之间的差别绝对值大于 [公式] 时才计算损失。这相当于以 [公式] 为中心 构建一个宽度为 [公式] 的间隔带,若样本落入此间隔带,则认为是预测正确的,如下图:

img

数学形式

【参考】

img

于是 SVR 问题可以形式化为:

[公式]

其中 C 正则化常数, [公式] 是下图的 ε-不敏感损失(ε-insensitive loss)函数:

[公式]

img

引入松弛变量 [公式][公式] (间隔两侧的松弛程度有可能不同),可以将式(C2)重写为:

[公式]

img

拉格朗日对偶形式

通过引入 [公式] ,由拉格朗日乘子可以得到式(C3) 的拉格朗日函数:

[公式]

[公式] 带入上式,并令 [公式] 的偏导为零,得到:

[公式]

将式(C5)带入式(C4)可以得到 SVR 的对偶问题:

[公式]

KKT 与最终决策函数

上述过程满足的 KKT 条件为:

[公式]

可以看出,当且仅当 [公式] 时, [公式] 能取非零值,当且仅当, [公式][公式] 能取非零值。换言之,仅当样本 [公式] 不落入 ε-间隔带中,相应的 [公式][公式] 才能取非零值。此外,约束 [公式][公式] 不能同时成立,因此 [公式][公式] 中至少有一个为零。

将式(C5)第一项带入决策函数,可得最终的决策函数为:

[公式]

能使上式中 [公式] 成立的样本即为 SVR 的支持向量,他们必然落在ε-间隔带之外。显然 SVR 的支持向量仅是训练样本的一部分,即其解仍然具有稀疏性。

由 KKT 条件可以看出,对于每个样本 [公式] 都有 [公式][公式] ,于是在得到 [公式] 之后,若 [公式] 则必有 [公式] ,继而有:

[公式]

因此,若求解式(C6)得到 \alpha_i 后,理论上说可以任意选取满足 [公式] 的样本,通过式(C9)求得 b。在实践中采用一种更鲁棒的办法:选择多个(或所有)满足条件 [公式] 的样本求解 b 后去平均值。

核函数的形式最终的决策函数为:

[公式]

其中 [公式] 为核函数。

不同核的回归效果

【参考】

img

下面这一段实践建议我个人觉得也是很中用的:

基于 Sklearn 的实践建议

【参考】

  • sklearn - Tips on Practical Use

  • 避免数据拷贝
  • 核缓存的大小:对于 SCVSVRNuSVCNuSVR,核函数缓存的大小对于大型问题的运行时间有着非常大的影响。如果有足够多的内存,建议把cache_size的大小设置的尽可能的大。
  • 设置 C:1 是一个合理的默认选择,如果有较多噪点数据,你应该较少 C 的大小。
  • SVM 算法不是尺度不变,因此强烈建议缩放你的数据。如将输入向量 X 的每个属性缩放到[0,1] 或者 [-1,1],或者标准化为均值为 0 方差为 1 。另外,在测试向量时也应该使用相同的缩放,已获得有意义的结果。
  • 对于SVC,如果分类的数据不平衡(如有很多的正例很少的负例),可以设置class_weight='balanced',或者尝试不同的惩罚参数 C
  • 底层实现的随机性:SVCNuSVC的底层实现使用了随机数生成器,在概率估计时混洗数据(当 probability 设置为 True),随机性可以通过 random_state 参数控制。如果 probability 设置为False ,这些估计不是随机的,random_state 对结果不在有影响。
  • 使用 L1 惩罚来产生稀疏解


Reference

  1. https://www.cnblogs.com/ylHe/p/7676173.html
  2. https://zhuanlan.zhihu.com/p/50166358

猜你喜欢

转载自www.cnblogs.com/jiading/p/12105232.html