Day21 奇異值分解(SVD)全面解析

一、奇異值分解概述

奇異值分解是線性代數中一個重要的矩陣分解方法,對于任何矩陣,無論是結構化數據轉化成的“樣本 * 特征”矩陣,還是天然以矩陣形式存在的圖像數據,都能進行等價的奇異值分解(SVD)。

二、不必糾結的部分

1. 線性代數概念回顧

奇異值分解涉及諸多線性代數概念,不過對于很多實際應用場景,不深入掌握這些概念也不妨礙我們使用奇異值分解來解決問題。

2. 奇異值推導

奇異值的推導過程較為復雜,涉及大量的數學公式和證明。在實際應用中,我們更關注其應用而非推導過程,所以這部分也可不掌握。

三、奇異值的強大應用

1. 特征降維

  • 減小計算量 :在結構化數據里,原本有 m m m 個特征,通過奇異值分解,我們能選取保留前 K K K 個奇異值及其對應的奇異向量,將數據降維成 k k k 個新特征。新特征是原始特征的線性組合,捕捉了數據的主要方差信息。降維后的數據規模變小,用于機器學習模型(如分類、回歸)時,能顯著提高計算效率。
  • 可視化 :高維數據難以直接可視化,通過奇異值分解降維到二維或三維,就能在平面或空間中直觀展示數據分布,幫助我們更好地理解數據特征。
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris# 加載鳶尾花數據集
data = load_iris()
X = data.data# 數據標準化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 進行奇異值分解
U, S, VT = np.linalg.svd(X_scaled)# 選擇前 2 個奇異值進行降維
K = 2
X_reduced = np.dot(U[:, :K], np.diag(S[:K]))print("原始數據形狀:", X_scaled.shape)
print("降維后數據形狀:", X_reduced.shape)

在這里插入圖片描述

2. 數據重構

  • 重構信號 :在信號處理領域,奇異值分解可以對信號矩陣進行分解。通過保留主要的奇異值和奇異向量重構信號,去除噪聲干擾,恢復信號的主要特征。
  • 重構圖像 :對于圖像數據,利用奇異值分解選取部分奇異值和奇異向量重構圖像。既能在一定程度上壓縮圖像數據,又能保持圖像的主要視覺特征,實現圖像的有損壓縮。
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris# 加載鳶尾花數據集
data = load_iris()
X = data.data# 數據標準化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 進行奇異值分解
U, S, VT = np.linalg.svd(X_scaled)# 選擇前 2 個奇異值進行重構
K = 2
S_k = np.zeros((X_scaled.shape[0], X_scaled.shape[1]))
S_k[:K, :K] = np.diag(S[:K])
X_reconstructed = np.dot(np.dot(U, S_k), VT)# 計算 Frobenius 范數相對誤差
error = np.linalg.norm(X_scaled - X_reconstructed) / np.linalg.norm(X_scaled)
print("Frobenius 范數相對誤差:", error)

在這里插入圖片描述

四、操作注意事項

在進行 SVD 之前,通常要對數據進行標準化處理,使數據均值為 0,方差為 1。這樣做能避免某些特征因量綱差異過大,對降維結果產生不合理的影響,保證奇異值分解的有效性和準確性。

五、誤差衡量

對分解后的矩陣進行重構原始矩陣操作后,可通過計算 Frobenius 范數相對誤差來衡量原始矩陣和重構矩陣的差異。該誤差值能幫助我們判斷保留不同數量奇異值時重構的效果,進而選擇合適的 K K K 值以達到最佳的應用效果。

六、總結

本文主要介紹奇異值分解(SVD)的兩個關鍵要點:一是操作注意事項,進行 SVD 前需對數據標準化,避免量綱差異影響降維結果;二是誤差衡量方法,通過計算 Frobenius 范數相對誤差評估矩陣重構效果,輔助選擇合適的 K K K 值。

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

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

