什么是主成分分析(PCA)和數據降維

主成分分析(PCA)和數據降維是機器學習和統計學中處理高維數據的核心工具。下面用清晰的結構解釋其概念、原理和應用:


一、數據降維(Dimensionality Reduction)

1. 是什么?
  • 目標:將高維數據(特征多)轉換為低維表示(特征少),同時保留關鍵信息。

  • 為什么需要?

    • 維度災難(Curse of Dimensionality):特征過多導致計算效率低、模型過擬合、噪聲放大。

    • 可視化需求:人類只能理解 ≤3 維空間,降維后可直觀展示數據。

    • 去除冗余:許多特征可能高度相關(如“身高(cm)”和“身高(inch)”)。

2. 兩類常用方法
類型代表方法核心思想
特征選擇過濾法、嵌入法直接篩選原始特征(保留部分列)
特征提取PCA、t-SNE創建新特征組合(生成新特征列)

二、主成分分析(PCA)

1. 是什么?
  • 本質:一種線性特征提取方法,通過正交變換將原始特征重組為互不相關的“主成分”。

  • 目標:找到數據方差最大的方向(即信息最集中的方向),作為新坐標軸。

2. 核心思想
  • 最大化方差:新坐標軸(主成分)的方向是數據投影后方差最大的方向。

  • 正交性:每個主成分與前一主成分正交(無相關性)。

  • 重要性排序:第一主成分(PC1)保留最多信息,后續依次遞減。

3. 數學原理(關鍵步驟)
  1. 中心化數據:將每個特征減去其均值(使數據均值為0)。

  2. 計算協方差矩陣:反映特征間的線性相關性。

  3. 特征值分解

    • 協方差矩陣的特征向量 →?主成分方向

    • 特征值 →?主成分的方差大小(特征值越大,保留信息越多)

  4. 選擇主成分

    • 按特征值從大到小排序,選擇前?kk?個主成分(k<k<?原始維度)。

  5. 投影數據:將原始數據投影到選定的?kk?個主成分上,得到降維后的數據。

4. 可視化理解
  • 原始數據:分布在傾斜的橢圓中(特征相關)。

  • PC1:沿橢圓長軸方向(方差最大)。

  • PC2:沿短軸方向(與PC1正交,方差次大)。
    → 若只保留PC1,數據從2維降至1維,但保留了主要結構。

https://miro.medium.com/v2/resize:fit:1400/1*Upj7eTtSLsK0yFjDwYfGJA.gif


三、PCA的實際應用

1. 典型場景
  • 圖像處理:將像素壓縮(如人臉識別中的特征提取)。

  • 基因數據分析:處理數萬個基因表達維度。

  • 金融風控:降低股票收益率相關性維度。

  • 數據預處理:為SVM、回歸等模型減少噪聲和過擬合。

2. 輸出結果解讀
  • 主成分(PC):新特征,是原始特征的線性組合(如?PC1=0.7×身高+0.3×體重PC1=0.7×身高+0.3×體重)。

  • 解釋方差比:每個主成分保留原始信息的百分比(累計達80%~95%即足夠)。


四、PCA的優缺點

優點缺點
減少過擬合,提升模型泛化能力僅捕獲線性關系(非線性需用核PCA)
去除特征間的相關性降維后特征失去物理意義(難解釋)
計算高效(基于線性代數)對異常值敏感(需提前標準化數據)
無需標簽(無監督方法)方差小但重要的特征可能被丟棄

五、關鍵注意事項

  1. 標準化先行:若特征量綱不同(如身高 vs 收入),必須先標準化(均值為0,標準差為1),否則高方差特征會主導結果。

  2. 選擇?kk?的方法

    • 肘部法則:繪制累計解釋方差比曲線,選擇拐點。

    • 保留閾值:通常保留累計方差 ≥85% 的主成分。

  3. PCA ≠ 特征選擇
    PCA生成的是新特征(原始特征的線性組合),而非篩選原始特征。


六、代碼示例(Python)

from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler# 1. 標準化數據
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 2. 執行PCA(保留95%方差)
pca = PCA(n_components=0.95) 
X_pca = pca.fit_transform(X_scaled)# 輸出結果
print("保留主成分數量:", pca.n_components_)
print("各主成分解釋方差比:", pca.explained_variance_ratio_)

七、題目解析

主成分分析(PCA)的主要用途在于()

A數據清洗

B數據降維

C數據預測

D數據分類

正確答案:B

解析:

