SVM超詳細原理總結

哈嘍,我是我不是小upper~

今天想跟大家聊聊支持向量機(SVM)。很多初學者對這個算法模型特別感興趣,它也是初學者在學習過程中非常喜愛的一種模型,更是機器學習領域中極為重要的算法之一!

今天想跟大家深入探討一下支持向量機(SVM)的細節,咱們主要從以下幾個方面來展開~

SVM 的基礎內容

  • 線性可分 SVM

    • 在較為簡單且理想的情況下,數據是線性可分的,也就是說,可以通過一個直線(在二維空間中)或平面(在三維空間中)等超平面,將不同類別的數據點完美地分隔開來。

    • 最優超平面:我們的目標是找到這樣一個超平面,它能夠使得最近的數據點(我們把這些數據點稱作支持向量)到超平面的距離達到最大值。在二維空間里,超平面就表現為一條直線。

    • 數學表達:超平面可以用下面的方程來表示:

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? w?x+b=0

    其中,w 是超平面的法向量,b 是偏置項。

    • 決策規則:基于超平面,我們采用符號函數來進行分類決策,具體如下:

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? sign(w?x+b)
    • 優化問題:我們的主要目標是最大化邊距,這可以轉化為如下的優化問題:

    ?

  • 非線性 SVM 和核方法

    • 然而,在現實場景中,數據往往并不是線性可分的。這時,核方法就派上用場了。核方法通過一個非線性映射,將原始特征空間映射到一個更高維的空間。在新的特征空間中,數據可能就變得線性可分了。

    • 核函數:常見的核函數有多種,例如多項式核、徑向基函數(RBF,也常被稱為高斯核)等。

    • 核函數的作用:借助核函數,我們能夠在原始空間中計算出點積,而無需將數據點顯式地表示在高維空間中。這大大簡化了計算過程,同時也避免了高維空間帶來的計算復雜度問題。

  • 軟間隔和正則化

    • 在現實世界的數據中,很少有數據是完全線性可分的。因此,我們引入了軟間隔的概念,允許一些數據點可以違反邊距規則。

    • 松弛變量:為了處理數據點的重疊和非可分情況,我們引入了松弛變量 ξi?。

    • 正則化參數 C:參數 C 用于控制邊距的硬度以及對錯誤分類樣本的懲罰程度,它是一個正則化參數。通過調整 C 的值,我們可以在模型的復雜度和分類準確性之間取得平衡。

  • 優化問題(軟間隔)

    • 對于軟間隔 SVM,優化問題轉變為:

    ?


以下是對支持向量機(SVM)原理及項目實踐的系統化闡述,基于技術細節展開并強化理論與代碼的對應關系:

1. SVM 核心原理與數學基礎

1.1 線性可分場景:硬間隔 SVM

當樣本數據在特征空間中線性可分時,SVM 的目標是尋找一個最優超平面,使得不同類別數據點到超平面的幾何間隔最大化

  • 超平面方程:在?n?維空間中,超平面由?\mathbf{w}^T\mathbf{x} + b = 0?表示,其中?\mathbf{w} = (w_1, w_2, \dots, w_n)?為法向量,決定超平面方向;b?為偏置項,決定超平面位置。
  • 幾何間隔:樣本點(\mathbf{x}_i, y_i)到超平面的距離為?\frac{| \mathbf{w}^T\mathbf{x}_i + b |}{\|\mathbf{w}\|},其中?y_i \in \{-1, +1\}?為類別標簽。
  • 優化目標:最大化所有樣本點的最小幾何間隔,等價于求解以下凸二次規劃問題:? ? ? ? ? ? ? ? ? ? ? ? ? ?該問題的解由少數關鍵樣本點(支持向量)決定,這些點位于間隔邊界上(y_i(\mathbf{w}^T\mathbf{x}_i + b) = 1)。
1.2?非線性場景:核方法與特征空間映射

