Python訓練打卡Day22

復習日:

1.標準化數據(聚類前通常需要標準化)

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

StandardScaler() :這部分代碼調用了 StandardScaler 類的構造函數。在Python中,當你在類名后面加上括號時,就相當于調用了這個類的構造函數,構造函數會創建并初始化一個新的對象。

scaler = ... :這部分代碼把調用構造函數后創建的新對象賦值給變量 scaler 。之后,你就可以使用 scaler 這個變量來訪問 StandardScaler 類定義的屬性和方法。

2.k_range = range(2, 11) ?# 測試 k 從 2 到 10:為什么不是2到11呢?

Python 里 range() 函數的特性是左閉右開區間,也就是說,它會包含起始值,但不包含結束值。

3.plt.subplot(2, 2, 2)

用 matplotlib.pyplot 模塊的 subplot() 函數來創建一個子圖。 subplot() 函數的參數解釋如下:

- 第一個參數 2 :表示將圖形窗口在垂直方向上劃分為 2 行。
- 第二個參數 2 :表示將圖形窗口在水平方向上劃分為 2 列。
- 第三個參數 2 :表示當前要創建和操作的子圖編號,編號從左到右、從上到下依次遞增。在這個例子中, 2 表示選擇第二個子圖(即第一行的第二個位置)。

4.奇異值分解(SVD)

輸入為矩陣A,尺寸為m*n,可以不是方陣,經過SVD后得到三個矩陣U\SigmaV^T

U左奇異向量矩陣:?是一個 m \times m 的正交矩陣,列向量是矩陣 $A A^T$ 的特征向量。

? ?- 作用:表示原始矩陣 $A$ 在行空間(樣本空間)中的主方向或基向量。簡單來說,$U$ 的列向量描述了數據在行維度上的“模式”或“結構”。

? ?- 應用:在降維中,$U$ 的前幾列可以用來投影數據到低維空間,保留主要信息(如在圖像處理中提取主要特征)。

\Sigma奇異值矩陣:

- 是一個 $m \times n$的對角矩陣,對角線上的值是奇異值(singular values),按降序排列,非負。

? ?- 作用:奇異值表示原始矩陣 $A$ 在每個主方向上的“重要性”或“能量”。較大的奇異值對應更重要的特征,較小的奇異值對應噪聲或次要信息。

? ?- 應用:通過選擇前$k$個較大的奇異值,可以實現降維,丟棄不重要的信息(如數據壓縮、去噪)。

$V^T$右奇異向量矩陣的轉置:

- 是$V$ 的轉置,$V$是一個 $n \times n$ 的正交矩陣,列向量是矩陣 $A^T A$的特征向量。

? ?- 作用:表示原始矩陣 $A$ 在列空間(特征空間)中的主方向或基向量。簡單來說,$V$ 的列向量描述了數據在列維度上的“模式”或“結構”。

? ?- 應用:類似$U$$V$ 的前幾列可以用來投影數據到低維空間,提取主要特征。

????????簡單來說U\SigmaV^T提供了數據的核心結構信息,幫助我們在保留主要信息的同時簡化數據處理。

????????奇異值分解(SVD)后,原始矩陣$A$被分解為 $A = U \Sigma V^T$,這種分解是等價的,意味著通過 U\SigmaV^T 的乘積可以完全重構原始矩陣 $A$,沒有任何信息損失。

????????但在實際應用中,我們通常不需要保留所有的奇異值和對應的向量,而是可以通過篩選規則選擇排序靠前的奇異值及其對應的向量來實現降維或數據壓縮。以下是這個過程的核心思想:

1. 奇異值的排序:

? ?- 在 $\Sigma$ 矩陣中,奇異值(對角線上的值)是按降序排列的。靠前的奇異值通常較大,代表了數據中最重要的信息或主要變化方向;靠后的奇異值較小,代表次要信息或噪聲。

? ?- 奇異值的大小反映了對應向量對原始矩陣 $A$ 的貢獻程度。

2. 篩選規則:

? ?- 我們可以根據需求選擇保留前$k$個奇異值($k$ 是一個小于原始矩陣秩的數),并丟棄剩余的較小奇異值。

? ?- 常見的篩選規則包括:

? ? ?- 固定數量:直接選擇前 $k$個奇異值(例如,前 10 個)。

