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)图形上的区别如下:
对于样本
,传统的回归模型通常直接输出
与真实输出
之间的差别来计算损失,当且仅当
与
完全相同时,损失才是零。与此不同 SVR 假设我们能容忍
与
之间最多有
的偏差,即仅当
与
之间的差别绝对值大于
时才计算损失。这相当于以
为中心 构建一个宽度为
的间隔带,若样本落入此间隔带,则认为是预测正确的,如下图:
数学形式
【参考】
于是 SVR 问题可以形式化为:
其中 C 正则化常数,
是下图的
ε-不敏感损失(ε-insensitive loss)函数:
引入松弛变量
和
(间隔两侧的松弛程度有可能不同),可以将式(C2)重写为:
拉格朗日对偶形式
通过引入
,由拉格朗日乘子可以得到式(C3) 的拉格朗日函数:
将
带入上式,并令
的偏导为零,得到:
将式(C5)带入式(C4)可以得到 SVR 的对偶问题:
KKT 与最终决策函数
上述过程满足的 KKT 条件为:
可以看出,当且仅当
时,
能取非零值,当且仅当,
时
能取非零值。换言之,仅当样本
不落入 ε-间隔带中,相应的
和
才能取非零值。此外,约束
与
不能同时成立,因此
和
中至少有一个为零。
将式(C5)第一项带入决策函数,可得最终的决策函数为:
能使上式中
成立的样本即为 SVR 的支持向量,他们必然落在
ε-间隔带之外。显然 SVR 的支持向量仅是训练样本的一部分,即其解仍然具有稀疏性。由 KKT 条件可以看出,对于每个样本
都有
且
,于是在得到
之后,若
则必有
,继而有:
因此,若求解式(C6)得到 \alpha_i 后,理论上说可以任意选取满足
的样本,通过式(C9)求得 b。在实践中采用一种更鲁棒的办法:选择多个(或所有)满足条件
的样本求解 b 后去平均值。
核函数的形式最终的决策函数为:
其中
为核函数。
不同核的回归效果
【参考】
下面这一段实践建议我个人觉得也是很中用的:
基于 Sklearn 的实践建议
【参考】
避免数据拷贝
核缓存的大小:对于
SCV、SVR、NuSVC和NuSVR,核函数缓存的大小对于大型问题的运行时间有着非常大的影响。如果有足够多的内存,建议把cache_size的大小设置的尽可能的大。设置 C:1 是一个合理的默认选择,如果有较多噪点数据,你应该较少
C的大小。SVM 算法不是尺度不变,因此强烈建议缩放你的数据。如将输入向量 X 的每个属性缩放到[0,1] 或者 [-1,1],或者标准化为均值为 0 方差为 1 。另外,在测试向量时也应该使用相同的缩放,已获得有意义的结果。
对于
SVC,如果分类的数据不平衡(如有很多的正例很少的负例),可以设置class_weight='balanced',或者尝试不同的惩罚参数C底层实现的随机性:
SVC和NuSVC的底层实现使用了随机数生成器,在概率估计时混洗数据(当probability设置为True),随机性可以通过random_state参数控制。如果probability设置为False,这些估计不是随机的,random_state对结果不在有影响。使用
L1惩罚来产生稀疏解


,传统的回归模型通常直接输出
与真实输出
之间的差别来计算损失,当且仅当
的偏差,即仅当
的间隔带,若样本落入此间隔带,则认为是预测正确的,如下图:

![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD0lNUNsYXJnZSU3QislNUNiZWdpbiU3QnNwbGl0JTdEKyU1Q21pbl8lN0IlNUNvbWVnYSUyQ2IlN0QlNUNmcmFjJTdCMSU3RCU3QjIlN0QlNUNBcnJvd3ZlcnQrJTVDb21lZ2ErJTVDQXJyb3d2ZXJ0JTVFMislMkIrQyU1Q3N1bV8lN0JpJTNEMSU3RCU1RSU3Qm0lN0QlNUNlbGxfJTdCJTVDZXBzaWxvbiU3RCUyOGYlMjglNUNib2xkc3ltYm9sJTdCeCU3RF9pJTI5Ky0reV9pJTI5KyU1Q2VuZCU3QnNwbGl0JTdEKyU3RCU1Q3RhZyU3QkMxJTdE.png)
是下图的 ![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD0lNUNsYXJnZSU3QislNUNlbGxfJTdCJTVDZXBzaWxvbiU3RCUyOHolMjkrJTNEKyslNUNiZWdpbiU3QmNhc2VzJTdEKzAlMkMlMjZpZiU1QyUzQiU3Q3olN0MlNUNsZSslNUNlcHNpbG9uKyU1QyU1QysrKyU3Q3olN0MtJTVDZXBzaWxvbiUyQyUyNm90aGVyd2lzZSsrJTVDZW5kJTdCY2FzZXMlN0QrJTdEJTVDdGFnJTdCQzIlN0Q=.png)

