[Hands On ML] 5. 支持向量机
生活随笔
收集整理的這篇文章主要介紹了
[Hands On ML] 5. 支持向量机
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 線性支持向量機分類
- 2. 非線性支持向量機分類
- 2.1 多項式核
- 2.2 高斯 RBF 核
- 3. 支持向量機回歸
- 4. 原理
本文為《機器學習實戰:基于Scikit-Learn和TensorFlow》的讀書筆記。
中文翻譯參考
SVM 特別適合應用于復雜但中小規模數據集的分類問題。
可參考:《統計學習方法》支持向量機(Support Vector Machines,SVM) 筆記
1. 線性支持向量機分類
- 硬間隔最大化:數據必須線性可分,間隔內無數據點
- 軟件間隔最大化:允許部分點在間隔內,甚至越過分類線,使用超參數 c 控制
較小的 c:懲罰小,間隔更大,較大的 c:懲罰大,間隔小
如果 SVM 模型過擬合,可以嘗試通過減小超參數C去調整
SVM 對特征縮放比較敏感
2. 非線性支持向量機分類
很多時候,數據是線性不可分的,我們可以增加特征,下圖左側數據線性不可分,增加 x2 項以后就可分了
2.1 多項式核
- 添加多項式特征,產生了大量的特征,使模型變慢
- 使用核技巧,可以取得同等的效果,同時沒有特征組合爆炸
- 如果模型過擬合,可以減小多項式核的階數,欠擬合則增大階數
- 超參數 coef0 控制高階多項式與低階多項式對模型的影響
2.2 高斯 RBF 核
gamma1, gamma2 = 0.1, 5 C1, C2 = 0.001, 1000 hyperparams = (gamma1, C1), (gamma1, C2), (gamma2, C1), (gamma2, C2)svm_clfs = [] for gamma, C in hyperparams:rbf_kernel_svm_clf = Pipeline([("scaler", StandardScaler()),("svm_clf", SVC(kernel="rbf", gamma=gamma, C=C))])rbf_kernel_svm_clf.fit(X, y)svm_clfs.append(rbf_kernel_svm_clf)plt.figure(figsize=(11, 7))for i, svm_clf in enumerate(svm_clfs):plt.subplot(221 + i)plot_predictions(svm_clf, [-1.5, 2.5, -1, 1.5])plot_dataset(X, y, [-1.5, 2.5, -1, 1.5])gamma, C = hyperparams[i]plt.title(r"$\gamma = {}, C = {}$".format(gamma, C), fontsize=16)plt.show()- 增大 γ 使鐘型曲線更窄,在單個樣本周圍環繞
- 較小 γ 使鐘型曲線更寬,樣本有更大的影響范圍,判定邊界最終則更加平滑
- 如果模型過擬合,減小γ值,若欠擬合,增大γ
計算復雜度
3. 支持向量機回歸
回歸:在間隔內放置盡可能多的樣本點
from sklearn.svm import LinearSVR svm_reg = LinearSVR(epsilon=1.5, random_state=1)間隔大小由 ?\epsilon? 控制
from sklearn.svm import SVR svm_poly_reg1 = SVR(kernel="poly", degree=2, C=100, epsilon=0.1, gamma="auto") svm_poly_reg2 = SVR(kernel="poly", degree=2, C=0.01, epsilon=0.1, gamma="auto")多項式核化的非線性SVM
4. 原理
y^={0if?wTx+b<01if?wTx+b≥0\hat{y}=\left\{\begin{array}{l}0 \text { if } \mathbf{w}^{T} \mathbf{x}+b<0 \\ 1 \text { if } \mathbf{w}^{T} \mathbf{x}+b \geq 0\end{array}\right.y^?={0?if?wTx+b<01?if?wTx+b≥0?
- 兩個平面的交界線,決策邊界
- 虛線表示:決策函數等于 1 或 -1 的點:它們平行,且到決策邊界的距離相等,形成一個間隔
- 訓練線性 SVM 分類器意味著找到w值和b值使得這一個間隔盡可能大,同時避免間隔違規(硬間隔)或限制它們(軟間隔)
總結
以上是生活随笔為你收集整理的[Hands On ML] 5. 支持向量机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1221. 分割平衡字
- 下一篇: LeetCode 1487. 保证文件名