當數據在原始特征空間非線性可分時,SVM 通過核函數將樣本映射到更高維的特征空間?\mathcal{H},使數據在?\mathcal{H}?中線性可分。

  • 核函數定義:核函數?K(\mathbf{x}_i, \mathbf{x}_j) = \phi(\mathbf{x}_i) \cdot \phi(\mathbf{x}_j)?表示原始空間中樣本在高維空間的內積,避免了顯式計算高維坐標(如?\phi(\mathbf{x})?為映射函數)。
  • 常用核函數
    • 線性核K(\mathbf{x}_i, \mathbf{x}_j) = \mathbf{x}_i \cdot \mathbf{x}_j,適用于線性可分數據。
    • 多項式核K(\mathbf{x}_i, \mathbf{x}_j) = (\mathbf{x}_i \cdot \mathbf{x}_j + c)^d,引入多項式特征。
    • 高斯核(RBF)K(\mathbf{x}_i, \mathbf{x}_j) = \exp(-\gamma\|\mathbf{x}_i - \mathbf{x}_j\|^2),通過參數?\gamma?控制局部影響范圍。
1.3?現實場景:軟間隔與正則化

由于噪聲和數據重疊的普遍存在,SVM 引入軟間隔允許部分樣本違反間隔約束,通過松弛變量?\xi_i \geq 0?量化樣本的 “違規程度”。

  • 優化問題調整\min_{\mathbf{w}, b, \xi} \frac{1}{2}\|\mathbf{w}\|^2 + C \sum_{i=1}^m \xi_i \quad \text{s.t.} \quad y_i(\mathbf{w}^T\mathbf{x}_i + b) \geq 1 - \xi_i, \ \xi_i \geq 0?其中?C > 0?為正則化參數:
    • C?越大,對分類錯誤的懲罰越強,模型復雜度越高(過擬合風險增加);
    • C?越小,允許更多分類錯誤,模型更傾向于最大化間隔(泛化能力增強)。

2. SVM 決策邊界可視化與代碼實現

2.1?二維數據決策邊界繪制

以下代碼基于 sklearn 實現線性 SVM 的決策邊界可視化:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_blobs# 創建 2D 數據集
X, y = make_blobs(n_samples=40, centers=2, random_state=6)# 訓練 SVM 模型
clf = svm.SVC(kernel='linear', C=1000)
clf.fit(X, y)# 繪制數據點
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)# 繪制決策邊界
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()# 創建網格來評估模型
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = clf.decision_function(xy).reshape(XX.shape)# 繪制決策邊界和邊距
ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])# 標記支持向量
ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100, linewidth=1, facecolors='none', edgecolors='k')
plt.show()

關鍵邏輯

  • decision_function?返回樣本到超平面的有符號距離,通過等高線圖可視化決策邊界(Z=0)和間隔邊界(Z=±1)。
  • 支持向量為距離超平面最近的樣本點,決定了超平面的位置。
2.2?三維超平面與軟間隔可視化

對于三維數據,超平面為?\mathbf{w}^T\mathbf{x} + b = 0,軟間隔允許樣本點位于間隔內或錯誤分類側。通過調整?C?可控制間隔 “硬度”,但二維代碼難以直接擴展至三維,需借助投影或降維技術(如 PCA)間接可視化。

3. 鳶尾花數據集分類項目詳解

3.1?數據預處理
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaleriris = load_iris()
# 僅保留后兩類數據(類別1和2)及前兩個特征(簡化為二維分類問題)
X_2d = iris.data[iris.target > 0, :2]
y_2d = iris.target[iris.target > 0] - 1  # 轉換為0-1標簽
# 標準化:使各特征均值為0、方差為1,避免尺度差異影響模型
scaler = StandardScaler()
X_2d = scaler.fit_transform(X_2d)

技術要點

  • 標準化是 SVM 的關鍵步驟,因 SVM 依賴樣本間的距離計算,特征尺度差異會導致模型偏向大尺度特征。
  • 二維化處理便于可視化,但實際應用中需保留更多特征以提升分類精度。