和
(间隔两侧的松弛程度有可能不同),可以将式(C2)重写为:![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD0lNUNsYXJnZSU3QislNUNiZWdpbiU3QnNwbGl0JTdEKyUyNiU1Q21pbl8lN0IlNUNvbWVnYSUyQ2IlN0QlNUNmcmFjJTdCMSU3RCU3QjIlN0QlNUNBcnJvd3ZlcnQrJTVDb21lZ2ErJTVDQXJyb3d2ZXJ0JTVFMislMkIrQyU1Q3N1bV8lN0JpJTNEMSU3RCU1RSU3Qm0lN0QlMjglNUN4aV9pKyUyQislNUNoYXQlN0IlNUN4aSU3RF9pJTI5KyU1QyU1Qysrcy50LiU1QyUzQiUyNitmJTI4JTVDYm9sZHN5bWJvbCU3QnglN0RfaSUyOSstK3lfaSslNUNsZSslNUNlcHNpbG9uKyUyQislNUN4aV9pKyU1QyU1QysrJTI2K3lfaSstK2YlMjglNUNib2xkc3ltYm9sJTdCeCU3RF9pJTI5KyU1Q2xlKyU1Q2Vwc2lsb24rJTJCKyU1Q2hhdCU3QiU1Q3hpJTdEX2krJTVDJTVDKyslMjYrJTVDeGlfaSslNUNndCswJTVDJTNCKyU1Q2hhdCU3QiU1Q3hpJTdEX2krJTVDZ3QrMCU1QyUzQmklM0QxJTJDMiUyQzMuLi5tKyU1Q2VuZCU3QnNwbGl0JTdEKyU3RCU1Q3RhZyU3QkMzJTdE.png)

