您的位置:首頁(yè) > 軟件教程 > 教程 > 主成分分析(PCA):數(shù)據(jù)降維的數(shù)學(xué)方法

主成分分析(PCA):數(shù)據(jù)降維的數(shù)學(xué)方法

來(lái)源:好特整理 | 時(shí)間:2024-06-05 08:46:08 | 閱讀:195 |  標(biāo)簽: 降維 再見(jiàn) | 見(jiàn) C 算法 PC 數(shù)學(xué)   | 分享到:

?大俠幸會(huì),在下全網(wǎng)同名[算法金] 0 基礎(chǔ)轉(zhuǎn) AI 上岸,多個(gè)算法賽 Top [日更萬(wàn)日,讓更多人享受智能樂(lè)趣] 1. 概念:數(shù)據(jù)降維的數(shù)學(xué)方法 定義 主成分分析(PCA)是一種統(tǒng)計(jì)方法,通過(guò)正交變換將一組可能相關(guān)的變量轉(zhuǎn)換為一組線性不相關(guān)的變量,這組新的變量稱為主成分。 大白話,PCA能夠從數(shù)據(jù)

主成分分析(PCA):數(shù)據(jù)降維的數(shù)學(xué)方法

?大俠幸會(huì),在下全網(wǎng)同名[算法金] 0 基礎(chǔ)轉(zhuǎn) AI 上岸,多個(gè)算法賽 Top [日更萬(wàn)日,讓更多人享受智能樂(lè)趣]

主成分分析(PCA):數(shù)據(jù)降維的數(shù)學(xué)方法

主成分分析(PCA):數(shù)據(jù)降維的數(shù)學(xué)方法

主成分分析(PCA):數(shù)據(jù)降維的數(shù)學(xué)方法

1. 概念:數(shù)據(jù)降維的數(shù)學(xué)方法

定義

  • 主成分分析(PCA)是一種統(tǒng)計(jì)方法,通過(guò)正交變換將一組可能相關(guān)的變量轉(zhuǎn)換為一組線性不相關(guān)的變量,這組新的變量稱為主成分。
  • 大白話,PCA能夠從數(shù)據(jù)中提取出最重要的特征,通過(guò)減少變量的數(shù)量來(lái)簡(jiǎn)化模型,同時(shí)保留原始數(shù)據(jù)集中的大部分信息。

特點(diǎn)

  • PCA是最廣泛使用的數(shù)據(jù)降維技術(shù)之一,能夠有效地揭示數(shù)據(jù)的內(nèi)部結(jié)構(gòu),減少分析問(wèn)題的復(fù)雜度。

應(yīng)用領(lǐng)域

  • 圖像處理:圖像壓縮和特征提取。
  • 金融數(shù)據(jù)分析:風(fēng)險(xiǎn)管理、股票市場(chǎng)分析。
  • 生物信息學(xué):基因數(shù)據(jù)分析、疾病預(yù)測(cè)。
  • 社會(huì)科學(xué)研究:?jiǎn)柧頂?shù)據(jù)分析、人口研究。

主成分分析(PCA):數(shù)據(jù)降維的數(shù)學(xué)方法

主成分分析(PCA):數(shù)據(jù)降維的數(shù)學(xué)方法

2 核心原理:方差最大化

  • 方差最大化:
  • PCA通過(guò)找到數(shù)據(jù)方差最大的方向來(lái)確定主成分,然后找到次大方向,且這些方向必須是相互正交的。
  • 這樣做的目的是保證降維后的數(shù)據(jù)能夠保留最多的原始數(shù)據(jù)信息。

主成分分析(PCA):數(shù)據(jù)降維的數(shù)學(xué)方法

  • 計(jì)算步驟:
  1. 數(shù)據(jù)標(biāo)準(zhǔn)化:使得每個(gè)特征的平均值為0,方差為1。
  2. 計(jì)算協(xié)方差矩陣:反映變量之間的相關(guān)性。
  3. 計(jì)算協(xié)方差矩陣的特征值和特征向量:特征向量決定了PCA的方向,特征值決定了方向的重要性。
  4. 選擇主成分:根據(jù)特征值的大小,選擇最重要的幾個(gè)特征向量,構(gòu)成新的特征空間。

