python學智能算法(二十三)|SVM-幾何距離

引言

前序學習文章中,已經探究了電荷超平面的距離計算方法,相關文章為點與超平面的距離。
在這片文章中,我們了解到計算距離的公式:
F=min?i=1...myi(w?xi+b)F=\min_{i=1...m}y_{i}(w\cdot x_{i}+b)F=i=1...mmin?yi?(w?xi?+b)

計算點與超平面的距離

對此,可以書寫代碼進行計算:

# 引入numpy模塊
import numpy as np# 定義example_functional_margin()函數
def example_functional_margin(w,b,x,y):# 先對w和x兩個參數執行點擊運算,然后添加偏置量b后與y相乘result = y*(np.dot(w,x)+b)return result# 定義functional_margin()函數
def functional_margin_array(w,b,X,y):# 直接調用example_functional_margin()函數,按照枚舉函數的順序,逐個計算return np.array([example_functional_margin(w,b,x,y)for i,x in enumerate(X)])# 定義functional_margin()函數
def functional_margin(w,b,X,y):# 直接調用example_functional_margin()函數,按照枚舉函數的順序,逐個計算return np.min([example_functional_margin(w,b,x,y)for i,x in enumerate(X)])x=np.array([[1,1],[2,2]])
y=1b_1=5
w_1=np.array([2,1])w_2=w_1*10
b_2=b_1*10# 所有結果均輸出
print(functional_margin_array(w_1,b_1,x,y))
print(functional_margin_array(w_2,b_2,x,y))
# 最小結果輸出
print(functional_margin(w_1,b_1,x,y))
print(functional_margin(w_2,b_2,x,y))

代碼運行效果為:
距離計算效果
在上述代碼中,我們會有一個發現:在向量x不改變的前提下,如果等比率調整權重向量w和偏置量b,獲得的距離F也會等比率變化。而對于超平面計算公式w?x+b=0w\cdot x+b=0w?x+b=0
w和x無論擴大多少倍,公式依然成立。
因此,必須進一步修正點與超平面的計算公式,消除w和b按比率變化的影響。

點與超平面距離公式修正

在先前的學習進程中,通過向量的值和方向我們已經掌握方向向量的計算方法:
w=(w1∥w∥,w2∥w∥)w=(\frac{w_{1}}{\left \| w \right \|},\frac{w_{2}}{\left \| w \right \|})w=(ww1??,ww2??)由上式可知,方向向量是一個單位向量,一個向量無論放大多少倍,方向向量都不會改變。

因此,合理的點與超平面計算公式應當回歸到將w轉化為單位向量,使得所有計算基準統一,定義此時的距離為幾何距離δ:δ=min?i=1...myi(w∥w∥?x+b∥w∥)\delta =\min_{i=1...m}y_{i}(\frac{w}{\left \| w \right \|}\cdot x+\frac{b}{\left \| w \right \|})δ=i=1...mmin?yi?(ww??x+wb?)
δ的計算和F最大的不同在于:將權重向量統一為單位向量。
此時再次計算點與超平面的距離時就不用擔心權重向量w和偏置量b的取值。

# 引入numpy模塊
import numpy as np# 定義example_functional_margin()函數
def example_functional_margin(w,b,x,y):# 先對w和x兩個參數執行點擊運算,然后添加偏置量b后與y相乘result = y*(np.dot(w,x)+b)return result# 定義functional_margin()函數
def functional_margin_array(w,b,X,y):# 直接調用example_functional_margin()函數,按照枚舉函數的順序,逐個計算return np.array([example_functional_margin(w,b,x,y)for i,x in enumerate(X)])# 定義functional_margin()函數
def functional_margin(w,b,X,y):# 直接調用example_functional_margin()函數,按照枚舉函數的順序,逐個計算return np.min([example_functional_margin(w,b,x,y)for i,x in enumerate(X)])x=np.array([[1,1],[2,2]])
y=1b_1=5
w_1=np.array([2,1])w_2=w_1*10
b_2=b_1*10# 所有結果均輸出
print(functional_margin_array(w_1,b_1,x,y))
print(functional_margin_array(w_2,b_2,x,y))
# 最小結果輸出
print(functional_margin(w_1,b_1,x,y))
print(functional_margin(w_2,b_2,x,y))# 將計算基準轉化為權重矩陣的單位向量
def example_functional_margin_unit_ector(w,b,x,y):unit=np.linalg.norm(w)result=y*(np.dot(w/unit,x)+b/unit)return result# 計算基于單位向量的距離
def geometric_margin(w,b,X,y):return np.array([example_functional_margin_unit_ector(w,b,x,y)for i,x in enumerate(X)])# 輸出單位向量基準的距離
print(geometric_margin(w_1,b_1,x,y))
print(geometric_margin(w_2,b_2,x,y))