A. 數據清洗:錯誤。雖然主成分分析可以幫助識別異常值或噪聲,但它不是專門用于數據清洗的工具。數據清洗通常涉及處理缺失值、糾正錯誤等操作。C. 數據預測:錯誤。主成分分析本身不直接進行數據預測。它是一種探索性數據分析方法,主要目的是減少數據的維度,而不是預測未來的趨勢或結果。D. 數據分類:錯誤。主成分分析也不是一種分類算法。盡管它可以作為預處理步驟在機器學習分類任務中使用,以降低特征空間的維度,但它的主要目的并不是進行分類。綜上所述,主成分分析的主要用途是數據降維,因此正確答案是B。


總結

  • 數據降維:高維數據 → 低維表示,提升效率并保留信息。

  • PCA:通過線性變換找到方差最大的正交方向(主成分),按重要性保留前?kk?個。

  • 核心價值:用少量不相關的新特征替代大量原始特征,解決維度災難問題。

  • 主成分分析(PCA)在特征構造中的主要目的是什么(減少特征的數量以降低模型的復雜度 - 這是主成分分析的主要目的之一。通過降維,PCA可以去除冗余信息,從而簡化模型,使其更易于解釋和理解,同時可能提高計算效率。)。

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

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

相關文章

圖論(4)單源賦權最短路徑算法實現(BFS實現)

目錄 1. 什么是賦權最短路徑 2. 賦權最短路徑中的關鍵概念 3. Dijkstra 算法的基本思想 4. Dijkstra 算法實現&#xff08;Java&#xff09; 1. 什么是賦權最短路徑 在圖論中&#xff0c;最短路徑問題是指在圖中尋找兩點之間路徑總權重最小的路徑問題。如果圖的每條邊都帶…

【Lua】題目小練9

題目&#xff1a;實現一個簡單的“銀行賬戶”類要求&#xff1a;使用 元表 模擬面向對象。支持以下功能&#xff1a;Account:new(owner, balance) 創建賬戶&#xff08;初始余額可選&#xff0c;默認為 0&#xff09;。deposit(amount) 存款&#xff08;不能為負數&#xff09;…

【二分圖】染色問題

核心思想&#xff1a;為每一個未染色的&#xff0c;對它自己和它的鄰居進行染色&#xff0c;看是否會出現沖突時間復雜度O&#xff08;nm&#xff09;#include<bits/stdc.h> using namespace std; using lllong long; const int N200010; int n,m; vector<int>edge…

報數游戲(我將每文更新tips)

今日tips&#xff1a;報數游戲題目描述報數游戲的游戲規則如下&#xff1a;對一個區間內的整數進行報數&#xff0c;若遇到的數字是質數或個位數是 1&#xff0c;則不報數&#xff0c;輸出 pass。 給定開始游戲的第一個整數 a&#xff0c;及結束游戲時的最后一個整數 b&#xf…

大模型開發 - 基于Spring AI 借助MCP Client 通過STDIO和SSE協議調用MCP Server (上)

文章目錄概述MCP協議&#xff1a;為AI應用連接外部世界的橋梁MCP Server&#xff1a;上下文與能力的提供者基于Spring AI 1.0.0的開發之路1. 使用Spring AI構建MCP客戶端2. 使用Spring AI構建MCP服務器Mcp Client 實戰整體架構概覽技術棧Codepom配置mcp servers(sse&stdio)…

分析三個文件--啟動文件、鏈接文件、map文件

目錄 啟動文件 鏈接文件 部分map文件內容 FLASH物理地址(0x08000000開始)的映射關系 0x08000000 之前地址空間 啟動文件 ;******************** (C) COPYRIGHT 2016 STMicroelectronics ******************** ;* File Name : startup_stm32f40_41xxx.s ;* Author…

從零開始學Python之數據結構(字符串以及數字)

一、字符串 1.1 怎么定義字符串 字符串是Python最常用的數據結構之一。在 Python 里是用于處理文本數據的&#xff0c;比如存儲姓名、文章內容等文本信息 。 定義方式&#xff1a; 單引號&#xff1a;用單引號 包裹文本&#xff0c;如 name Alice &#xff0c;單引號內可…

Navicat 全量增量數據庫遷移

在使用 Navicat 進行數據庫遷移時&#xff0c;除了常見的“全量遷移”&#xff08;一次性遷移所有數據和結構&#xff09;&#xff0c;有時還需要支持 增量遷移&#xff08;只遷移新增或修改的數據&#xff09;。下面我將詳細講解如何通過 Navicat 實現&#xff1a;&#x1f50…

css初學者第五天

<1>css的三大特性1.1 層疊性相同選擇器給設置相同的樣式&#xff0c;此時一個樣式就會覆蓋&#xff08;層疊&#xff09;另一份沖突的樣式。層疊式主要解決樣式沖突的問題。層疊性原則&#xff1a;-樣式沖突&#xff0c;遵循的原則是就近原則&#xff0c;哪個樣式離結構近…