相關文章

akshare爬蟲限制,pywencai頻繁升級個人做量化,穩定數據源和券商的選擇

做量化,數據和交易接口是策略和自動化交易的基石,而穩定的數據和快人一步的交易接口是個人做量化的催化劑。 之前寫過一篇文章:個人做量化常用的數據,多以爬蟲為主,最近akshare爬蟲限制,pywencai頻繁升級。…

數字簽名與證書

1. 數字簽名與證書 摘要算法用來實現完整性,能夠為數據生成獨一無二的“指紋”,常用的算法是 SHA-2;數字簽名是私鑰對摘要的加密,可以由公鑰解密后驗證,實現身份認證和不可否認;公鑰的分發需要使用數字證書…

Ubuntu22.04安裝顯卡驅動/卸載顯卡驅動

報錯 今日輸入nvidia-smi報錯,在安裝了535和550,包括560都沒辦法解決,但是又怕亂搞導致環境損壞,打算把顯卡卸載然后重新安裝系統默認推薦版本的顯卡驅動 qinqin:~$ nvidia-smi Failed to initialize NVML: Driver/library version mismatch NVML library version: 560.35卸載…

Web 架構之負載均衡全解析

文章目錄 一、引言二、思維導圖三、負載均衡的定義與作用定義作用1. 提高可用性2. 增強性能3. 實現擴展性 四、負載均衡類型硬件負載均衡代表設備優缺點 軟件負載均衡應用層負載均衡代表軟件優缺點 網絡層負載均衡代表軟件優缺點 五、負載均衡算法輪詢算法(Round Ro…

linux下的Redis的編譯安裝與配置

配合做開發經常會用到redis,整理下編譯安裝配置過程,僅供參考! --------------------------------------Redis的安裝與配置-------------------------------------- 下載 wget https://download.redis.io/releases/redis-6.2.6.tar.gz tar…

A2A大模型協議及Java示例

A2A大模型協議概述 1. 協議作用 A2A協議旨在解決以下問題: 數據交換:不同應用程序之間的數據格式可能不一致,A2A協議通過定義統一的接口和數據格式解決這一問題。模型調用:提供標準化的接口,使得外部應用可以輕松調…

關鍵點檢測--使用YOLOv8對Leeds Sports Pose(LSP)關鍵點檢測

目錄 1. Leeds Sports Pose數據集下載2. 數據集處理2.1 獲取標簽2.2 將圖像文件和標簽文件處理成YOLO能使用的格式 3. 用YOLOv8進行訓練3.1 訓練3.2 預測 1. Leeds Sports Pose數據集下載 從kaggle官網下載這個數據集,地址為link,下載好的數據集文件如下…

20250508在WIN10下使用移遠的4G模塊EC200A-CN直接上網

1、在WIN10/11下安裝驅動程序:Quectel_Windows_USB_DriverA_Customer_V1.1.13.zip 2、使用移遠的專用串口工具:QCOM_V1.8.2.7z QCOM_V1.8.2_win64.exe 3、配置串口UART42/COM42【移遠會自動生成連續三個串口,最小的那一個】 AT命令&#xf…

第J7周:ResNeXt解析

🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客🍖 原作者:K同學啊 目標 具體實現 (一)環境 語言環境:Python 3.10 編 譯 器: PyCharm 框 架: Tensorflow (二)具體…

C++之類和對象:初始化列表,static成員,友元,const成員 ……

目錄 const成員函數: 前置和后置重載: 取地址及const取地址操作符重載: 初始化列表: explicit關鍵字: static成員: 友元: 友元函數: 友元類: 內部類&#xff1a…

uni-app 中的條件編譯與跨端兼容

uni-app 為了實現一套代碼編譯到多個平臺(包括小程序,App,H5 等),引入了條件編譯機制。 通過條件編譯,我們可以針對不同的平臺編寫特定的代碼,從而實現跨端兼容。 一、條件編譯的作用 平臺差異…

Linux平臺下SSH 協議克隆Github遠程倉庫并配置密鑰

目錄 注意:先提前配置好SSH密鑰,然后再git clone 1. 檢查現有 SSH 密鑰 2. 生成新的 SSH 密鑰 3. 將 SSH 密鑰添加到 ssh-agent 4. 將公鑰添加到 GitHub 5. 測試 SSH 連接 6. 配置 Git 使用 SSH 注意:先提前配置好SSH密鑰,然…

[C++] 大數減/除法

目錄 高精度博客 - 前兩講高精度減法高精度除法高精度系列函數完整版 高精度博客 - 前兩講 講次名稱鏈接高精加法[C] 高精度加法(作用 模板 例題)高精乘法[C] 高精度乘法 高精度減法 void subBIG(int x[], int y[], int z[]){z[0] max(x[0], y[0]);for(int i 1; i < …

視頻添加字幕腳本分享

腳本簡介 這是一個給視頻添加字幕的腳本&#xff0c;可以方便的在指定的位置給視頻添加不同大小、字體、顏色的文本字幕&#xff0c;添加方式可以直接修改腳本中的文本信息&#xff0c;或者可以提前編輯好.srt字幕文件。腳本執行環境&#xff1a;windowsmingwffmpeg。本方法僅…

ubuntu nobel + qt5.15.2 設置qss語法識別正確

問題展示 解決步驟 首選項里面的高亮怎么編輯選擇都沒用。如果已經有generic-highlighter和css.xml&#xff0c;直接修改css.xml文件最直接&#xff01; 在generic-highlighter目錄下找到css.xml文件&#xff0c;位置是&#xff1a;/opt/Qt/Tools/QtCreator/share/qtcreator/…

洛谷P7528 [USACO21OPEN] Portals G

P7528 [USACO21OPEN] Portals G luogu題目傳送門 題目描述 Bessie 位于一個由 N N N 個編號為 1 … N 1\dots N 1…N 的結點以及 2 N 2N 2N 個編號為 1 ? 2 N 1\cdots 2N 1?2N 的傳送門所組成的網絡中。每個傳送門連接兩個不同的結點 u u u 和 v v v&#xff08; u …

C++STL——priority_queue

優先隊列 前言優先隊列仿函數頭文件 前言 本篇主要講解優先隊列及其底層實現。 優先隊列 優先隊列的本質就是個堆&#xff0c;其與queue一樣&#xff0c;都是容器適配器&#xff0c;不過優先隊列是默認為vector實現的。priority_queue的接口優先隊列默認為大根堆。 仿函數 …

助力你的Neovim!輕松管理開發工具的魔法包管理器來了!

在現代編程環境中&#xff0c;Neovim 已經成為許多開發者的編輯器選擇。而針對 Neovim 的各種插件與功能擴展&#xff0c;則是提升開發體驗的重要手段。今天我們要介紹的就是一個強大而便捷的開源項目——mason.nvim&#xff0c;一個旨在簡化和優化 Neovim 使用體驗的便攜式包管…

Java-Lambda 表達式

Lambda 表達式是 Java 8 引入的一項重要特性&#xff0c;它提供了一種簡潔的方式來表示匿名函數。Lambda 表達式主要用于簡化函數式接口的實現&#xff0c;使代碼更加簡潔和易讀。以下是關于 Lambda 表達式的詳細闡述&#xff1a; 1. Lambda 表達式的基本語法 Lambda 表達式的…

05 mysql之DDL

一、SQL的四個分類 我們通常可以將 SQL 分為四類&#xff0c;分別是&#xff1a; DDL&#xff08;數據定義語言&#xff09;、DML&#xff08;數據操作語言&#xff09;、 DCL&#xff08;數據控制語言&#xff09;和 TCL&#xff08;事務控制語言&#xff09;。 DDL 用于創建…