主成分分析(PCA):數(shù)據(jù)降維的數(shù)學(xué)方法

主成分分析(PCA):數(shù)據(jù)降維的數(shù)學(xué)方法

3 優(yōu)缺點(diǎn)分析

  • 優(yōu)點(diǎn):
  • 降維效果顯著:能夠有效地減少數(shù)據(jù)的維度,同時(shí)盡可能地保留原始數(shù)據(jù)的信息。
  • 揭示數(shù)據(jù)結(jié)構(gòu):有助于發(fā)現(xiàn)數(shù)據(jù)中的模式和結(jié)構(gòu),便于進(jìn)一步分析。
  • 無(wú)需標(biāo)簽數(shù)據(jù):PCA是一種無(wú)監(jiān)督學(xué)習(xí)算法,不需要數(shù)據(jù)標(biāo)簽。
  • 缺點(diǎn):
  • 線性限制:PCA只能捕捉到數(shù)據(jù)的線性關(guān)系和結(jié)構(gòu),對(duì)于非線性結(jié)構(gòu)無(wú)能為力。
  • 方差并非信息量的唯一衡量:有時(shí)候數(shù)據(jù)的重要性并不僅僅體現(xiàn)在方差上,PCA可能會(huì)忽略掉一些重要信息。
  • 對(duì)異常值敏感:異常值可能會(huì)對(duì)PCA的結(jié)果產(chǎn)生較大影響。

主成分分析(PCA):數(shù)據(jù)降維的數(shù)學(xué)方法

主成分分析(PCA):數(shù)據(jù)降維的數(shù)學(xué)方法

4 PCA 實(shí)戰(zhàn)

介紹一個(gè)用于主成分分析的 Python 庫(kù)

PCA的核心是構(gòu)建在sklearn功能之上,以便在與其他包結(jié)合時(shí)實(shí)現(xiàn)最大的兼容性。

除了常規(guī)的PCA外,它還可以執(zhí)行SparsePCA和TruncatedSVD。

其他功能包括:

  • 使用Biplot繪制載荷圖
  • 確定解釋的方差
  • 提取性能最佳的特征
  • 使用載荷繪制的散點(diǎn)圖
  • 使用Hotelling T2和/或SPE/Dmodx進(jìn)行異常值檢測(cè)
pip install pca

from pca import pca  # 導(dǎo)入PCA模塊
import numpy as np
import pandas as pd

# Dataset
from sklearn.datasets import load_iris  # 導(dǎo)入鳶尾花數(shù)據(jù)集

# 從鳶尾花數(shù)據(jù)集中創(chuàng)建DataFrame對(duì)象
X = pd.DataFrame(data=load_iris().data, columns=load_iris().feature_names, index=load_iris().target)

# 初始化PCA模型,指定主成分?jǐn)?shù)量為3,并進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化
model = pca(n_components=3, normalize=True)

# 擬合并轉(zhuǎn)換數(shù)據(jù)
out = model.fit_transform(X)

# 創(chuàng)建只包含方向的圖
fig, ax = model.biplot(textlabel=True, legend=False, figsize=(10, 6))

主成分分析(PCA):數(shù)據(jù)降維的數(shù)學(xué)方法

下面我們使用 sklearn 里面的 PCA 工具,在一組人臉數(shù)據(jù)上直觀感受下,


# 導(dǎo)入必要的庫(kù)
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_olivetti_faces
from sklearn.decomposition import PCA

# 加載Olivetti人臉數(shù)據(jù)集
faces_data = fetch_olivetti_faces()
X = faces_data.data

# 可視化原始圖像和對(duì)應(yīng)的主成分
n_images = 4  # 每行顯示的圖像數(shù)量
n_rows = 4    # 總共的行數(shù)

fig, axes = plt.subplots(n_rows, 2*n_images, figsize=(16, 10), subplot_kw={'xticks':[], 'yticks':[]})

