SVM實戰:從線性可分到高維映射再到實戰演練

在支持向量機的分類模型中,我們會遇到兩大類模型,一類是線性可分的模型,還有一類是非線性可分的。非線性可分模型是基于線性可分的基礎上來處理的。支持向量機比較適合小樣本的訓練。

線性可分

如下圖所示,有紫色和黑色兩類,可以用一條直線對數據進行完全分類。這樣叫做線性可分

由上圖我們可以看出,這兩類點可以由無限根直線給分割開,那么我們該怎么找出最好的那一根呢?我們該怎么衡量最好的呢?我們該怎么用數學表達式來表述出這個最好的那個數學表達式呢?

具體做法

光憑感覺,我們可以知道,上圖中的紅線最好,可能從兩方面想到,紅線的數據的權重相對于黃線考慮到的更多,更重要的是紅線對數據誤差的容忍度更高,因為紅線剛好處于中間數據萬一由于錯誤偏移一點,也是可以分類正確的。我們該怎么量化這個呢?

找最優

上圖中,兩條藍線是經過紅線平移,平移到恰好與黑點或者紫點相交的位置。要求最好,所以我們要讓這兩條線之間的距離d最大,這樣也就確定了斜率值,但是在這兩條藍線中存在無數條紅線,我們要確定紅線我們還要讓d/2最大,這樣也就確定了截距。這樣我們就語言描述出最好是什么樣的了,下面我們來用數學公式表達出。(藍線剛好要碰到的點就是支持向量)

定義

在我們進行數學公式表達之前,我們先對需要的進行定義。

1 訓練數據及標簽

????????????????????????????????????????

這里我們假設數據為二維的(其實一樣的,二維的我們建立的是一條線,如果是三維的,我們就建立一個最優平面,如果是高維的我們就建立一個最優的超平面,所用公式一樣。)

這里標簽我們就假設為????????+1??和? -1(方面后面計算,對結果沒影響)

2 訓練模型

??????????????????????????????????????????????????????????????????????

這里是W和X是相同維度的

3 線性可分

必要知識

1?

后面雖然乘a,但對這個線或者超平面是不會發生改變的。

2 點到線距離公式(向量到超平面距離公式)

特征縮放

?????????????????????????????????????????????????????(a>0)

我們進行這一操作,對超平面的幾何位置不會產生任何改變。

根據這個我們可以寫出,肯定會存在一個a使得

??????????????????????????????????????????????????????????????????????????????????

這里等于1只是為了方便計算,意思就是使得支持向量?X0??到超平面的函數間隔等于 1。

縮放后,支持向量滿足?∣w?X0?+b∣=1,此時所有其他樣本點滿足?∣w?Xi?+b∣≥1

這樣上面d的公式就變為了??????????????????????????????????????

????????????????????????????????????????????????????????????????????

我們要求d的最大值,也就是求分母W的最小值。

優化問題

????????????????????????最小化?????? ? ??????????????????????

????????????????????????限制條件? ? ? ? ? ? ??

線性不可分

這類又存在兩種情況,一種是???????

上面這類情況,和我們上面差不多,我們可以用直線給分隔開,但是代價太高了,所有我們可以加上一個松弛變量

目標函數(最小化)????

高維映射

上面對非線性的處理還是不夠的,因為有可能會存在下面一種情況。

對于上面,我們不可能用一條線給分開了,這個時候我們要把低維向量映射到高維中,這樣就可分了。在一個平面上取若干點,不同類,如果我們維度函數轉化為無限維,這樣我們可以分類所有的分類的問題。下面我舉一個特別簡單的小例子

簡單示例

???????????????????????????????????????????????????????????????????????????????????

在這樣一個數據中,不存在一條線能完全把紅藍兩類點分開。

其中???????

我們想著是不是可以把這個映射到高維中,然后就可以用一個超平面來分隔,這個映射的法則就叫做核函數。

核函數

