SVM實戰:從理論到鳶尾花數據集的分類可視化

SVM實戰:從理論到鳶尾花數據集的分類可視化

在機器學習的廣闊領域中,支持向量機(Support Vector Machine,SVM)作為一種經典且強大的分類算法,備受矚目。它憑借獨特的思想和卓越的性能,在模式識別、數據分類等諸多領域發揮著重要作用。本文將結合Python代碼,通過對鳶尾花數據集的處理,帶大家深入了解SVM的工作原理與實戰應用。

一、SVM原理概述

SVM的核心目標是在特征空間中找到一個超平面,該超平面能夠將不同類別的數據點盡可能清晰地分隔開來,并且使分隔的間隔達到最大。這個超平面可以用一個線性方程表示: w T x + b = 0 w^Tx + b = 0 wTx+b=0,其中 w w w是權重向量,決定了超平面的方向, b b b是偏置項,決定了超平面的位置。

在二維空間中,超平面就是一條直線;在三維空間中,超平面是一個平面;而在更高維度的空間中,超平面是一個具有高維幾何特性的決策邊界。那些距離超平面最近且恰好位于間隔邊界上的數據點,被稱為支持向量,它們對超平面的確定起著關鍵作用,決定了超平面的位置和方向。

SVM的優勢在于,它不僅能夠處理線性可分的數據,還能通過核函數將低維空間中線性不可分的數據映射到高維空間,使其在高維空間中變得線性可分,從而實現非線性數據的分類。常見的核函數有線性核函數、多項式核函數、徑向基函數(RBF)等。

二、代碼實現步驟解析

1. 數據讀取與預處理

import pandas as pddata = pd.read_csv("iris.csv", header=None)

上述代碼使用pandas庫的read_csv函數讀取鳶尾花數據集。由于數據集中沒有表頭,所以設置header=None。鳶尾花數據集包含150條記錄,每條記錄有4個特征和1個類別標簽,4個特征分別為花萼長度、花萼寬度、花瓣長度和花瓣寬度,類別標簽表示鳶尾花的品種(山鳶尾、雜色鳶尾、維吉尼亞鳶尾)。

2. 原始數據可視化

import matplotlib.pyplot as pltdata1 = data.iloc[:50, :]
data2 = data.iloc[50:, :]
# 原始數據是四維,無法展示,選擇兩個進行展示
plt.scatter(data1[1], data1[3], marker='+')
plt.scatter(data2[1], data2[3], marker='o')

為了直觀地觀察數據分布,選取數據集中的部分數據(前50條和后100條),并選擇兩個特征(花萼寬度和花瓣寬度)進行可視化。通過matplotlib庫的scatter函數繪制散點圖,可以初步看到不同類別數據點在二維平面上的分布情況。

3. SVM模型訓練

from sklearn.svm import SVCX = data.iloc[:, [1, 3]]
y = data.iloc[:, -1]
svm = SVC(kernel='linear', C=float('inf'), random_state=0)
svm.fit(X, y)

從數據集中提取用于訓練的特征矩陣X(選取花萼寬度和花瓣寬度兩列)和標簽向量y。使用sklearn庫中的SVC類創建SVM模型,這里設置kernel='linear'表示使用線性核函數,意味著數據在當前二維特征空間中是線性可分的;C=float('inf')表示對分類錯誤的懲罰力度無窮大,要求模型必須將所有訓練數據正確分類;random_state=0用于設置隨機種子,保證結果的可重復性。最后調用fit方法對模型進行訓練,使模型學習到數據的特征與類別之間的關系。

4. SVM結果可視化

# 參數w[原始數據為二維數組]
w = svm.coef_[0]
# 偏置項[原始數據為一維數組]
b = svm.intercept_[0]import numpy as npx1 = np.linspace(0, 7, 300)  # 在0~7之間產生300個數據
# 超平面方程
x2 = -(w[0] * x1 + b) / w[1]
# 上超平面方程
x3 = (1 - (w[0] * x1 + b)) / w[1]
# 下超平面方程
x4 = (-1 - (w[0] * x1 + b)) / w[1]
# 可視化原始數據,選取1維核3維的數據進行可視化
# plt.scatter(data1[1],data1[3],marker='+',color='b')
# plt.scatter(data2[1],data2[3],marker='o',color='b')
# 可視化超平面
plt.plot(x1, x2, linewidth=2, color='r')
plt.plot(x1, x3, linewidth=1, color='r', linestyle='--')
plt.plot(x1, x4, linewidth=1, color='r', linestyle='--')
# 進行坐標軸限制
plt.xlim(4, 7)
plt.ylim(0, 5)
# 找到支持向量[二維數組]可視化支持向量
vets = svm.support_vectors_
plt.scatter(vets[:, 0], vets[:, 1], c='b', marker='x')plt.show()