此時的計算結果為:
在這里插入圖片描述

由計算效果可見,此時盡管w放大10倍,但計算獲得的幾何距離值不變。

總結

學習了幾何距離的定義和計算。

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

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

相關文章

[每日隨題11] 貪心 - 數學 - 區間DP

整體概述 難度:1000 →\rightarrow→ 1400 →\rightarrow→ 1600 P3918 [國家集訓隊] 特技飛行 標簽:貪心 前置知識:無 難度:橙 1000 題目描述: 輸入格式: 輸出格式: 樣例輸入:…

Elasticsearch 9.x 搜索執行流程(源碼解讀)

1. 搜索執行流程概述 Elasticsearch的搜索執行是一個分布式過程,涉及協調節點和數據節點之間的多階段交互 #mermaid-svg-QGh2GjrUKcs5jzQp {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QGh2GjrUKcs5jzQp .error…

暑期訓練8

E. G-C-D, Unlucky!題目要求判斷是否存在一個長度為 n 的數組 a,使得p[i] 是 a[0..i] 的前綴 GCDs[i] 是 a[i..n-1] 的后綴 GCD思路前綴 GCD 非遞增后綴 GCD 非遞減首尾 GCD 一致橋梁條件成立對于每個位置 i,gcd(p[i], s[i1]) 必須等于整個數組的 GCD&am…

深入解析Hadoop HDFS高可用性:原理、故障切換與元數據同步

Hadoop HDFS高可用性(HA)概述在分布式存儲領域,Hadoop分布式文件系統(HDFS)作為Hadoop生態系統的核心存儲組件,其高可用性(HA)設計一直是架構師們關注的焦點。傳統HDFS架構中,NameNode作為單一主節點管理整個文件系統的元數據,這種…

Freertos源碼分析:任務創建/刪除

任務創建/刪除流程1.簡介FreeRTOS 中任務創建通過 xTaskCreate() 或 xTaskCreateStatic() 實現。動態創建(xTaskCreate)會自動分配任務棧和TCB(任務控制塊),靜態創建(xTaskCreateStatic)需用戶預…

warning: _close is not implemented and will always fail

相關問題: 一、undefined reference to _exit undefined reference to ‘end‘ warning: _close is not implemented and will always fail 一、環境: ubuntu24.04實體機、 arm-none-eabi-gcc gcc version 13.2.1 20231009 (15:13.2.rel1-2) 二…

MyBatis之緩存機制詳解

MyBatis之緩存機制詳解一、MyBatis緩存的基本概念1.1 緩存的核心價值1.2 MyBatis的兩級緩存體系二、一級緩存(SqlSession級別緩存)2.1 工作原理2.2 實戰案例:一級緩存演示2.2.1 基礎用法(默認開啟)2.2.2 一級緩存失效場…

云服務器搭建自己的FRP服務。為什么客戶端的項目需要用Docker啟動,服務端才能夠訪問到?

簡單回答:在云服務器搭建FRP服務時,客戶端項目用Docker啟動并非必需,而是因為Docker的特性簡化了配置: Docker通過端口映射(如-p 本地端口:容器端口)能固定項目對外暴露的端口,減少本地端口沖突…

6 STM32單片機的智能家居安防系統設計(STM32代碼+手機APP設計+PCB設計+Proteus仿真)

系列文章目錄 文章目錄 系列文章目錄前言1 資料獲取與演示視頻1.1 資料介紹1.2 資料獲取1.3 演示視頻 2 系統框架3 硬件3.1 主控制器3.2 顯示屏3.3 WIFI模塊3.4 DHT11溫濕度傳感器3.5 煙霧/燃氣傳感器模塊:MQ-23.6 火焰傳感器3.7 門磁模塊MC-38 4 設計PCB4.1 安裝下…

