機器學習實戰(8):降維技術——主成分分析(PCA)

第8集:降維技術——主成分分析(PCA)

在機器學習中,降維(Dimensionality Reduction) 是一種重要的數據處理技術,用于減少特征維度、去除噪聲并提高模型效率。主成分分析(Principal Component Analysis, PCA) 是最經典的線性降維方法之一,廣泛應用于數據可視化、特征提取和圖像壓縮等領域。今天我們將深入探討 PCA 的數學原理,并通過實踐部分使用 MNIST 手寫數字數據集 進行降維與可視化。


維度災難問題

什么是維度災難?

隨著特征維度的增加,數據的稀疏性會急劇上升,導致模型訓練變得更加困難。這種現象被稱為 維度災難(Curse of Dimensionality)。高維數據不僅增加了計算復雜度,還可能導致過擬合。因此,降維技術成為解決這一問題的重要工具。

圖1:維度災難示意圖
(圖片描述:三維空間中展示了低維數據點的分布較為密集,而高維空間中數據點變得稀疏,難以捕捉模式。)
在這里插入圖片描述


PCA 的數學原理

PCA 的核心思想

PCA 的目標是通過線性變換將原始高維數據投影到一個低維子空間,同時盡可能保留數據的主要信息。具體步驟如下:

  1. 標準化數據:對每個特征進行零均值化和單位方差縮放。
  2. 計算協方差矩陣:衡量特征之間的相關性。
  3. 特征分解:求解協方差矩陣的特征值和特征向量。
  4. 選擇主成分:按特征值大小排序,選擇前 $ k $ 個特征向量作為主成分。
  5. 投影數據:將原始數據投影到主成分構成的低維空間。

公式如下:
Covariance?Matrix:? Σ = 1 n X T X \text{Covariance Matrix: } \Sigma = \frac{1}{n} X^T X Covariance?Matrix:?Σ=n1?XTX
Eigen?Decomposition:? Σ v = λ v \text{Eigen Decomposition: } \Sigma v = \lambda v Eigen?Decomposition:?Σv=λv
其中:

  • $ \Sigma $ 是協方差矩陣。
  • $ \lambda $ 是特征值,表示主成分的重要性。
  • $ v $ 是特征向量,表示主成分的方向。

如何解釋主成分

主成分是數據變化方向的線性組合,每個主成分解釋了數據總方差的一部分。我們可以通過以下指標評估主成分的重要性:

  1. 特征值占比:每個主成分對應的特征值占總特征值的比例。
  2. 累計貢獻率:前 k 個主成分解釋的總方差比例。

圖2:主成分累計貢獻率圖
(圖片描述:折線圖展示了前 $ k $ 個主成分的累計貢獻率,隨著主成分數量增加,累計貢獻率逐漸接近 100%。)
在這里插入圖片描述


PCA 在圖像壓縮中的應用

PCA 可以用于圖像壓縮,通過保留最重要的主成分來減少存儲空間。例如,對于一張灰度圖像,可以將其像素矩陣展平為一維向量,然后使用 PCA 提取主要特征,從而實現壓縮。


實踐部分:使用 PCA 對 MNIST 手寫數字數據集進行降維并可視化

數據集簡介

MNIST 數據集包含 70,000 張 28x28 像素的手寫數字圖像(0-9)。每張圖像被展平為 784 維向量。我們將使用 PCA 將數據降維到二維空間,并對其進行可視化。

完整代碼

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler# 加載 MNIST 數據集
mnist = fetch_openml('mnist_784', version=1)
X, y = mnist['data'], mnist['target']# 數據標準化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 使用 PCA 降維到二維
pca = PCA(n_components=2, random_state=42)
X_pca = pca.fit_transform(X_scaled)# 可視化降維結果
plt.figure(figsize=(12, 8))
for i in range(10):  # 遍歷 0-9 數字類別plt.scatter(X_pca[y.astype(int) == i, 0], X_pca[y.astype(int) == i, 1], label=f'Digit {i}', alpha=0.6)
plt.title('MNIST Data Visualization using PCA', fontsize=16)
plt.xlabel('Principal Component 1', fontsize=12)
plt.ylabel('Principal Component 2', fontsize=12)
plt.legend()
plt.grid()
plt.show()# 輸出主成分的累計貢獻率
explained_variance_ratio = pca.explained_variance_ratio_
print(f"主成分1解釋的方差比例: {explained_variance_ratio[0]:.2f}")
print(f"主成分2解釋的方差比例: {explained_variance_ratio[1]:.2f}")
print(f"累計貢獻率: {sum(explained_variance_ratio):.2f}")