? ? ?- 累計方差貢獻率:計算奇異值的平方(代表方差),選擇累計方差貢獻率達到某個閾值(如 95%)的前 $k$個奇異值。

? ? ?- 奇異值下降幅度:觀察奇異值下降的“拐點”,在下降明顯變緩的地方截斷。

3. 降維與近似:

? ?- 保留前 $k$ 個奇異值后,我們只取 $U$矩陣的前 $k$列(記為 $U_k$,尺寸為 $m \times k$)、$\Sigma$ 矩陣的前 $k$個奇異值(記為 $\Sigma_k$,尺寸為 $k \times k$)、以及 $V^T$ 矩陣的前 $k$ 行(記為$V_k^T$,尺寸為 $k \times n$)。

? ?- 近似矩陣為 $A_k = U_k \Sigma_k V_k^T$,這個矩陣是原始矩陣 $A$ 的低秩近似,保留了主要信息,丟棄了次要信息或噪聲。

? ?- 這種方法在降維(如主成分分析 PCA)、圖像壓縮、推薦系統等領域非常常用。

4. 對應的向量:

? ?- $U$ 的列向量和 $V$ 的列向量分別對應左右奇異向量。保留前 $k$個奇異值時,$U_k$ 的列向量代表數據在行空間中的主要方向,$V_k$ 的列向量代表數據在列空間中的主要方向。

? ?- 這些向量與奇異值一起,構成了數據的主要“模式”或“結構”。

總結:SVD 分解后原始矩陣是等價的,但通過篩選排序靠前的奇異值和對應的向量,我們可以實現降維,保留數據的主要信息,同時減少計算量和噪聲影響。這種方法是許多降維算法(如 PCA)和數據處理技術的基礎。

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score# 設置隨機種子以便結果可重復
np.random.seed(42)# 模擬數據:1000 個樣本,50 個特征
n_samples = 1000
n_features = 50
X = np.random.randn(n_samples, n_features) * 10  # 隨機生成特征數據
y = (X[:, 0] + X[:, 1] > 0).astype(int)  # 模擬二分類標簽# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print(f"訓練集形狀: {X_train.shape}")
print(f"測試集形狀: {X_test.shape}")# 對訓練集進行 SVD 分解
U_train, sigma_train, Vt_train = np.linalg.svd(X_train, full_matrices=False)
print(f"Vt_train 矩陣形狀: {Vt_train.shape}")# 選擇保留的奇異值數量 k
k = 10
Vt_k = Vt_train[:k, :]  # 保留前 k 行,形狀為 (k, 50)
print(f"保留 k={k} 后的 Vt_k 矩陣形狀: {Vt_k.shape}")# 降維訓練集:X_train_reduced = X_train @ Vt_k.T
X_train_reduced = X_train @ Vt_k.T
print(f"降維后訓練集形狀: {X_train_reduced.shape}")# 使用相同的 Vt_k 對測試集進行降維:X_test_reduced = X_test @ Vt_k.T
X_test_reduced = X_test @ Vt_k.T
print(f"降維后測試集形狀: {X_test_reduced.shape}")# 訓練模型(以邏輯回歸為例)
model = LogisticRegression(random_state=42)
model.fit(X_train_reduced, y_train)# 預測并評估
y_pred = model.predict(X_test_reduced)
accuracy = accuracy_score(y_test, y_pred)
print(f"測試集準確率: {accuracy}")# 計算訓練集的近似誤差(可選,僅用于評估降維效果)
X_train_approx = U_train[:, :k] @ np.diag(sigma_train[:k]) @ Vt_k
error = np.linalg.norm(X_train - X_train_approx, 'fro') / np.linalg.norm(X_train, 'fro')
print(f"訓練集近似誤差 (Frobenius 范數相對誤差): {error}")

實際操作過程中的注意事項:

