【機器學習】有監督學習算法之:支持向量機

支持向量機

  • 1、引言
  • 2、決策樹
    • 2.1 定義
    • 2.2 原理
    • 2.3 實現方式
    • 2.4 算法公式
    • 2.5 代碼示例
  • 3、總結

1、引言

小屌絲:魚哥,泡澡啊。
小魚:不去
小屌絲:… 此話當真?
小魚:此話不假
小屌絲:到底去還是不去?
小魚:我昨天剛泡完澡,今天還去?
小屌絲:… 你竟然自己去?
小魚:沒有啊
在這里插入圖片描述

小屌絲:… 我不信,我不聽,反正你昨天去泡澡沒帶我。
小魚:…那待會咱倆再去唄
小屌絲: 這還差不多。嘿嘿~ ~
小魚:那等我一會
小屌絲:干啥啊這又?
小魚:當然是在忙嘍。
小屌絲:…

2、決策樹

2.1 定義

支持向量機(Support Vector Machine,簡稱SVM)是一種分類算法,它試圖找到一個超平面來分隔兩個類別的數據點,使得兩側的間隔(margin)最大。

當數據點在高維空間中不是線性可分時,SVM通過使用核函數(kernel function)將原始數據映射到更高維的特征空間,使得數據在新的空間中線性可分。

2.2 原理

SVM的基本原理涉及到高維空間中的數據點和一個決策邊界(也稱為超平面)。它的目標是找到一個超平面,使得不同類別的數據點距離它最遠,這個距離稱為“間隔”。

工作原理如下:

  • 數據轉換:首先,SVM將數據點映射到高維空間,這樣它們可以更容易地被一個超平面分開。

  • 超平面選擇:然后,SVM嘗試找到一個超平面,使得不同類別的支持向量離它最遠。這個超平面的方程可以表示為:,其中是超平面的法向量,是偏置。

  • 間隔最大化:SVM的目標是最大化支持向量到超平面的距離,這個距離稱為“間隔”。間隔的計算公式是:。

  • 分類:最后,SVM使用這個超平面來進行分類。對于新的數據點,它會根據這個超平面的位置來決定它屬于哪個類別。

2.3 實現方式

SVM的實現方式主要包括:

  • 線性可分SVM:當數據集線性可分時,可以直接使用線性SVM進行分類。

  • 線性SVM(軟間隔):當數據集近似線性可分時,引入松弛變量和懲罰參數,允許部分樣本被錯分。

  • 非線性SVM:當數據集非線性可分時,使用核函數將原始數據映射到更高維的特征空間,然后在新的空間中尋找最優超平面。

2.4 算法公式

SVM的公式可能看起來有點嚇人,但我們可以用簡單的例子來解釋它們。

  • 數據點的映射

    • 假設我們在二維空間中有數據點 ((x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n))。
    • 我們可以將它們映射到三維空間,通過增加一個額外的維度 (z),得到新的數據點 ((x_1, y_1, z_1), (x_2, y_2, z_2), \ldots, (x_n, y_n, z_n))。
    • 這個映射可以通過一個函數 (f) 來實現,例如 (z = f(x, y))。
  • 超平面選擇

    • 在三維空間中,我們的超平面方程可以表示為:[ w_1x + w_2y + w_3z + b = 0 ]。這里的(w_1, w_2, w_3) 是超平面的法向量的分量,(b) 是偏置項。這個超平面將數據點分隔成兩個類別。
  • 間隔最大化

    • 在SVM中,間隔是指數據點到超平面的最短距離。對于任意數據點 ((x, y, z)) 和超平面 (w_1x + w_2y + w_3z + b = 0),其到超平面的距離 (d) 可以計算為:

      [ d = \frac{|w_1x + w_2y + w_3z + b|}{\sqrt{w_1^2 + w_2^2 + w_3^2}} ]

    • 間隔最大化就是要找到這樣的超平面,使得所有數據點到這個超平面的距離中的最小值最大。

  • 分類

    • 對于新的數據點 ((x_{\text{new}}, y_{\text{new}}, z_{\text{new}})),我們可以將其映射到三維空間,然后計算它到超平面的距離 (d_{\text{new}})。
    • 根據 (d_{\text{new}}) 的正負以及超平面的位置(由法向量的方向決定),我們可以判斷這個數據點屬于哪一個類別。

2.5 代碼示例