3.2?網格搜索與參數調優
from sklearn.model_selection import GridSearchCV, StratifiedShuffleSplit
from sklearn.svm import SVC# 定義參數網格:C(正則化強度)和gamma(RBF核參數)
C_range = np.logspace(-2, 10, 13)  # C從1e-2到1e10,共13個值
gamma_range = np.logspace(-9, 3, 13)  # gamma從1e-9到1e3,共13個值
param_grid = {'gamma': gamma_range, 'C': C_range}
# 分層交叉驗證:保持類別分布均衡,5折拆分,20%數據用于驗證
cv = StratifiedShuffleSplit(n_splits=5, test_size=0.2, random_state=42)
grid = GridSearchCV(SVC(kernel='rbf'), param_grid, cv=cv)
grid.fit(X_2d, y_2d)

參數含義

  • C:控制模型對訓練數據的擬合程度,小 C 對應更寬的間隔和更強的正則化。
  • gamma:在 RBF 核中,控制單個樣本的影響范圍。小 gamma 使決策邊界更平滑(泛化性強),大 gamma 導致過擬合。
3.3?決策邊界與性能可視化
import matplotlib.pyplot as plt
from matplotlib.colors import Normalize# 訓練不同參數組合的SVM模型
C_2d_range = [1e-2, 1, 1e2]
gamma_2d_range = [1e-1, 1, 1e1]
classifiers = [(C, gamma, SVC(C=C, gamma=gamma).fit(X_2d, y_2d)) for C in C_2d_range for gamma in gamma_2d_range]# 繪制決策邊界子圖
plt.figure(figsize=(8, 6))
xx, yy = np.meshgrid(np.linspace(-3, 3, 200), np.linspace(-3, 3, 200))
for k, (C, gamma, clf) in enumerate(classifiers):Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)plt.subplot(3, 3, k+1)# 繪制決策區域:-Z的色彩映射表示分類置信度plt.pcolormesh(xx, yy, -Z, cmap=plt.cm.RdBu, norm=Normalize(-1, 1))# 繪制樣本點:顏色表示類別,黑色邊框表示支持向量plt.scatter(X_2d[:, 0], X_2d[:, 1], c=y_2d, cmap=plt.cm.RdBu_r, edgecolors='k')plt.title(f'gamma=10^{np.log10(gamma):.0f}, C=10^{np.log10(C):.0f}')

可視化解讀

  • 決策區域:顏色越深表示分類置信度越高,白色區域為分類邊界附近(低置信度)。
  • 參數影響
    • 當?C?固定時,增大?\gamma?會使決策邊界更復雜(如右下角子圖出現不規則邊界)。
    • 當?\gamma?固定時,增大?C?會縮小間隔,允許更少分類錯誤(如第一列子圖邊界更貼近樣本)。
3.4?熱圖分析參數組合性能
scores = grid.cv_results_['mean_test_score'].reshape(len(C_range), len(gamma_range))
plt.figure(figsize=(8, 6))
# 自定義歸一化:中點設為0.92,突出高分數區域
norm = MidpointNormalize(vmin=0.2, midpoint=0.92)
plt.imshow(scores, interpolation='nearest', cmap='hot', norm=norm)
plt.xlabel('gamma (log10 scale)')
plt.ylabel('C (log10 scale)')
plt.colorbar(label='Validation Accuracy')
plt.xticks(np.arange(len(gamma_range)), gamma_range.round(2), rotation=45)
plt.yticks(np.arange(len(C_range)), C_range.round(2))

性能趨勢

  • 高分數區域集中在?C?和?\gamma?中等值附近(如?C=10^0 \sim 10^4\gamma=10^{-3} \sim 10^1),表明過強或過弱的正則化均會降低泛化能力。
  • 熱圖可輔助選擇最優參數組合,避免手動調參的盲目性。

4. SVM 關鍵特性總結

  1. 邊際最大化:通過幾何間隔最大化提升模型泛化能力,決策僅依賴支持向量,降低對噪聲的敏感度。
  2. 核技巧的本質:將非線性分類問題轉化為高維空間的線性問題,核心是核函數的選擇與參數調優。
  3. 正則化機制:參數?C?平衡間隔寬度與分類誤差,需通過交叉驗證確定最優值。
  4. 數據依賴性:適用于特征維度高、樣本量中等的場景(如文本分類),對大規模數據(百萬級樣本)需結合近似算法(如 SVMlight)。