#1. 標準化數據:在進行 SVD 之前,通常需要對數據進行標準化(均值為 0,方差為 1),以避免某些特征的量綱差異對降維結果的影響。可以使用 `sklearn.preprocessing.StandardScaler`。from sklearn.preprocessing import StandardScalerscaler = StandardScaler()X_train_scaled = scaler.fit_transform(X_train)X_test_scaled = scaler.transform(X_test)
# 注意:`scaler` 必須在訓練集上 `fit`,然后對測試集只用 `transform`,以避免數據泄漏。#2. 選擇合適的 k:可以通過累計方差貢獻率(explained variance ratio)選擇 k,通常選擇解釋 90%-95% 方差的 k值。代碼中可以計算:explained_variance_ratio = np.cumsum(sigma_train**2) / np.sum(sigma_train**2)print(f"前 {k} 個奇異值的累計方差貢獻率: {explained_variance_ratio[k-1]}")#3. 使用 sklearn 的 TruncatedSVD:`sklearn` 提供了 `TruncatedSVD` 類,專門用于高效降維,尤其適合大規模數據。它直接計算前 k個奇異值和向量,避免完整 SVD 的計算開銷。from sklearn.decomposition import TruncatedSVDsvd = TruncatedSVD(n_components=k, random_state=42)X_train_reduced = svd.fit_transform(X_train)X_test_reduced = svd.transform(X_test)print(f"累計方差貢獻率: {sum(svd.explained_variance_ratio_)}")

@浙大疏錦行

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

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

相關文章

氣動排渣煤粉爐專用V型球閥——法蘭連接耐磨閥門生產廠家解析-耀圣

氣動排渣煤粉爐專用V型球閥——法蘭連接耐磨閥門生產廠家解析 副標題:開關靈活無泄漏 標配行程開關/電磁閥/過濾器 一、產品概述:氣動排渣煤粉爐專用V型球閥核心優勢 作為專業的氣動耐磨V型球閥生產廠家,我們針對煤粉爐排渣工況研發的法蘭連…

Linux云計算訓練營筆記day08(MySQL數據庫)

Linux云計算訓練營筆記day08(MySQL數據庫) 目錄 Linux云計算訓練營筆記day08(MySQL數據庫)數據準備修改更新update刪除delete數據類型1.整數類型2.浮點數類型(小數)3.字符類型4.日期5.枚舉: 表頭的值必須在列舉的值里選擇拷貝表復…

致遠OA人事標準模塊功能簡介【附應用包百度網盤下載地址,官方售價4W】

人事管理應用,圍繞崗位配置、招聘管理、員工檔案、入轉調離、員工自助申報、數據信息管理等人力資源管理關鍵業務,構建全員可參與的人事工作協同平臺,讓人事從繁雜瑣碎的事務中解脫出來,高質高效工作,讓管理層清楚掌握…

數字孿生工廠實戰指南:基于Unreal Engine/Omniverse的虛實同步系統開發

引言:工業元宇宙的基石技術 在智能制造2025與工業元宇宙的交匯點,數字孿生技術正重塑傳統制造業。本文將手把手指導您構建基于Unreal Engine 5.4與NVIDIA Omniverse的實時數字孿生工廠系統,集成Kafka實現毫秒級虛實同步,最終交付…

【向量模型 + HNSW 參數如何選擇】

目錄 一、embedding_function(向量模型) 可選方式 選型建議 二、HNSW 參數選擇(核心影響搜索速度與準確率) 2.1 參數解釋和推薦值 2.2 配置模板參考 1、推薦默認配置(適合大多數項目): 2…

fpga系列 HDL : Microchip FPGA開發軟件 Libero Soc 安裝 license申請

啟動 注冊賬號:https://login.microchip.com/申請免費許可:https://www.microchipdirect.com/fpga-software-products C:\Windows\System32>vol驅動器 C 中的卷是 Windows卷的序列號是 ****-****為“D:\Microsemi\License.dat”創建環境變量“LM_LICE…

【C++】解析C++面向對象三要素:封裝、繼承與多態實現機制

解析C面向對象三要素:封裝、繼承與多態實現機制 1. 面向對象設計基石2. 封裝:數據守衛者2.1 訪問控制實現2.2 封裝優勢 3. 繼承:代碼復用藝術3.1 繼承的核心作用3.2 繼承類型對比3.3 典型應用場景3.4 構造函數與析構函數處理3.4.1 構造順序控…

Python并發編程:開啟性能優化的大門(7/10)

1.引言 在當今數字化時代,Python 已成為編程領域中一顆璀璨的明星,占據著編程語言排行榜的榜首。無論是數據科學、人工智能,還是 Web 開發、自動化腳本編寫,Python 都以其簡潔的語法、豐富的庫和強大的功能,贏得了廣大…

數學復習筆記 10

前言 我覺得數學的高分乃至滿分屬于那些,聰明,堅韌,勇敢,細致的人。我非常慚愧自己不是這樣的人,我在生活中發現了這樣的同學,和他們交流的時候我常常感到汗流浹背,因為他們非常扎實的基礎知識…