# 使用PCA降維
n_components = 50  # 設(shè)置PCA保留的主成分?jǐn)?shù)量
pca = PCA(n_components=n_components, whiten=True, random_state=42)
X_pca = pca.fit_transform(X)

for r in range(n_rows):
    for i in range(n_images):
        index = r * n_images + i
        
        axes[r, 2*i].imshow(X[index].reshape(64, 64), cmap='gray')
        axes[r, 2*i].set_title(f'大俠 {index+1} 圖像', fontproperties='SimHei')  # 手動(dòng)設(shè)置字體

        axes[r, 2*i+1].imshow(pca.inverse_transform(X_pca[index]).reshape(64, 64), cmap='bone')
        axes[r, 2*i+1].set_title(f'大俠 {index+1} 主成分', fontproperties='SimHei')  # 手動(dòng)設(shè)置字體

plt.tight_layout()
plt.show()

我們保留了前 50 個(gè)主成分

通過(guò)可視化對(duì)比圖直觀感受下,信息保留了多多少,損失了多少

通過(guò)對(duì)比圖可以看到,某一張人臉的基本信息都保留了下來(lái)

如果保留 前 100 個(gè)主成分,那就更接近原始圖片了

你也可以試下,保留 1 個(gè)主成分會(huì)怎樣?通過(guò)保留的信息你還認(rèn)得出來(lái)哪過(guò)大俠是哪過(guò)嗎

主成分分析(PCA):數(shù)據(jù)降維的數(shù)學(xué)方法

主成分分析(PCA):數(shù)據(jù)降維的數(shù)學(xué)方法

[算法金,碎碎念]

  • 最近 【不上班】 這個(gè)詞頻繁出現(xiàn)在朋友圈,貌似很火
  • 不上班,站著把錢(qián)賺了,大概率不可能的
  • 不上班,躺著把錢(qián)賺了(別想歪了),更是絕大概率不可能的
  • 有些圈子,天然就是靠博眼球來(lái)篩選用戶,真的很可怕
  • 想到了一句話【當(dāng)大家都有病時(shí),你就不覺(jué)得這是病了】
  • 在這種圈子呆久了,大概率會(huì)淪陷的,別以外自己不會(huì),咱都是普通人
  • 大部分人都是普通人,普通人通常都不信概率,而概率恰恰是反映常態(tài) 分布的
  • 悲劇,卒~

全網(wǎng)同名,日更萬(wàn)日,讓更多人享受智能樂(lè)趣

煩請(qǐng)大俠多多 分享、在看、點(diǎn)贊,助力算法金又猛又持久、很黃很 BL 的日更下去;我們一起,讓更多人享受智能樂(lè)趣

同時(shí)邀請(qǐng)大俠 關(guān)注、星標(biāo) 算法金,圍觀日更萬(wàn)日,助你功力大增、笑傲江湖

小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點(diǎn)或證實(shí)其描述。

再見(jiàn) 2.9.5
再見(jiàn) 2.9.5
類(lèi)型:休閑益智  運(yùn)營(yíng)狀態(tài):正式運(yùn)營(yíng)  語(yǔ)言:中文   

游戲攻略

游戲禮包

游戲視頻

游戲下載

游戲活動(dòng)

再見(jiàn)是一款講述“親情”與“穿越時(shí)空”的互動(dòng)敘事游戲,故事講述的是一個(gè)百無(wú)聊賴的暑假,少年小夏吹熄生
見(jiàn) 1.0
見(jiàn) 1.0
類(lèi)型:角色扮演  運(yùn)營(yíng)狀態(tài):公測(cè)  語(yǔ)言:中文   

游戲攻略

游戲禮包

游戲視頻

游戲下載

游戲活動(dòng)

《見(jiàn)》是由開(kāi)發(fā)商騰訊開(kāi)發(fā)的一款暗黑精致畫(huà)風(fēng)的角色扮演類(lèi)游戲,通過(guò)模擬視障人士的視覺(jué)和觸覺(jué)感受,可以

相關(guān)視頻攻略

更多

掃二維碼進(jìn)入好特網(wǎng)手機(jī)版本!

掃二維碼進(jìn)入好特網(wǎng)微信公眾號(hào)!

本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]

湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)