從神經網絡語言模型(NNLM)到Word2Vec:自然語言處理中的詞向量學習

語言模型 語言(人說的話)模型(完成某個任務) 任務: 概率評估任務:在兩句話中&#xff0c;判斷哪句話出現的概率大(哪句話在自然語言中更合理)生成任務:預測詞語,我明天要____ 統計語言模型 用統計的方法解決上述的兩個任務 核心思想 給定一個詞序列&#xff0c;計算該序列出現的…

PID學習筆記5-雙環PID

在學習江協科技PID課程時&#xff0c;做一些筆記&#xff0c;對應視頻3-1&#xff0c;對應代碼&#xff1a;1313-雙環PID定速定位置控制-代碼封裝main.c:#include "stm32f10x.h" // Device header #include "Delay.h" #include "OLE…

C#vb.net中Interlocked類實現原子操作加減計算,涵蓋狀態切換、計數控制等常見場景

以下是 C# 中使用 int 類型結合 Interlocked 類實現原子操作的完整示例&#xff0c;涵蓋狀態切換、計數控制等常見場景&#xff1a; 完整代碼示例csharp using System; using System.Threading;/// <summary> /// 基于整數類型的原子操作工具類&#xff08;線程安全&am…

RCL 2025 | LLM采樣機制的新視角:來自處方性偏移的解釋

1. 導讀 大型語言模型&#xff08;Large Language Models, LLMs&#xff09;在自主決策場景中的應用日益廣泛&#xff0c;它們需要在龐大的行動空間中進行響應采樣&#xff08;response sampling&#xff09;。然而&#xff0c;驅動這一采樣過程的啟發式機制仍缺乏深入研究。本…

08 ABP Framework Blazor UI

ABP Framework Blazor UI 架構 overview ABP Blazor UI 系統構建在 Blazorise 組件庫之上&#xff0c;為構建數據驅動應用提供結構化方法&#xff0c;包含 CRUD 操作、主題和本地化的一致模式。 #mermaid-svg-QAvWlELsLhZgYXHu {font-family:"trebuchet ms",verdana,…

JUC學習筆記-----LinkedBlockingQueueConcurrentLinkedQueueCopyOnWriteArrayList

LinkedBlockingQueue基本的入隊出隊初始化public class LinkedBlockingQueue<E> extends AbstractQueue<E>implements BlockingQueue<E>, java.io.Serializable {// 靜態內部類 Node&#xff0c;用于存儲隊列元素及維護節點間關系static class Node<E>…

小杰python高級(six day)——pandas庫

1.數據可視化用于繪制 DataFrame 數據圖形&#xff0c;它允許用戶直接從 DataFrame 創建各種類型的圖表&#xff0c;而不需要使用其他繪圖庫&#xff08;底層實際上使用了 Matplotlib&#xff09;。&#xff08;1&#xff09;plotDataFrame.plot(*args, **kwargs)功能&#xff…

第十六屆藍橋杯青少組C++省賽[2025.8.9]第二部分編程題(1 、慶典隊列)

參考程序&#xff1a;#include <iostream> using namespace std;int main() {int n, A;cin >> n >> A; // 輸入&#xff1a;n 和 A&#xff0c;用空格隔開cout << n / A; // 整數相除&#xff0c;自動向下取整return 0; }

C++進階:智能指針

目錄1. RAII與智能指針2. C庫中的智能指針2.1 智能指針auto_ptr2.2 智能指針unique_ptr2.3 智能指針shared_ptr3. shared_ptr的循環引用4. 智能指針的定值刪除器1. RAII與智能指針 上一篇文章學習了異常相關的知識&#xff0c;其中遺留了一個異常安全相關的問題。那就是異常的拋…

Tkinter 實現按鈕鼠標懸浮提示:兩種方案(繼承Frame與不繼承)

在 Tkinter 桌面應用開發中&#xff0c;為按鈕添加“鼠標懸浮提示”是提升用戶體驗的常用功能——無需點擊&#xff0c;只需將鼠標挪到按鈕上方&#xff0c;就能自動顯示按鈕功能說明。本文將詳細介紹兩種實現方案&#xff1a;不繼承 Frame 類&#xff08;快速簡潔版&#xff0…

20250814 最小生成樹總結

引子 啊啊額&#xff0c;從一張圖里抽出幾條邊&#xff0c;組成一棵樹&#xff0c;無環n?1n-1n?1條邊&#xff0c;就是生成樹。那么邊權和最小的生成樹就叫最小生成樹&#xff0c;最大生成樹同理。 kruskal最小生成樹 要求kruskal最小生成樹&#xff0c;我們首先用結構體數組…