訓練完成后,提取模型的權重向量w和偏置項b,根據超平面方程計算出一系列點的坐標,用于繪制超平面、上超平面和下超平面。通過matplotlibplot函數將這些平面繪制出來,并設置合適的顏色、線寬和線型。同時,提取支持向量,使用scatter函數將其可視化,直觀地展示支持向量在分類中的關鍵作用。最后通過xlimylim函數設置坐標軸的范圍,使可視化效果更加美觀和清晰。

三、結果分析

從可視化結果可以清晰地看到,SVM模型成功地找到了一個線性超平面,將不同類別的鳶尾花數據點分隔開來。支持向量位于間隔邊界上,它們確定了超平面的位置和方向。在這個例子中,由于設置了較大的懲罰參數C,模型對訓練數據實現了完美分類,所有數據點都被正確劃分到相應的類別區域。

然而,在實際應用中,過高的C值可能導致模型過擬合,即模型在訓練數據上表現良好,但在新數據上的泛化能力較差。因此,需要根據具體問題和數據特點,合理調整C值以及選擇合適的核函數,以達到更好的分類效果。

四、總結

通過對鳶尾花數據集的SVM分類實戰,我們深入了解了SVM的原理、代碼實現過程以及結果分析方法。SVM作為一種強大的機器學習算法,在數據分類任務中展現出了優秀的性能和獨特的優勢。希望本文的內容能夠幫助大家更好地理解和應用SVM,在實際的機器學習項目中發揮其價值。在后續的學習和實踐中,我們還可以進一步探索不同核函數、參數調整以及SVM在更多復雜數據集上的應用,不斷拓展對這一算法的認識和掌握程度。

以上博客從多方面解讀了SVM的實戰應用。你若覺得某些部分需要補充、修改,或有其他想法,歡迎隨時和我說。

這篇博客全面剖析了SVM的實戰應用。若你對博客的內容深度、篇幅長度等有新想法,隨時和我交流。

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

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

相關文章

陶瓷陶器缺陷檢測VOC+YOLO格式938張2類別

數據集格式:Pascal VOC格式YOLO格式(不包含分割路徑的txt文件,僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件) 圖片數量(jpg文件個數):938 標注數量(xml文件個數):938 標注數量(txt文件個數):938 標注…

通過Docker部署Prometheus + Grafana搭建監控平臺【超詳細版】

文章目錄 前言一、Prometheus、Grafana1.1 Prometheus簡介1.2 Grafana簡介1.3 Prometheus的核心組件1.4 Prometheus優點1.5 Prometheus缺點 二、部署Docker三、主節點部署PrometheusGrafana3.1 部署Prometheus3.2 防火墻開放端口3.3 訪問服務3.4 安裝Grafana3.5 防火墻開放端口…

華為云Flexus+DeepSeek征文|DeepSeek-V3商用服務開通教程

目錄 DeepSeek-V3/R1商用服務開通使用感受 DeepSeek-V3/R1商用服務開通 1、首先需要訪問ModelArts Studio_MaaS_大模型即服務_華為云 2、在網站右上角登陸自己的華為云賬號,如果沒有華為云賬號的話,則需要自己先注冊一個。 3、接著點擊ModelArts Stu…

ubuntu20.04修改默認網卡名稱為eth*

在Ubuntu 20.04.6中,遵循可預測網絡接口設備命名規則,網卡名稱默認可能是以"enp*"、"ens*"等開頭的格式,但是實際使用過程中,某些應用只能讀取eth*的網卡,需要修改。 查看網卡名稱 ip link show …

linux下抓包工具--tcpdump介紹

文章目錄 1. 前言2. 命令介紹3. 常見選項3.1. 接口與基本控制3.2 輸出控制3.3 文件操作3.4 高級調試 4. 過濾表達式4.1 協議類型4.2 方向與地址4.3 邏輯運算符 5. 典型使用場景5.1 網絡故障排查5.2 安全分析與入侵檢測5.3 性能分析與優化 linux下抓包工具--tcpdump介紹 1. 前言…

AI大模型-RAG到底能做些什么?

RAG常見的應用場景,有以下幾個方面: 1.智能客服系統:比如電商領域,對客戶提出的常見問題,進行自動回復。減少人力成本。 2.人力資源管理:一個新的員工,入職一家大型公司,公司中有各…

C++ unordered_set unordered_map

上篇文章我們講解了哈希表的實現,這節嘗試使用哈希表來封裝unordered_set/map 1. unordered_set/map的框架 封裝的過程實際上與set/map類似,在unordered_set/map層傳遞一個仿函數,用于取出key值 由于我們平常使用的都是unordered_set/map&…

REST API、FastAPI與Flask API的對比分析