深入理解 Webpack 核心機制與編譯流程

🤖 作者簡介:水煮白菜王,一位前端勸退師 👻 👀 文章專欄: 前端專欄 ,記錄一下平時在博客寫作中,總結出的一些開發技巧和知識歸納總結?。 感謝支持💕💕&#…

概率相關問題

問題匯總 1. 貝葉斯定理(貝葉斯公式和全概率公式)2. 概率題2.1 隨機發生器的概率為1/2 1. 貝葉斯定理(貝葉斯公式和全概率公式) 定義:在信息和條件有限的情況下,基于過去的數據,通過動態調整的…

【系統架構師】2025論文《WEB系統性能優化技術》

😊你好,我是小航,一個正在變禿、變強的文藝傾年。 🔔本文分享【系統架構師】2025論文《系統可靠性設計》,期待與你一同探索、學習、進步,一起卷起來叭! 目錄 項目介紹背景介紹系統模塊技術棧性能…

ADS1220高精度ADC(TI)——應用 源碼

文章目錄 德州儀器ADS1220概述資料引腳&封裝布線寄存器配置寄存器0(00h)配置寄存器1(01h)配置寄存器2(02h)配置寄存器3(03h) 連續轉換流程驅動源碼ads1220.cads1220.h 德州儀器A…

Uniapp 安卓實現訊飛語音聽寫(復制即用)

在移動應用開發中,語音交互功能能夠極大提升用戶體驗,讓操作更加便捷自然。訊飛語音聽寫技術憑借其高準確率和穩定性,成為眾多開發者的選擇。本文將詳細介紹如何在 Uniapp 項目中,實現安卓端的訊飛語音聽寫功能,幫助你…

【golang】DNS 資源記錄(RR)接口

Go 中 miekg/dns 包對 DNS 資源記錄(RR)接口 的定義: type RR interface {Header() *RR_HeaderString() stringcopy() RRlen(off int, compression map[string]struct{}) intpack(...)unpack(...)parse(...)isDuplicate(r2 RR) bool }這個接…

16.2 VDMA視頻轉發實驗之模擬源

文章目錄 1 實驗任務2 系統框圖3 硬件設計3.1 IP核配置3.2 注意事項3.3 自定義IP核源碼 4 軟件設計4.1 注意事項4.2 工程源碼4.2.1 main.c文件 1 實驗任務 基于14.1,相較于16.1,使用自定義IP核vid_gen_motion替換Xilinx TPG IP核。 2 系統框圖 基于14…

深度學習之用CelebA_Spoof數據集搭建一個活體檢測-訓練好的模型用MNN來推理

一、模型轉換準備 首先確保已完成PyTorch到ONNX的轉換:深度學習之用CelebA_Spoof數據集搭建活體檢測系統:模型驗證與測試。這里有將PyTorch到ONNX格式的模型轉換。 二、ONNX轉MNN 使用MNN轉換工具進行格式轉換:具體的編譯過程可以參考MNN的…

JVM學習專題(一)類加載器與雙親委派

目錄 1、JVM加載運行全過程梳理 2、JVM Hotspot底層 3、war包、jar包如何加載 4、類加載器 我們來查看一下getLauncher: 1.我們先查看getExtClassLoader() 2、再來看看getAppClassLoader(extcl) 5、雙親委派機制 1.職責明確,路徑隔離?&#xff…

部署安裝gitlab-ce-17.9.7-ce.0.el8.x86_64.rpm

目錄 ?編輯 實驗環境 所需軟件 實驗開始 安裝部署gitlab171.配置清華源倉庫(版本高的系統無需做)vim /etc/yum.repos.d/gitlab-ce.repo 2.提前下載包dnf localinstall gitlab-ce-17.9.7-ce.0.el8.x86_64.rpm --rocklinux 3.修改配…

使用LoRA微調Qwen2.5-VL-7B-Instruct完成電氣主接線圖識別

使用LoRA微調Qwen2.5-VL-7B-Instruct完成電氣主接線圖識別 動機 任務適配需求 Qwen2.5-VL在視覺理解方面表現優異,但電氣主接線圖識別需要特定領域的結構化輸出能力(如設備參數提取、拓撲關系解析)。微調可增強模型對專業符號(如…