此項目通過鳶尾花數據集的實踐,系統性展示了 SVM 從理論到實現的完整流程,重點體現了參數對模型行為的定量影響,為復雜場景下的模型調優提供了可復用的方法論。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84207.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84207.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84207.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Oracle】觸發器

個人主頁:Guiat 歸屬專欄:Oracle 文章目錄 1. 觸發器基礎概述1.1 觸發器的概念與特點1.2 觸發器的分類1.3 觸發器的執行順序 2. DML觸發器2.1 基礎DML觸發器2.1.1 INSERT觸發器2.1.2 UPDATE觸發器2.1.3 DELETE觸發器 2.2 高級DML觸發器2.2.1 復合觸發器2…

MTK-Android12-13 Camera2 設置默認視頻畫質功能實現

MTK-Android12-13 Camera2 設置默認視頻畫質功能實現 場景:部分客戶使用自己的mipi相機安裝到我們主板上,最大分辨率為1280720,但是視頻畫質默認的是640480。實際場景中,在默認視頻分辨率情況下拍出來的視頻比較模糊、預覽也不清晰…

QtDBus模塊功能及架構解析

Qt 6.0 中的 QtDBus 模塊是一個用于進程間通信(IPC)的核心模塊,它基于 D-Bus 協議實現。D-Bus 是一種在 Linux 和其他類 Unix 系統上廣泛使用的消息總線系統,允許應用程序和服務相互通信。 一、QtDBus模塊主要功能: 1…

Spring AI 項目實戰(六):Spring Boot + AI + DeepSeek 打造智能成語接龍游戲(附完整源碼)