,由拉格朗日乘子可以得到式(C3) 的拉格朗日函数:![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD0lNUNsYXJnZSU3QislNUNiZWdpbiU3QnNwbGl0JTdEKyUyNkwlMjglNUNib2xkc3ltYm9sJTdCJTVDb21lZ2ElN0QlMkNiJTJDJTVDYm9sZHN5bWJvbCU3QiU1Q2FscGhhJTdEJTJDJTVDaGF0JTdCJTVDYm9sZHN5bWJvbCU3QiU1Q2FscGhhJTdEJTdEJTJDJTVDYm9sZHN5bWJvbCU3QiU1Q3hpJTdEJTJDJTVDaGF0JTdCJTVDYm9sZHN5bWJvbCU3QiU1Q3hpJTdEJTdEJTJDJTVDYm9sZHN5bWJvbCU3QiU1Q211JTdEJTJDJTVDaGF0JTdCJTVDYm9sZHN5bWJvbCU3QiU1Q211JTdEJTdEJTI5KyU1QyU1QysrJTI2JTNEKyU1Q2ZyYWMlN0IxJTdEJTdCMiU3RCU1Q0Fycm93dmVydCU1Q2JvbGRzeW1ib2wlN0IlNUNvbWVnYSU3RCU1Q0Fycm93dmVydCU1RTIrJTJCKytDJTVDc3VtXyU3QmklM0QxJTdEJTVFJTdCbSU3RCUyOCU1Q3hpX2krJTJCKyU1Q2hhdCU3QiU1Q3hpJTdEaSUyOSstJTVDc3VtXyU3QmklM0QxJTdEJTVFJTdCbSU3RCU1Q211X2klNUN4aV9pKy0rJTVDc3VtXyU3QmklM0QxJTdEJTVFJTdCbSU3RCU1Q2hhdCU3QiU1Q211JTdEaSU1Q2hhdCU3QiU1Q3hpJTdEX2krJTVDJTVDKyslMjYrJTJCKyU1Q3N1bSU3QmklM0QxJTdEJTVFJTdCbSU3RCU1Q2FscGhhX2klNUNsZWZ0JTI4ZiUyOCU1Q2JvbGRzeW1ib2wlN0J4JTdEaSUyOSstK3lfaSstKyU1Q2Vwc2lsb24rLSslNUN4aV9pJTVDcmlnaHQlMjkrJTVDJTVDKyslMjYrJTJCKyU1Q3N1bSU3QmklM0QxJTdEJTVFJTdCbSU3RCU1Q2hhdCU3QiU1Q2FscGhhJTdEX2klNUNsZWZ0JTI4eV9pKy0rZiUyOCU1Q2JvbGRzeW1ib2wlN0J4JTdEX2klMjkrLSslNUNlcHNpbG9uKy0rJTVDaGF0JTdCJTVDeGklN0RfaSU1Q3JpZ2h0JTI5KyU1QyslNUNlbmQlN0JzcGxpdCU3RCslN0QlNUN0YWclN0JDNCU3RA==.png)
带入上式,并令
的偏导为零,得到:![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD0lNUNsYXJnZSU3QislNUNiZWdpbiU3QnNwbGl0JTdEKyU1Q2JvbGRzeW1ib2wlN0IlNUNvbWVnYSU3RCslMjYlM0QrJTVDc3VtXyU3QmklM0QxJTdEJTVFJTdCbSU3RCUyOCU1Q2hhdCU3QiU1Q2FscGhhJTdEaSstKyU1Q2FscGhhX2klMjklNUNib2xkc3ltYm9sJTdCeCU3RF9pKyU1QyU1QysrMCslMjYlM0QrJTVDc3VtJTdCaSUzRDElN0QlNUUlN0JtJTdEJTI4JTVDaGF0JTdCJTVDYWxwaGElN0RfaSstKyU1Q2FscGhhX2klMjkrJTVDJTVDKytDKyUyNiUzRCslNUNhbHBoYV9pKyUyQislNUNtdV9pJTVDJTVDKytDKyUyNiUzRCslNUNoYXQlN0IlNUNhbHBoYSU3RF9pKyUyQislNUNoYXQlN0IlNUNtdSU3RF9pJTVDKyU1Q2VuZCU3QnNwbGl0JTdEKyU3RCU1Q3RhZyU3QkM1JTdE.png)
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD0lNUNsYXJnZSU3QislNUNiZWdpbiU3QnNwbGl0JTdEKyUyNiU1Q21heF8lN0IlNUNib2xkc3ltYm9sJTdCJTVDYWxwaGElMkMlNUNoYXQlN0IlNUNhbHBoYSU3RCU3RCU3RCU1QyUzQiU1QyUzQislNUNzdW1fJTdCaSUzRDElN0QlNUUlN0JtJTdEeV9pJTI4JTVDaGF0JTdCJTVDYWxwaGElN0RpKy0rJTVDYWxwaGFfaSUyOSstKyU1Q2Vwc2lsb24lMjglNUNoYXQlN0IlNUNhbHBoYSU3RF9pKyUyQislNUNhbHBoYV9pJTI5KyU1QyU1QysrJTI2KyU1Q3FxdWFkKy0lNUNmcmFjJTdCMSU3RCU3QjIlN0QrJTVDc3VtXyU3QmklM0QxJTdEJTVFJTdCbSU3RCU1Q3N1bV8lN0JqJTNEMSU3RCU1RSU3Qm0lN0QlMjglNUNoYXQlN0IlNUNhbHBoYSU3RGkrLSslNUNhbHBoYV9pJTI5JTI4JTVDaGF0JTdCJTVDYWxwaGElN0RfaistKyU1Q2FscGhhX2olMjklNUNib2xkc3ltYm9sJTdCeCU3RF9pJTVFJTdCVCU3RCU1Q2JvbGRzeW1ib2wlN0J4JTdEX2olNUMlNUMrJTI2cy50LiU1QyUzQiU1QyUzQislNUNzdW1fJTdCaSUzRDElN0QlNUUlN0JtJTdEJTI4JTVDaGF0JTdCJTVDYWxwaGElN0RfaSstKyU1Q2FscGhhX2klMjkrJTNEKzArJTVDJTVDKyslMjYlNUNxcXVhZCU1Q3F1YWQrMCslNUNsZSslNUNhbHBoYV9pJTJDJTVDJTNCJTVDaGF0JTdCJTVDYWxwaGElN0RfaSslNUNsZStDKyU1Q2VuZCU3QnNwbGl0JTdEKyU3RCU1Q3RhZyU3QkM2JTdE.png)
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD0lNUNsYXJnZSU3QislNUNiZWdpbiU3QmNhc2VzJTdEKyU1Q2FscGhhX2klNUNsZWZ0JTI4ZiUyOCU1Q2JvbGRzeW1ib2wlN0J4JTdEX2klMjkrLSt5X2krLSslNUNlcHNpbG9uKy0rJTVDeGlfaSU1Q3JpZ2h0JTI5KyUzRCswKyU1QyU1QysrJTVDaGF0JTdCJTVDYWxwaGElN0RfaSU1Q2xlZnQlMjh5X2krLStmJTI4JTVDYm9sZHN5bWJvbCU3QnglN0RfaSUyOSstKyU1Q2Vwc2lsb24rLSslNUNoYXQlN0IlNUN4aSU3RF9pJTVDcmlnaHQlMjkrJTNEKzAlNUMlNUMrKyU1Q2FscGhhX2klNUNoYXQlN0IlNUNhbHBoYSU3RF9pKyUzRCswJTJDJTVDJTNCJTVDJTNCJTVDeGlfaSU1Q2hhdCU3QiU1Q3hpJTdEX2krJTNEKzArJTVDJTVDKyslMjhDKy0rJTVDYWxwaGFfaSUyOSU1Q3hpX2krJTNEKzAlMkMlNUMlM0IlNUMlM0IlMjhDKy0rJTVDaGF0JTdCJTVDYWxwaGElN0RfaSUyOSU1Q2hhdCU3QiU1Q3hpJTdEX2krJTNEKzArJTVDZW5kJTdCY2FzZXMlN0QrJTdEJTVDdGFnJTdCQzclN0Q=.png)
时,
能取非零值,当且仅当,
时
能取非零值。换言之,仅当样本
不落入 ε-间隔带中,相应的
和
与
中至少有一个为零。![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD0lNUNsYXJnZSU3QislNUNiZWdpbiU3QnNwbGl0JTdEK2YlMjglNUNib2xkc3ltYm9sJTdCeCU3RCUyOSslM0QrJTVDc3VtXyU3QmklM0QxJTdEJTVFbislMjglNUNoYXQlN0IlNUNhbHBoYSU3RF9pKy0rJTVDYWxwaGFfaSUyOSU1Q2JvbGRzeW1ib2wlN0J4JTdEX2klNUUlN0JUJTdEJTVDYm9sZHN5bWJvbCU3QnglN0RfaislMkIrYislNUNlbmQlN0JzcGxpdCU3RCslN0QlNUN0YWclN0JDOCU3RA==.png)
成立的样本即为 SVR 的支持向量,他们必然落在
且
,于是在得到
则必有
,继而有:![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD0lNUNsYXJnZSU3QislNUNiZWdpbiU3QnNwbGl0JTdEK2IrJTNEK3lfaSslMkIrJTVDZXBzaWxvbistKyslNUNzdW1fJTdCaSUzRDElN0QlNUVuKyUyOCU1Q2hhdCU3QiU1Q2FscGhhJTdEX2krLSslNUNhbHBoYV9pJTI5JTVDYm9sZHN5bWJvbCU3QnglN0RfaSU1RSU3QlQlN0QlNUNib2xkc3ltYm9sJTdCeCU3RF9qKyU1Q2VuZCU3QnNwbGl0JTdEKyU3RCU1Q3RhZyU3QkM5JTdE.png)
![[公式]](/image/aHR0cHM6Ly93d3cuemhpaHUuY29tL2VxdWF0aW9uP3RleD0lNUNsYXJnZSU3QislNUNiZWdpbiU3QnNwbGl0JTdEK2YlMjglNUNib2xkc3ltYm9sJTdCeCU3RCUyOSslM0QrJTVDc3VtXyU3QmklM0QxJTdEJTVFbislMjglNUNoYXQlN0IlNUNhbHBoYSU3RF9pKy0rJTVDYWxwaGFfaSUyOSslNUNrYXBwYSUyOCU1Q2JvbGRzeW1ib2wlN0J4JTdEJTJDKyU1Q2JvbGRzeW1ib2wlN0J4JTdEX2klMjkrJTJCK2IrJTVDZW5kJTdCc3BsaXQlN0QrJTdEJTVDdGFnJTdCQzklN0Q=.png)
为核函数。