機器學習支持向量機(SVM)算法

一、引言

在當今數據驅動的時代,機器學習算法在各個領域發揮著至關重要的作用。支持向量機(Support Vector Machine,SVM)作為一種強大的監督學習算法,以其在分類和回歸任務中的卓越性能而備受矚目。SVM 具有良好的泛化能力,能夠在小樣本數據上取得出色的效果,并且對于高維數據和非線性問題也有有效的解決方案。本文將深入探討支持向量機算法的原理,并結合實際案例展示其在不同領域的應用。

二、支持向量機的基本原理

線性可分問題

  • 對于一個二分類問題,如果存在一個超平面能夠將不同類別的樣本完全分開,那么這個問題就是線性可分的。例如,在二維空間中,一條直線可以將兩類點分開;在三維空間中,一個平面可以將兩類點分開。
  • 設樣本集為 ,其中 是樣本的特征向量, 是樣本的類別標簽。如果存在一個超平面 ,使得對于所有的正例樣本 ,有 ;對于所有的負例樣本 ,有 ,那么這個超平面就可以將兩類樣本完全分開。

最大間隔超平面

  • SVM 的目標是找到一個最優的超平面,使得兩類樣本之間的間隔最大。間隔是指超平面與最近的樣本點之間的距離,而最大間隔超平面就是具有最大間隔的超平面。
  • 對于一個給定的超平面 ,樣本點 到超平面的距離可以通過公式 計算。其中, 表示向量 的范數。
  • 對于線性可分的二分類問題,正例樣本和負例樣本到超平面的距離之和為 ,這個值被稱為間隔。SVM 的目標就是找到一個超平面,使得間隔最大。
  • 可以通過求解以下優化問題來找到最大間隔超平面:

對偶問題

  • 引入拉格朗日乘子 ,構建拉格朗日函數:
  • 根據拉格朗日對偶性,原問題的對偶問題為:

核函數

  • 對于非線性問題,無法直接找到一個線性超平面將樣本分開。此時,可以通過引入核函數將低維空間中的樣本映射到高維空間,使得在高維空間中樣本變得線性可分。
  • 設原始空間中的樣本點 和 ,核函數 滿足 ,其中 是將樣本點 映射到高維空間的函數。
  • 在高維空間中,SVM 的優化問題可以表示為:

三、支持向量機的實戰應用

數據準備

  • 首先,我們需要準備用于訓練和測試的數據集。可以從公開的數據集中獲取,也可以自己收集和整理數據。
  • 對于分類問題,數據集通常包含多個特征和一個類別標簽。例如,在鳶尾花數據集(Iris dataset)中,每個樣本有四個特征(花萼長度、花萼寬度、花瓣長度、花瓣寬度),類別標簽有三種(山鳶尾、變色鳶尾、維吉尼亞鳶尾)。
  • 在進行訓練之前,需要對數據進行預處理,如數據清洗、特征選擇、特征縮放等。
  • 數據清洗:去除數據中的噪聲和異常值,確保數據的質量。
  • 特征選擇:選擇對分類任務有重要影響的特征,減少特征維度,提高算法的效率和性能。
  • 特征縮放:將特征值縮放到相同的范圍,避免某些特征對算法的影響過大。常用的特征縮放方法有標準化(Standardization)和歸一化(Normalization)。

模型訓練

  • 使用 Python 中的 scikit-learn 庫可以方便地實現支持向量機算法。
  • 首先,導入所需的庫和模塊:
from sklearn import svmfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_scoreimport numpy as np
  • 然后,加載數據集并進行預處理:
# 加載數據集data = np.loadtxt('data.csv', delimiter=',')X = data[:, :-1]y = data[:, -1]# 特征縮放from sklearn.preprocessing import StandardScalerscaler = StandardScaler()X = scaler.fit_transform(X)# 劃分訓練集和測試集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  • 接下來,創建支持向量機模型并進行訓練:
# 創建支持向量機模型clf = svm.SVC(kernel='linear', C=1.0)# 訓練模型clf.fit(X_train, y_train)
  • 在創建模型時,可以選擇不同的核函數和參數。例如,這里選擇線性核函數,并設置參數 。參數 是懲罰參數,控制著模型的復雜度和對誤分類樣本的懲罰程度。較大的 值會使模型更加復雜,對誤分類樣本的懲罰更重,但可能會導致過擬合;較小的 值會使模型更加簡單,對誤分類樣本的懲罰較輕,但可能會導致欠擬合。

模型評估

  • 訓練完成后,我們可以使用測試集對模型進行評估。
  • 預測測試集的結果:
y_pred = clf.predict(X_test)
  • 計算模型的準確率:
accuracy = accuracy_score(y_test, y_pred)print('Accuracy:', accuracy)
  • 除了準確率,還可以使用其他指標如精確率、召回率、F1 值等對模型進行評估。
  • 精確率(Precision):表示預測為正例的樣本中真正的正例所占的比例。
  • 召回率(Recall):表示真正的正例被預測為正例的比例。
  • F1 值:是精確率和召回率的調和平均數,綜合考慮了精確率和召回率的平衡。
  • 可以使用 scikit-learn 庫中的 classification_report 函數來輸出精確率、召回率和 F1 值等指標:
from sklearn.metrics import classification_reportprint(classification_report(y_test, y_pred))

參數調優

  • SVM 的性能受到核函數和參數的影響,因此需要進行參數調優以獲得最佳的性能。
  • 可以使用網格搜索、隨機搜索等方法進行參數調優。
  • 網格搜索(Grid Search):在給定的參數范圍內,對所有可能的參數組合進行窮舉搜索,找到最佳的參數組合。
  • 隨機搜索(Random Search):在給定的參數范圍內,隨機選擇一些參數組合進行搜索,找到最佳的參數組合。
  • 例如,使用網格搜索進行參數調優:
from sklearn.model_selection import GridSearchCV# 定義參數范圍param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf', 'poly'], 'degree': [2, 3], 'gamma': [0.1, 1, 10]}# 創建支持向量機模型clf = svm.SVC()# 進行網格搜索grid_search = GridSearchCV(clf, param_grid, cv=5)grid_search.fit(X_train, y_train)# 輸出最佳參數print('Best parameters:', grid_search.best_params_)print('Best score:', grid_search.best_score_)
  • 這里定義了參數范圍,包括懲罰參數 、核函數類型、多項式核函數的次數和高斯核函數的參數 。然后使用網格搜索在參數范圍內尋找最佳的參數組合。網格搜索使用交叉驗證(Cross Validation)來評估不同參數組合的性能,這里設置交叉驗證的次數為 5。

應用案例

  • 支持向量機可以應用于各種領域,如圖像識別、文本分類、生物信息學等。
  • 例如,在圖像識別中,可以使用 SVM 對圖像進行分類,識別不同的物體或場景。可以將圖像的像素值作為特征向量,使用 SVM 進行分類。
  • 在文本分類中,可以將文本表示為向量,然后使用 SVM 對文本進行分類,如新聞分類、情感分析等。可以使用詞袋模型(Bag of Words)或 TF-IDF 等方法將文本表示為向量。
  • 在生物信息學中,可以使用 SVM 對蛋白質結構進行預測、對基因表達數據進行分類等。可以將蛋白質的氨基酸序列或基因表達數據作為特征向量,使用 SVM 進行分類或回歸。

四、總結

支持向量機是一種強大的機器學習算法,具有出色的分類和回歸能力。本文深入探討了支持向量機算法的原理,包括線性可分問題、最大間隔超平面、對偶問題和核函數。通過一個實戰案例展示了支持向量機在數據準備、模型訓練、模型評估和參數調優方面的應用。最后,介紹了支持向量機的應用領域,并給出了一些應用案例。希望本文能夠幫助讀者更好地理解和應用支持向量機算法。

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

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