系列文章 序號文章名稱1Spring AI 項目實戰(一):Spring AI 核心模塊入門2Spring AI 項目實戰(二):Spring Boot + AI + DeepSeek 深度實戰(附完整源碼)3Spring AI 項目實戰(三):Spring Boot + AI + DeepSeek 打造智能客服系統(附完整源碼)4Spring AI 項目實戰(四…

【HarmonyOS 5】教育開發實踐詳解以及詳細代碼案例

以下是基于 ?HarmonyOS 5? 的教育應用開發實踐詳解及核心代碼案例,結合分布式能力與教育場景需求設計: 一、教育應用核心開發技術 ?ArkTS聲明式UI? 使用 State 管理學習進度狀態,LocalStorageProp 實現跨頁面數據同步(如課程…

【鴻蒙在 ETS (Extendable TypeScript) 中創建多級目錄或文件,可以使用鴻蒙的文件系統 API】

鴻蒙在 ETS (Extendable TypeScript) 中創建多級目錄或文件,可以使用鴻蒙的文件系統 API。 // 導入需要的模塊 import fs from ohos.file.fs;const TAG"Index" Entry Component struct Index {State message: string Hello World;build() {Row() {Colum…

11. vue pinia 和react redux、jotai對比

對比 Vue 的 Pinia,和 React 的 Redux、Jotai,分中英文簡要介紹、特性、底層原理、使用場景。 簡單介紹 1.1 Pinia(Vue) ? 英文:Pinia is the official state management library for Vue 3, designed to be simple…

OPenCV CUDA模塊目標檢測----- HOG 特征提取和目標檢測類cv::cuda::HOG

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 cv::cuda::HOG 是 OpenCV 的 CUDA 模塊中對 HOG 特征提取和目標檢測 提供的 GPU 實現。它與 CPU 版本的 cv::HOGDescriptor 類似,但利…

(一)單例模式

一、前言 單例模式屬于六大創建型模式,即在軟件設計過程中,主要關注創建對象的結果,并不關心創建對象的過程及細節。創建型設計模式將類對象的實例化過程進行抽象化接口設計,從而隱藏了類對象的實例是如何被創建的,封裝了軟件系統使用的具體對象類型。 六大創建型模式包括…

【QT】QT多語言切換

QT多語言切換 1.創建任意一個項目2. 利用lupdate(language update)工具生成.ts文件2.1 在工程中的.pro文件中指定.ts文件要存放的位置2.2 選擇工具--》外部--》Qt語言家--》更新翻譯 3. 利用 lrelease(Language Release)將 .ts 文…

【差分】詳解二維前綴和和差分問題

文章目錄 1. 二維前綴和2. 公式推導3. LeetCode 304 二維區域和檢索 - 矩陣不可變3.1 304 二維區域和檢索 - 矩陣不可變3.2 LeetCode 1139 最大的以 1 為邊界的正方形 4. 二維差分問題5. 二維差分的原理以及差分數組計算6. 題目6.1 牛客二維差分6.2 LeetCode 2132. 用郵票貼滿網…

Unity 大型手游碰撞性能優化指南

Unity 大型手游碰撞性能優化指南 版本: 2.1 作者: Unity性能優化團隊 語言: 中文 前言 在Unity大型手游的開發征途中,碰撞檢測如同一位隱形的舞者,它在游戲的物理世界中賦予物體交互的靈魂。然而,當這位舞者的舞步變得繁復冗余時,便會悄然消耗寶貴的計算資源,導致幀率下…

【hive】函數集錦:窗口函數、列轉行、日期函數

窗口函數 https://www.cnblogs.com/Uni-Hoang/p/17411313.html <窗口函數> OVER ([PARTITION BY <分組列> [, <分組列>...]][ORDER BY <排序列> [ASC | DESC] [, <排序列> [ASC | DESC]]...][<rows or range clause>]) )窗口函數主要是…

DAY 25 異常處理

目錄 DAY 25 異常處理1.異常處理機制2.debug過程中的各類報錯3.try-except機制4.try-except-else-finally機制作業&#xff1a;理解今日的內容即可&#xff0c;可以檢查自己過去借助ai寫的代碼是否帶有try-except機制&#xff0c;以后可以嘗試采用這類寫法增加代碼健壯性。 DAY…

幾何繪圖與三角函數計算應用

幾何繪圖與三角函數計算應用 設計思路 左側為繪圖控制面板&#xff0c;右側為繪圖區域支持繪制點、線、矩形、圓、多邊形等基本幾何圖形實現三角函數計算器&#xff08;正弦、余弦、正切等&#xff09;包含角度/弧度切換和常用數學常數歷史記錄功能保存用戶繪圖 完整實現代碼…

CSS 定位:原理 + 場景 + 示例全解析

一. 什么是CSS定位? CSS中的position屬性用于設置元素的定位方式,它決定了元素在頁面中的"定位行為" 為什么需要定位? 常規布局(如 display: block)適用于主結構 定位適用于浮動按鈕,彈出層,粘性標題等場景幫助我們精確控制元素在頁面中的位置 二. 定位類型全…

GESP 二級復習參考 A

本教程完整包含&#xff1a; 5000字詳細知識點解析 36個Python/C雙語言示例 15個GESP真題及模擬題 8張專業圖表和流程圖 # C編程二級標準終極教程## 一、計算機存儲系統深度解析### 1.1 存儲體系架構 mermaid graph TDA[CPU寄存器] --> B[L1緩存 1-2ns]B --> C[L2緩…

嵌入式面試常問問題

以下內容面向嵌入式/系統方向的初學者與面試備考者,全面梳理了以下幾大板塊,并在每個板塊末尾列出常見的面試問答思路,幫助你既能夯實基礎,又能應對面試挑戰。 一、TCP/IP 協議 1.1 TCP/IP 五層模型概述 鏈路層(Link Layer) 包括網卡驅動、以太網、Wi?Fi、PPP 等。負責…

【人工智能 | 項目開發】Python Flask實現本地AI大模型可視化界面

文末獲取項目源碼。 文章目錄 項目背景項目結構app.py(后端服務)index.html(前端界面)項目運行項目圖示項目源碼項目背景 隨著人工智能技術的快速發展,大語言模型在智能交互領域展現出巨大潛力。本項目基于 Qwen3-1.7B 模型,搭建一個輕量化的智能聊天助手,旨在為用戶提…

【設計模式】1.簡單工廠、工廠、抽象工廠模式

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 以下是 簡單工廠模式、工廠方法模式 和 抽象工廠模式 的 Python 實現與對比&#xff0c;結合代碼示例和實際應用場景說明&#xff1a; 1. 簡單工廠模式&a…