運行結果

降維結果可視化

圖3:PCA 降維后的 MNIST 數據分布
(圖片描述:二維散點圖展示了不同數字類別的分布情況,每個類別用不同顏色表示,清晰地展示了數字之間的聚類效果。)
在這里插入圖片描述

輸出結果
主成分1解釋的方差比例: 0.06
主成分2解釋的方差比例: 0.04
累計貢獻率: 0.10

總結

本文介紹了 PCA 的數學原理及其在降維和圖像壓縮中的應用,并通過實踐部分展示了如何使用 PCA 對 MNIST 數據集進行降維和可視化。希望這篇文章能幫助你更好地理解 PCA!


參考資料

  • Scikit-learn 文檔: https://scikit-learn.org/stable/documentation.html
  • MNIST 數據集: https://www.openml.org/d/554*

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

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

相關文章

windows環境下用docker搭建php開發環境dnmp

安裝WSL WSL即Linux子系統,比虛擬機占用資源少,安裝的前提是系統必須是win10以上。 WSL的安裝比較簡單,網上有很多教程,例如:WSL簡介與安裝流程(Windows 下的 Linux 子系統)_wsl安裝-CSDN博客&…

Python網絡爬蟲技術詳解文檔

Python網絡爬蟲技術詳解文檔 目錄 網絡爬蟲概述爬蟲核心技術解析常用Python爬蟲庫實戰案例演示反爬蟲機制與應對策略爬蟲法律與道德規范高級爬蟲技術資源推薦與學習路徑1. 網絡爬蟲概述 1.1 什么是網絡爬蟲 網絡爬蟲(Web Crawler)是一種按特定規則自動抓取互聯網信息的程序…

位運算,雙指針,二分,排序算法

文章目錄 位運算二進制中1的個數題解代碼我們需要0題解代碼 排序模版排序1題解代碼模版排序2題解代碼模版排序3題解代碼 雙指針最長連續不重復子序列題解代碼 二分查找題解代碼 位運算 1. bitset< 16 >將十進制數轉為16位的二進制數 int x 25; cout << bitset<…

一周學會Flask3 Python Web開發-redirect重定向

鋒哥原創的Flask3 Python Web開發 Flask3視頻教程&#xff1a; 2025版 Flask3 Python web開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 前面我們學過渲染到模板頁面&#xff0c;這個其實是一種內部的轉發&#xff0c;瀏覽器地址欄地址沒有變化。如果我們想重定向…

圖片粘貼上傳實現

圖片上傳 html demo 直接粘貼本地運行查看效果即可&#xff0c;有看不懂的直接喂給 deepseek 會解釋的很清晰 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"…

RedisTemplate存儲含有特殊字符解決

ERROR信息: 案發時間: 2025-02-18 01:01 案發現場: UserServiceImpl.java 嫌疑人: stringRedisTemplate.opsForValue().set(SystemConstants.LOGIN_CODE_PREFIX phone, code, Duration.ofMinutes(3L)); // 3分鐘過期作案動機: stringRedisTemplate繼承了Redistemplate 使用的…

Python正則表達式學習

Python正則表達式全攻略 一、正則表達式基礎 1. 什么是正則表達式&#xff1f; 用于描述字符串匹配規則的表達式廣泛應用于文本處理、表單驗證、數據清洗等領域 2. Python中的re模塊 import re3. 基礎語法 字符說明示例.匹配任意字符(除換行)a.c → abc\d數字 [0-9]\d\d …

20250218 隨筆 垂直分庫分表(Vertical Sharding) 和 水平分庫分表(Horizontal Sharding)

垂直分庫分表&#xff08;Vertical Sharding&#xff09; 和 水平分庫分表&#xff08;Horizontal Sharding&#xff09; 是數據庫拆分的兩種策略。它們在大規模數據庫優化、分布式架構設計中至關重要&#xff0c;主要用于 降低單庫壓力、提高查詢效率、支持高并發。 1. 垂直分…

notepad++右鍵菜單不見了

卸載時沒點擊完成&#xff0c;又重新安裝了一個&#xff0c;最終導致了一些bug&#xff0c;導致右鍵沒有notepad菜單。 解決方式&#xff1a; 新建一個register.reg文件&#xff0c;加入以下代碼&#xff0c;然后雙擊執行即可 代碼說明&#xff1a;Open with Notepad 是右…

重定向與文件緩沖機制