相關文章

介紹一款docker ui 管理工具

http://vm01:18999/main.html 管理員登陸賬號 jinghan/123456 ui啟動命令所在文件夾目錄 /work/docker/docker-ui 參考鏈接 DockerUI:一款功能強大的中文Docker可視化管理工具_docker ui-CSDN博客

Motrix WebExtension 使用教程

Motrix WebExtension 使用教程 項目地址:https://gitcode.com/gh_mirrors/mo/motrix-webextension 項目介紹 Motrix WebExtension 是一個瀏覽器擴展,用于與 Motrix 下載管理器集成。該擴展允許用戶通過 Motrix 下載管理器自動下載文件,而不是使用瀏覽器的原生下載管理器。…

前端(四)css選擇器、css的三大特性

css選擇器、css的三大特性 文章目錄 css選擇器、css的三大特性一、css介紹二、css選擇器2.1 基本選擇器2.2 組合選擇器2.3 交集并集選擇器2.4序列選擇器2.5屬性選擇器2.6偽類選擇器2.7偽元素選擇器 三、css三大特性3.1 繼承性3.2 層疊性3.3 優先級 一、css介紹 CSS全稱為Casca…

《探索視頻數字人:開啟未來視界的鑰匙》

一、引言 1.1視頻數字人技術的崛起 在當今科技飛速發展的時代,視頻數字人技術如一顆璀璨的新星,正逐漸成為各領域矚目的焦點。它的出現,猶如一場科技風暴,徹底改變了傳統的視頻制作方式,為各個行業帶來了前所未有的機…

【ETCD】[源碼閱讀]深度解析 EtcdServer 的 processInternalRaftRequestOnce 方法

在分布式系統中,etcd 的一致性與高效性得益于其強大的 Raft 協議模塊。而 processInternalRaftRequestOnce 是 etcd 服務器處理內部 Raft 請求的核心方法之一。本文將從源碼角度解析這個方法的邏輯流程,幫助讀者更好地理解 etcd 的內部實現。 方法源碼 …

免費下載 | 2024算網融合技術與產業白皮書

《2024算網融合技術與產業白皮書(2023年)》的核心內容概括如下: 算網融合發展概述: 各國細化算網戰略,指引行業應用創新升級。 算網融合市場快速增長,算力互聯成為投資新熱點。 算網融合產業模式逐漸成型…

基于卷積神經網絡的圖像二分類檢測模型訓練與推理實現教程 | 幽絡源

前言 對于本教程,說白了,就是期望能通過一個程序判斷一張圖片是否為某個物體,或者說判斷一張圖片是否為某個缺陷。因為本教程是針對二分類問題,因此主要處理 是 與 不是 的問題,比如我的模型是判斷一張圖片是否為蘋果…

安全見聞全解析

跟隨 瀧羽sec團隊學習 聲明! 學習視頻來自B站up主 瀧羽sec 有興趣的師傅可以關注一下,如涉及侵權馬上刪除文章,筆記只是方便各位師傅的學習和探討,文章所提到的網站以及內容,只做學習交流,其他均與本人以及…

代碼隨想錄-算法訓練營-番外(圖論02:島嶼數量,島嶼的最大面積)

day02 圖論part02 今日任務:島嶼數量,島嶼的最大面積 都是一個模子套出來的 https://programmercarl.com/kamacoder/0099.島嶼的數量深搜.html#思路往日任務: day01 圖論part01 今日任務:圖論理論基礎/所有可到達的路徑 代碼隨想錄圖論視頻部分還沒更新 https://programmercar…

RabbitMQ個人理解與基本使用