核函數(Kernel Function)是支持向量機(SVM)中的關鍵組件,用于將原始輸入數據映射到高維特征空間,從而解決非線性分類問題。核函數通過隱式計算高維空間的內積,避免了顯式映射的計算復雜度。

我們假設一個法則

轉化為:???????

于是我們可以構造一個超平面??????????????

可以把他們分割

高維映射的優化式子

求最優W和b

SVM中的API接口

SVC( C=1.0, kernel='rbf', degree=3, gamma='scale', coef0=0.0, shrinking=True, probability=False, tol=0.001, 
cache_size=200, class_weight=None, verbose=False, max_iter=- 1, decision_function_shape='ovr', 
break_ties=False, random_state=None)

上面全是默認參數值

以下是 SVC(支持向量分類器)中最關鍵的參數及其簡明解析,基于專業實踐和文檔總結

?參數名??默認值??作用機制??影響效果??典型設置建議?
?C*1.0控制分類錯誤的懲罰強度- ?值大?:嚴格懲罰誤分類 → 邊界復雜,易過擬合 ↑
- ?值小?:容忍更多錯誤 → 邊界平滑,泛化性強 ↓
網格搜索(如?[0.01, 0.1, 1, 10, 100]
?kernel'rbf'定義數據映射到高維空間的方式-?linear:線性可分數據(高效)
-?rbf:非線性數據(默認首選)
-?poly/sigmoid:特定場景適用
優先嘗試?rbf,線性數據用?linear
?gamma'scale'控制樣本影響力范圍(RBF/Poly/Sigmoid核有效)- ?值大?:樣本影響范圍小 → 決策邊界復雜,易過擬合 ↑
- ?值小?:樣本影響范圍大 → 邊界平滑,易欠擬合 ↓
'scale'(自動計算)或網格搜索(如?[0.001, 0.01, 0.1]
?degree3多項式核的階數(僅?kernel='poly'?有效)- ?階數高?:擬合復雜模式,但易過擬合 ↑
- ?階數低?:模型簡單,可能欠擬合 ↓
通常取?2~5,需配合調?C?和?gamma
?class_weightNone調整類別權重(應對樣本不平衡)-?None:所有類權重相等
-?'balanced':按類別頻率自動加權
樣本不均衡時必選?'balanced'
?decision_function_shape'ovr'多分類策略選擇-?'ovr':一對其余(速度快)
-?'ovo':一對一(精度高,計算量大)
默認?'ovr'?即可,類別多時考慮?'ovo'

代碼實戰

import pandas as pd
data=pd.read_csv('iris.csv')
print(data.head())
X=data.iloc[:,[1,3]]
y=data.iloc[:,5]
from sklearn.model_selection import train_test_split
# X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)from sklearn.svm import SVC
model = SVC(kernel='linear', C=float('inf'))
# model = SVC(kernel='linear', C=1)
model.fit(X, y)
# y_pred = model.predict(X_test)a=model.coef_[0]
b=model.intercept_[0]print(a,b)from sklearn import metrics
print(metrics.classification_report(y,model.predict(X)))import matplotlib.pyplot as plt
import numpy as npX1=data[data.iloc[:,5]==1].iloc[:,[1,3]]
X0=data[data.iloc[:,5]==0].iloc[:,[1,3]]plt.scatter(X1.iloc[:,0],X1.iloc[:,1],c='red')
plt.scatter(X0.iloc[:,0],X0.iloc[:,1],c='blue')x1=np.linspace(0,7,100)
x2=(x1*a[0]-b)/a[1]         #-b!!!并且這里
x3=(x1*a[0]-b+1)/a[1]
x4=(x1*a[0]-b-1)/a[1]
plt.plot(x1,x2)
plt.plot(x1,x3)
plt.plot(x1,x4)
plt.show()

下面是對其中兩個特征進行劃分的結果圖。可以看出準確率特別高。

總結

1 float('inf')表示無限大

2 繪圖的時候注意是WX+b=0,要把一個x作為縱坐標要稍加處理

3 這個如果訓練的時候對數據做切分處理了,可能有未被計算的點離我們的超平面距離小于1。

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

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

相關文章

面試問題總結——關于ROS

ROS作為機器人開發中必不可少的一環,總結了一些面試中常見的問題。 目錄 1.ROS1 和 ROS2 的核心區別 2.ROS話題間通信和服務端之間通信有什么區別? 3.RViz 可視化ROS的消息發布是一對一還是一對多的? 4.ROS中的機器人指令發布ros topic pub的原理實現,用的ROS1還是ROS2? 5…

軟考架構師:數據庫的范式

軟考架構師:數據庫的范式 😄生命不息,寫作不止 🔥 繼續踏上學習之路,學之分享筆記 👊 總有一天我也能像各位大佬一樣 🏆 博客首頁 怒放吧德德 To記錄領地 🌝分享學習心得&#xf…

[激光原理與應用-184]:光學器件 - 光學器件中晶體的用途、分類、特性及示例

一、用途光學晶體在光學器件中扮演核心角色,主要應用于以下領域:光學系統調節與控制:制作偏振器、濾光器、透鏡等,調節光的傳播方向、強度及偏振狀態。激光技術:作為激光介質,實現頻率轉換、調制、偏轉及Q開…

深入解析C#并行編程:從并行循環到異步編程模式

在當今多核處理器普及的時代,高效利用計算資源成為開發者必備技能。本文將深入剖析C#中的并行編程利器——任務并行庫(TPL)和經典異步模式,助你提升程序性能。 🚀 一、任務并行庫(TPL)核心機制 1. Parallel.For:并行化的for循環 通…

從零到精通:嵌入式BLE開發實戰指南

目錄 1. BLE的魅力與核心概念:為什么選低功耗藍牙? BLE的核心術語 為什么選擇BLE? 2. 硬件選型:選擇合適的BLE芯片 熱門BLE芯片推薦 選型時的關鍵考量 3. 開發環境搭建:讓你的代碼跑起來 工具準備 安裝步驟 常見問題解決 4. 深入GATT:打造你的BLE服務 服務設計…

15.NFS 服務器

15.NFS 服務器 NFS 服務介紹 NFS是Network File System的縮寫,即網絡文件系統,是一種基于TCP/IP協議的網絡文件共享協議,最早由Sun公司開發,它允許不同操作系統的計算機通過網絡共享文件和目錄,實現跨平臺的文件訪問和管理。 核心…

站在Vue的角度,對比鴻蒙開發中的數據渲染二

第二類數字&#xff08;Number&#xff09;的操作 2.1普通數字的顯示 vue中直接顯示 <template> <div><h3>學習Vue</h3><div>{{ num }}</div> </div></template><script lang"ts" setup>import {ref} fr…

Python自動化測試實戰:reCAPTCHA V3繞過技術深度解析

Python自動化測試實戰&#xff1a;reCAPTCHA V3繞過技術深度解析 摘要 reCAPTCHA V3作為Google推出的無感驗證碼系統&#xff0c;通過先進的機器學習算法分析用戶行為模式&#xff0c;已成為當前最主流的反機器人解決方案。本文將深入解析其核心檢測機制&#xff0c;并提供完…

簡單Modules 的配置與管理,靈活應對多版本軟件環境的需求。

參考文檔 官方手冊&#xff1a;https://modules.readthedocs.io Modulefile 語法&#xff1a;modulefile — Modules documentation Environment Modules 工具 Environment Modules 是一個環境管理工具&#xff0c;用于動態加載、卸載和管理不同版本的軟件環境變量&#xff…

java內部類-匿名內部類

匿名內部類必須有一個已經存在的類或者接口

上篇:《排序算法的奇妙世界:如何讓數據井然有序?》

個人主頁&#xff1a;strive-debug 排序算法精講&#xff1a;從理論到實踐 一、排序概念及應用 1.1 基本概念 **排序**&#xff1a;將一組記錄按照特定關鍵字&#xff08;如數值大小&#xff09;進行遞增或遞減排列的操作。 1.2 常見排序算法分類 - **簡單低效型**&#xff…

2025.8.6 圖論(1)Solution

2025.8.6 圖論&#xff08;1&#xff09;Solution 割點 學習資料&#xff0c;在 csdn 或洛谷上看都行。是模板題題解&#xff08;之一&#xff09;。 T1&#xff1a;Atserckcn與逃離恐怖老師。 題意簡述&#xff1a;從一個圖中選定一個點&#xff0c;使得刪除這個點后圖不連…

OpenBayes 教程上新丨一鍵部署 gpt-oss-20b,實測開源推理模型新 SOTA,性能直逼 o3?mini

時隔 6 年&#xff0c;自 GPT-2 以來&#xff0c;OpenAI 終于再度發布開源大模型——gpt-oss-120b 和 gpt-oss-20b&#xff0c;前者以千億級參數專為復雜推理與知識密集型場景設計&#xff0c;后者則更適合低延遲、本地或專業垂直領域使用&#xff0c;可在消費級硬件&#xff0…

nlp-句法分析

目錄 一、句法概述 1、成分語法理論概述 &#xff08;1&#xff09;分析過程 &#xff08;2&#xff09;缺點 2、依存語法理論概述 &#xff08;1&#xff09;依存關系、配價模式 &#xff08;2&#xff09;分類 &#xff08;3&#xff09;優勢&#xf…

linux磁盤加密

在Linux中&#xff0c;磁盤加密是一種保護數據不被未授權訪問的方法。有多種工具和策略可以實現磁盤加密&#xff0c;包括使用Linux內核的內置功能&#xff0c;如dm-crypt&#xff0c;以及使用更高級的解決方案&#xff0c;如LUKS&#xff08;Linux Unified Key Setup&#xff…

大數據架構演變之路

目錄 一、各階段的架構簡介 二、各個架構的詳細解釋 1. 傳統離線架構 2.1. Lambda架構-離線數倉分析實時鏈路分析 2.2. Lambda架構-離線數倉實時數倉 3. Kappa/流批一體架構 4. 湖倉一體架構 三、總結 一、各階段的架構簡介 技術架構 核心驅動(核心需求) ?關鍵技術 …

STM32 HAL庫驅動0.96寸OLED屏幕

STM32 HAL庫驅動0.96寸OLED屏幕 項目概述 本項目使用STM32 HAL庫為0.96寸OLED屏幕編寫驅動程序。OLED屏幕通過I2C接口與STM32單片機通信&#xff0c;實現文本、數字和圖形的顯示功能。 項目倉庫地址&#xff1a;STM32_Sensor_Drives 硬件連接 OLED屏幕通過I2C接口與STM32連…

橫向越權:修改參數訪問不屬于自己的數據

一、什么是橫向越權定義 橫向越權&#xff08;Horizontal Privilege Escalation&#xff09;是指 同一權限級別的用戶&#xff0c;通過篡改請求參數或資源標識&#xff0c;訪問本不屬于自己的數據或功能。例子 假設一個在線商城&#xff0c;用戶 A 訪問訂單詳情的 URL&#xff…

攻擊實驗(ARP欺騙、MAC洪范、TCP SYN Flood攻擊、DNS欺騙、DHCP餓死)

實驗一 ARP欺騙一、拓撲二、實驗準備、1.設置終端漏洞靶機集合選擇需要的數量和鏡像打開設備上的驅動精靈安裝網卡安裝成功后查看IP地址、網關信息等。三、實驗步驟1.實驗原理中間人&#xff08;攻擊者&#xff09;在終端與網關之間持續發送偽造的 ARP 應答包&#xff0c;雙向欺…

VSCode 禁用更新檢查的方法

通過設置菜單禁用 這是最直接和推薦的方法&#xff0c;可以永久禁用自動更新&#xff1a; 打開 VSCode。點擊左下角的齒輪圖標&#xff0c;然后選擇“設置”。或者通過菜單欄“文件” > “首選項” > “設置”進入。在頂部的搜索框中輸入“update”。找到“Update: Mode”…