目錄 一、重定向的原理與實踐 1. 輸出重定向&#xff1a;讓數據流向新目的地 2. 追加重定向&#xff1a;在文件末尾追加數據 3. 輸入重定向&#xff1a;從指定文件讀取數據 4. 標準輸出流與標準錯誤流的區別 5. 使用 dup2 實現重定向 二、FILE 結構體的奧秘 1. FILE 中的…

DeepSeek 沖擊(含本地化部署實踐)

DeepSeek無疑是春節檔最火爆的話題&#xff0c;上線不足一月&#xff0c;其全球累計下載量已達4000萬&#xff0c;反超ChatGPT成為全球增長最快的AI應用&#xff0c;并且完全開源。那么究竟DeepSeek有什么魔力&#xff0c;能夠讓大家趨之若鶩&#xff0c;他又將怎樣改變世界AI格…

顯微鏡下的人體結構

顯微鏡下的人體結構&#xff0c;看完以后&#xff0c;你還覺得人類是進化而來的嗎&#xff1f;...... 第一張&#xff1a;電子顯微鏡所觀察到的人類血管&#xff0c;可以非常清楚的看到里面的白細胞和紅細胞 第二張&#xff1a;正在分泌耳垢&#xff08;耳屎&#xff09;的耳道…

DApp 開發入門指南

DApp 開發入門指南 &#x1f528; 1. DApp 基礎概念 1.1 什么是 DApp&#xff1f; 去中心化應用&#xff08;DApp&#xff09;是基于區塊鏈的應用程序&#xff0c;特點是&#xff1a; 后端運行在區塊鏈網絡前端可以是任何框架使用智能合約處理業務邏輯數據存儲在區塊鏈上 1…

鴻蒙狀態管理概述 v2

狀態管理v2 概述狀態管理之v2ObservedV2 和 Trace狀態管理V1版本對嵌套類對象屬性變化直接觀測的局限性ObservedV2 和 Trace 使用場景 Local狀態管理V1版本State裝飾器的局限性 Param狀態管理V1版本接受外部傳入的裝飾器的局限性 OnceEventComputedComputed 使用場景 TypePersi…

Git中revert和reset區別?

git revert 和 git reset 都用于撤銷 Git 中的提交&#xff0c;但它們的作用和使用場景不同&#xff1a; git revert: 作用&#xff1a;創建一個新的提交&#xff0c;撤銷指定的提交內容。使用場景&#xff1a;用于“回滾”已推送到遠程倉庫的提交。這種方法不會改變提交歷史&a…

LabVIEW開發中的電機控制與相機像素差

在電機控制系統中&#xff0c;我們需要精確控制電機運動與相機拍攝畫面之間的關系。理想情況下&#xff0c;當電機帶動相機移動同樣的距離時&#xff0c;相機拍攝畫面中兩點之間的像素差應當是一個固定值。然而&#xff0c;在實際應用中&#xff0c;我們發現這一像素差并非固定…

從零到一:構建現代 React 應用的完整指南

1. create-react-app (CRA) 簡介: create-react-app 是官方推薦的 React 項目腳手架工具,提供了一個開箱即用的開發環境,幫助開發者快速啟動 React 應用。它會自動配置 Webpack、Babel、ESLint 等工具,讓你專注于開發而不需要手動配置工具鏈。 特點: 零配置:CRA 自動配…

rman 備份恢復1

前提&#xff1a; rman用戶必須具有sysdba權限 使用常用連接方式如下&#xff1a; rman target / rman target sys/oracle rman target sys/oracleprod1 catalog dav/oracledav_db 一個rman連接會產生兩個進程&#xff0c;action字段為空的就是rman的監控進程&#xff0c;另…

Qt程序退出相關資源釋放問題

目錄 問題背景&#xff1a; aboutToQuit 代碼舉例 closeEvent事件 代碼舉例 程序退出方式 quit() exit(int returnCode 0) close() 問題背景&#xff1a; 實際項目中程序退出前往往需要及進行一些資源釋放、配置保存、線程中斷等操作&#xff0c;避免資源浪費&#xff…

【DeepSeek】Mac m1電腦部署DeepSeek

一、電腦配置 個人電腦配置 二、安裝ollama 簡介&#xff1a;Ollama 是一個強大的開源框架&#xff0c;是一個為本地運行大型語言模型而設計的工具&#xff0c;它幫助用戶快速在本地運行大模型&#xff0c;通過簡單的安裝指令&#xff0c;可以讓用戶執行一條命令就在本地運…