目錄 一. 作用: 二. RabbitMQ的5中隊列模式: 1. 簡單模式 2. Work模式 3. 發布/訂閱模式 4. 路由模式 5. 主題模式 三. 消息持久化: 消息過期時間 ACK應答 四. 同步接收和異步接收: 應用場景 五. 基本使用 &#xff…

前端怎么預覽pdf

1.背景 后臺返回了一個在線的pdf地址,需要我這邊去做一個pdf的預覽(需求1),并且支持配置是否可以下載(需求2),需要在當前頁就能預覽(需求3)。之前我寫過一篇預覽pdf的文…

Python 參數配置使用 XML 文件的教程:輕松管理你的項目配置

Python 參數配置使用 XML 文件的教程:輕松管理你的項目配置 一句話總結:當配置項存儲在外部文件(如 XML、JSON)時,修改配置無需重新編譯和發布代碼。通過更新 XML 文件即可調整參數,無需更改源代碼&#xf…

解決 MySQL 啟動失敗與大小寫問題,重置數據庫

技術文檔:解決 MySQL 啟動失敗與大小寫問題,重置數據庫 1. 問題背景 在使用 MySQL 時,可能遇到以下問題: MySQL 啟動失敗,日志顯示 “permission denied” 或 “Can’t create directory” 錯誤。MySQL 在修改配置文…

python webdriver-manager 實現selenium 免下載安裝webdriver

python webdriver-manager 實現selenium 免下載安裝webdriver selenium在自動化測試中,通常需要使用瀏覽器驅動來與瀏覽器進行交互。然而,手動下載、安裝、以及管理這些驅動非常麻煩,尤其是當驅動版本頻繁更新時。為此,webdriver-manager庫提供了一個極簡的方案,自動幫我…

滑動窗口算法專題

滑動窗口簡介 滑動窗口就是利用單調性,配合同向雙指針來優化暴力枚舉的一種算法。 該算法主要有四個步驟 1. 先進進窗口 2. 判斷條件,后續根據條件來判斷是出窗口還是進窗口 3. 出窗口 4.更新結果,更新結果這個步驟是不確定的&#xff0c…

C# 中的Task

文章目錄 前言一、Task 的基本概念二、創建 Task使用異步方法使用 Task.Run 方法 三、等待 Task 完成使用 await 關鍵字使用 Task.Wait 方法 四、處理 Task 的異常使用 try-catch 塊使用 Task.Exception 屬性 五、Task 的延續使用 ContinueWith 方法使用 await 關鍵字和異步方法…

【AIGC】如何高效使用ChatGPT挖掘AI最大潛能?26個Prompt提問秘訣幫你提升300%效率的!

還記得第一次使用ChatGPT時,那種既興奮又困惑的心情嗎?我是從一個對AI一知半解的普通用戶,逐步成長為現在的“ChatGPT大神”。這一過程并非一蹴而就,而是通過不斷的探索和實踐,掌握了一系列高效使用的技巧。今天&#…

浩辰CAD教程004:柱梁板

文章目錄 柱梁板標準柱角柱構造柱柱齊墻邊繪制梁繪制樓板 柱梁板 標準柱 繪制標準柱: ①:點選插入柱子②:沿著一根軸線布置柱子③:指定的矩形區域內的軸線交點插入柱子 替換現有柱子:選擇替換之后的柱子形狀&#x…

UNIX數據恢復—UNIX系統常見故障問題和數據恢復方案

UNIX系統常見故障表現: 1、存儲結構出錯; 2、數據刪除; 3、文件系統格式化; 4、其他原因數據丟失。 UNIX系統常見故障解決方案: 1、檢測UNIX系統故障涉及的設備是否存在硬件故障,如果存在硬件故障&#xf…

橋接模式的理解和實踐

橋接模式(Bridge Pattern),又稱橋梁模式,是一種結構型設計模式。它的核心思想是將抽象部分與實現部分分離,使它們可以獨立地進行變化,從而提高系統的靈活性和可擴展性。本文將詳細介紹橋接模式的概念、原理…