以下是關于REST API、FastAPI與Flask API的對比分析,涵蓋架構設計、性能表現、開發效率等核心維度: 一、核心定位與架構差異 REST API 本質:一種基于HTTP協議的架構風格,強調資源化操作(通過URI定位資源)、…

實戰交易策略 篇二十二:情緒流龍頭交易策略

文章目錄 系列文章理論基礎股市的本質資金與情緒題材龍頭股龍頭戰法實戰技法情緒流技術分析擇時實操情緒流龍頭戰法要訣六大步驟九大術法買賣點量化標準系列文章 實戰交易策略 篇一:奧利弗瓦萊士短線交易策略 實戰交易策略 篇二:杰西利弗莫爾股票大作手操盤術策略 實戰交易策…

用VNA進行天線阻抗匹配的實例大圖

比如我這天線,在7Mhz時不諧振,我進行匹配 天線的阻抗很高,大約是在500-1400歐,而等效電容電感很小。 所以我考慮使用阻抗變壓器降低阻抗。 1。測試天線阻抗,電阻相當高,等效電容很小。 2。通過磁環匹配到…

一個讀寫excel的簡單程序(golang)

最近總有一些臨時統計的需求,比如其他團隊生產的一批數據,需要確認這批數據是否入到數倉,提供的列表就是一個excel,我們就需要讀取excel中的所有數據,之后查詢數倉數據庫確認這批數據是否存在,并分別將存在…

【AI面試準備】AI誤判案例知識庫優化方案

面試題:建立內部知識庫:收集AI誤判案例訓練領域專屬模型。 在回答關于“建立內部知識庫收集AI誤判案例訓練領域專屬模型”的面試問題時,建議從以下結構化框架展開,既能體現專業性,又能展現解決問題的系統性和實際落地…

Ocelot\Consul\.NetCore的微服務應用案例

案例資料鏈接:https://download.csdn.net/download/ly1h1/90733765 1.效果 實現兩個微服務ServerAPI1和ServerAPI2的負載均衡以及高可用。具體原理,看以下示意圖。 2.部署條件 1、騰訊云的輕量化服務器 2、WindowServer2016 3、.NETCore7.0 4、Negut …

中小企業MES系統需求文檔

適用對象:中小型離散制造企業(年產值1-5億,員工200-800人) 版本:V1.0 日期:2025年5月2日 一、業務背景與目標 1.1 現狀痛點 生產黑箱化:車間進度依賴人工匯報,異常響應延遲>2小…

OpenAI最新發布的GPT-4.1系列模型,性能體驗如何?

簡單來說,這次GPT-4.1的核心思路就是:更實用、更懂開發者、更便宜!OpenAI這次沒搞太多花里胡哨的概念,而是實實在在地提升了大家最關心的幾個點:寫代碼、聽指令、處理超長文本,而且知識庫也更新到了2024年6月。 寫代碼。要說這次GPT-4.1最亮眼的地方,可能就是寫代碼這塊…

【基礎算法】二分查找的多種寫法

前言 在算法競賽中,二分查找使用的頻率是非常高的,對于C選手而言,有STL中自帶的lower_bound和upper_bound二分查找,可以很方便的進行二分查找。但是非C選手、或者需要自定義多條件查找的情況需要自己寫一個二分,本文對…

蘭亭妙微:火箭發射界面案例分享

北京藍藍設計團隊來自清華美院,工作多年,行業經驗豐富,專業性很強。我們是熱愛設計,設計不僅是我們的專業,我們的職業,還是我們的愛好。每一個藍藍設計的設計師都希望自己的設計越來越好,以高標…

完美解決.NET Framework 4.0 中 System.Drawing 庫不支持 WebP 格式的圖像處理

如果你想在 .NET Framework 4.0 中使用 ImageMagick 處理圖片,可以通過 Magick.NET 庫來實現。Magick.NET 是 ImageMagick 的 .NET 封裝,可以用來讀取、寫入、編輯圖像。 以下是如何使用 Magick.NET 來處理圖像并提取圖像的寬度和高度。 步驟&#xff…

string--OJ1

鏈接: 例一 鏈接: 例er class Solution { public:int myAtoi(string str) {int sign 1;int ret0;int i0;while(str[i] ){i;}if(str[i]||str[i]-){if(str[i]-)sign*-1;i;}while(str[i]>0&&str[i]<9){int rstr[i] - 0;if(ret>INT_MAX/10||(retINT_MAX/10&…

Go 寫一個簡單的Get和Post請求服務

Go 寫一個簡單的Get和Post請求服務 ? 一、準備工作 安裝 Go 官網下載地址 安裝后執行&#xff1a; go version安裝 VS Code 插件 在 VS Code 插件市場搜索并安裝插件&#xff1a;Go&#xff08;由 Go 團隊提供&#xff09; 配置環境變量&#xff08;可選&#xff09; 設置 …