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)
為核函數。