# -*- coding:utf-8 -*-
# @Time   : 2024-02-21
# @Author : Carl_DJ'''
實現功能:用于生成線性可分的數據集并可視化SVM的分界線'''
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.svm import SVC# 生成線性可分的數據集
X, y = datasets.make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, random_state=42)# 創建SVM分類器并擬合數據
clf = SVC(kernel='linear', C=1000)
clf.fit(X, y)# 繪制數據點
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired, marker='o', edgecolors='k')# 繪制決策邊界
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()# 創建網格來評估模型
xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 50), np.linspace(ylim[0], ylim[1], 50))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)# 繪制決策邊界
ax.contour(xx, yy, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('SVM Decision Boundary')
plt.show()

在這里插入圖片描述

3、總結

支持向量機是一種強大的分類算法,它通過尋找最優超平面來實現分類,并且具有優秀的泛化能力。
SVM對于高維數據的處理效果尤為出色,并且可以通過核函數來處理非線性問題。
然而,SVM的計算復雜度相對較高,尤其是當樣本數量很大時,訓練過程可能會比較慢。
在實際應用中,需要根據具體問題和數據集特點來選擇合適的算法和參數。

我是小魚

  • CSDN 博客專家
  • 阿里云 專家博主
  • 51CTO博客專家
  • 多個名企認證講師等
  • 認證金牌面試官
  • 名企簽約職場面試培訓、職場規劃師
  • 多個國內主流技術社區的認證專家博主
  • 多款主流產品(阿里云等)測評一、二等獎獲得者

關注小魚,學習機器學習領域的知識。

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

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

相關文章

Linux 網絡接口的混雜模式(Promiscuous mode)認知

寫在前面 博文內容為 混雜模式的簡單認知理解不足小伙伴幫忙指正 認定一件事,即使拿十分力氣都無法完成,也要拿出十二分力氣去努力。 —《劍來》 網絡接口的混雜模式 混雜模式(Promiscuous mode),簡稱 Promisc mode,俗稱監聽模式…

什么是支持向量機(Support vector machine)和其原理

作為機器學習的基礎算法,SVM被反復提及,西瓜書、wiki都能查到詳細介紹,但是總是覺得還差那么點,于是決定自己總結一下。 一、什么是SVM? 1、解決什么問題? SVM,最原始的版本是用于最簡單的線…

藍橋杯備賽第五篇(動態規劃)

1.數位dp public class Main {static long[] limit;static int length;static long[][] dp;public static long dfs(int pos, int pre, boolean flag, boolean lead) {if (pos length) return 1;if (!flag && !lead && dp[pos][pre] ! -1) return dp[pos][pr…

總結 HashTable, HashMap, ConcurrentHashMap 之間的區別

1.多線程環境使用哈希表 HashMap 不行,線程不安全 更靠譜的,Hashtable,在關鍵方法上加了synchronized 后來標準庫又引入了一個更好的解決方案;ConcurrentHashMap 2.HashMap 首先HashMap本身線程不安全其次HashMap的key值可以為空(當key為空時,哈希會…

【Java數據結構】——五道算法題讓你靈活運用Map和Set

目錄 一.只出現一次的數字 二.寶石與石頭 三.舊鍵盤 四.給定一個數組,統計每個元素出現的次數 五.前K個高頻單詞 一.只出現一次的數字 136. 只出現一次的數字 - 力扣(LeetCode) 算法原理:我們將nums中每個元素都存入到set中…

C/C++嵌入式開發環境搭建,Qt交叉編譯,cmake交叉編譯,clion/vscode遠程開發

目錄 交叉編譯簡介cmake 交叉編譯clion 交叉編譯vscode 遠程嵌入式開發Qt交叉編譯1.安裝交叉編譯工具2.交叉編譯qt庫3.將交叉編譯的Qt庫復制到板子上4.安裝和配置 Qt Creator,支持交叉編譯5.QT嵌入式開發6.QT嵌入式開發報錯解決QIconvCodec::convertToUnicode: usin…

ASUS華碩天選5筆記本電腦FX607JV原裝出廠Win11系統下載

ASUS TUF Gaming F16 FX607JV天選五原廠Windows11系統 適用型號: FX607JU、FX607JI、FX607JV、 FX607JIR、FX607JVR、FX607JUR 下載鏈接:https://pan.baidu.com/s/1l963wqxT0q1Idr98ACzynQ?pwd0d46 提取碼:0d46 原廠系統自帶所有驅動、…

TypeScript中 “ <> “ 語法 和 “ : “ 怎么使用

在 TypeScript 中&#xff0c;尖括號語法(<Type>)和as關鍵字(value as Type)都是用于類型斷言&#xff0c;而冒號(:)用于類型注解。這三種語法在不同的場景下使用&#xff1a; 尖括號語法和as關鍵字&#xff1a; 尖括號語法(<Type>value)&#xff1a; 這種語法在…

[LeetBook]【學習日記】鏈表反轉

來源于「Krahets」的《圖解算法數據結構》 https://leetcode.cn/leetbook/detail/illustration-of-algorithm/ 鏈表反轉的遞歸要點 遞歸終止條件為當前節點為空&#xff0c;表明遍歷到了鏈表尾部遞歸函數傳入參數為當前節點的下一個節點按照是否重新開辟存儲空間分類下面只寫…

python自動化學習--3.8python操作EXCEL文件python日志收集處理

1、Excel文件處理 安裝 openpxl 第三方庫 openpxl 模塊三大組件: 1、工作簿 &#xff08;包含多個sheet工作表&#xff09; 2、工作表 &#xff08;某個數據包含在某個工作表&#xff09; 3、單元格 1、創建excel工作簿 import openpyxl"""Excel表格的創建…

【簡說八股】Spring事務失效可能是哪些原因?

Spring事務介紹 Spring事務是指在Spring框架中對數據庫操作進行管理的一種機制&#xff0c;它確保一組數據庫操作要么完全執行成功&#xff08;提交&#xff09;&#xff0c;要么完全不執行&#xff08;回滾&#xff09;&#xff0c;從而保持數據一致性和完整性。 Spring框架…

GotoXy控制臺光標的位置更新

光標控制解釋 控制臺的光標更新方法, 用于控制數據輸出位置 void gotoXY(int x, int y)//新函數&#xff1a;更新光標 {COORD c;c.X x;c.Y y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c); }代碼解釋 這段代碼定義了一個名為 gotoXY 的函數&#xff0c;…

設計模式-裝飾者模式應用實踐

裝飾者模式&#xff08;Decorator Pattern&#xff09;是一種結構型設計模式&#xff0c;它允許動態地向一個現有的對象添加新的功能&#xff0c;同時不改變其結構。這種模式通過創建一個裝飾類來包裝原有的類&#xff0c;提供額外的行為。 下面是一個使用 Java 實現裝飾者模式…

【Spring Boot】實現全局異常處理

1.定義基礎異常接口類 /*** description: 服務接口類* author: MrVK* date: 2021/4/19 21:39*/ public interface BaseErrorInfoInterface {/*** 錯誤碼* return*/String getResultCode();/*** 錯誤描述* return*/String getResultMsg(); } 2.定義錯誤處理枚舉類 /*** desc…

小伙伴詢問AI該怎么學習?本人的一點總結,以思維導圖呈現

如有需要思維導圖的在后臺請留郵箱&#xff0c;相關知識結構目錄 部分導圖

nn.Linear() 使用提醒

原本以為它是和nn.Conv2d()一樣&#xff0c;就看第二個維度的數值&#xff0c;今天才知道&#xff0c;它是只看最后一個維度的數值&#xff01;&#xff01;&#xff01; 例子1 Descripttion: Result: Author: Philo Date: 2024-02-27 14:33:50 LastEditors: Philo LastEditT…

git使用merge命令把dev分支的mian.js文件和src下面的vuex文件夾以及config文件夾單獨合并到master分支上

使用 git merge 命令來單獨合并特定文件或文件夾到另一個分支通常不是最直接的方法&#xff0c;因為 merge 命令是用來合并兩個分支的所有更改的。然而&#xff0c;你可以通過 git cherry-pick 命令或者通過創建臨時補丁&#xff08;patch&#xff09;來實現這一點。 下面是一個…

秒殺的時候怎么使用Redis?

商品信息存儲&#xff1a;在Redis中存儲秒殺商品的庫存信息。可以使用Redis的Hash數據類型&#xff0c;將商品ID作為字段&#xff0c;庫存數量作為值存儲在Hash中。例如&#xff0c;HSET seckill_goods stock_1 100表示商品ID為stock_1的商品庫存數量為100。 秒殺訂單存儲&…

如何使用“Ubuntu 20.04桌面版,安裝MariaDB數據庫“?win10系統?

1、更新軟件包 sudo apt update 2、 安裝MariaDB服務器和客戶端 sudo apt install mariadb-server mariadb-client 3、 查看MeriaDB是否運行 service mysql status :q"退回命令行狀態 4、 設置MariaDB root用戶的密碼 sudo mysql_secure_installation 5、 MariaD…

斐波那契數列模型----三步問題

面試題 08.01. 三步問題 - 力扣&#xff08;LeetCode&#xff09; 1、狀態表示&#xff1a; 題目要求&#xff1a;上到n階臺階&#xff0c;有多少種方法。那么n逐漸簡化&#xff0c;上1階臺階有多少種方法&#xff1b;上2階臺階有多少種方法……直到上n階臺階有多少種方法。 …