DevOps落地的終極實踐:8大關鍵路徑揭秘!

本文來自騰訊藍鯨智云社區用戶: CanWay當前,DevOps因其能夠降低IT運營成本、提高軟件質量并加快上市時間的能力而在全球范圍內引起廣泛關注。它打破了傳統軟件開發與運營的界限,消除了新功能發布延遲和軟件質量下降的障礙。DevOps通過實施持續集成、持續…

react - 根據路由生成菜單

后端返回菜單的格式menuList:[{index: true,name: "",component: "../views/Home",meta: { title: "首頁", requiresAuth: true,roles:[user]},},{path: "/admin",name: "admin",meta: { title: "管理頁", roles:…

Window延遲更新10000天配置方案

1.點擊"開始"菜單,搜索"注冊表編輯器",點擊"打開"。2.找到"\HKEY LOCAL MACHINE\SOFTWARE\Microsoft\WindowsUpdate\Ux\Settings"路徑。3.右面空白處右鍵新建一個32位值,命名為FlightSettingsMaxPau…

【OD機試】人民幣轉換

題目描述 將阿拉伯數字金額轉換為中文大寫金額格式,需遵循以下規則: 1、 前綴要求:中文大寫金額前必須標明“人民幣”字樣。 2、 用字規范:使用壹、貳、叁、肆、伍、陸、柒、捌、玖、拾、佰、仟、萬、億、元、角、分、零、整等字樣。 3、 “整”字規則: 金額到“元”為止…

在ajax中什么時候需要將返回值類型做轉換

$.ajax({url: TMSPROC0050/deleteData?accidentIds accidentIds.join(,),type: DELETE,dataType: json,success: function(result) {$(#accidentGrid).datagrid(reload);$.messager.show({title: 成功,msg: result.message})},error: function(result) {$.messager.alert({ti…

Helm常用命令大全(2025最新版)

文章目錄Helm常用命令大全(2025最新版)一、基礎命令與環境配置版本與幫助信息安裝與升級HelmLinux系統安裝版本升級注意事項二、倉庫管理命令倉庫基礎操作OCI倉庫支持(v3.8新特性)三、Chart操作命令Chart創建與打包Chart搜索與下載…

gitlab+jenkins

文章目錄架構gitlab和jenkins安裝jenkins配置gitlab配置jenkins與gitlab聯動參考架構 gitlab和jenkins安裝 部署docker 部署jenkins 啟動jenkins 用戶:admin,對應的密碼如下 點擊安裝自定義推薦的插件 安裝gitlab插件 jenkins配置 配置pipline…

Redis字符串操作指南:從入門到實戰應用

Redis作為一款高性能的鍵值存儲數據庫,其字符串(String)類型是最基礎也最常用的數據類型。它不僅能存儲簡單的文本信息,還能應對數字計算、二進制數據等多種場景,靈活且高效。接下來,我們就全方位剖析Redis…

SQLite 數據庫字段類型-詳細說明,數據類型詳細說明。

SQLite 數據類型 SQLite字段類型詳細說明,包含存儲類、親和類型、布爾類型、日期時間類型的存儲方式、取值范圍及核心特性。 創建 SQLite3 表時可使用的各種數據類型名稱,同時也介紹了相應的親和類型。 一、核心存儲類(Storage Classes&am…

Node.js特訓專欄-實戰進階:17.會話管理與安全存儲

?? 歡迎來到 Node.js 實戰專欄!在這里,每一行代碼都是解鎖高性能應用的鑰匙,讓我們一起開啟 Node.js 的奇妙開發之旅! Node.js 特訓專欄主頁 專欄內容規劃詳情 會話管理與安全存儲:從原理到實戰的Web安全實踐 在Web應用中,會話(Session)是維持用戶狀態的核心機制—…

【橘子分布式】gRPC(編程篇-中)

一、簡介 我們之前已經完成了對于api模塊的開發,也就是已經生成了基礎的類和對應的接口,現在我們需要完成的是client和server端的開發。其實如同thrift一樣,現在要做的就是實現我們之前定義的service里面的hello方法,里面寫我們的…