
現(xiàn)實世界中數據一般都是復雜和高維的,比如描述一個人,有姓名、年齡、性別、受教育程度、收入、地址、電話等等幾十種屬性,如此多的屬性對于數據分析是一個嚴重的挑戰(zhàn),除了極大增加建模的成本和模型的復雜度,往往也會導致過擬合問題,因此在實際處理過程中,一些降維的方法是必不可少,其中用的比較多的有主成分分析(PCA)、奇異值分解(SVD)、特征選擇(Feature
Select),本文將對PCA和SVD作簡單的介紹,并力圖通過案例加深對這兩種降維方法的理解。
1 主成分分析PCA
1.1 R語言案例
在R語言中PCA對應函數是princomp,來自stats包。以美國的各州犯罪數據為對象進行分析,數據集USArrests在graphics包中。
> library(stats) ##princomp
> head(USArrests)
Murder Assault UrbanPop Rape
Alabama 13.2 236 58 21.2
Alaska 10.0 263 48 44.5
Arizona 8.1 294 80 31.0
> summary(pc.cr <- princomp(USArrests, cor = TRUE))
##每個主成分對方差的貢獻比例,顯然Comp.1 + Comp2所占比例超過85%,因此能夠用前兩個主成分來表示整個數據集,也將數據從4維降到兩維
Importance of components:
Comp.1 Comp.2 Comp.3 Comp.4
Standard deviation 1.5748783 0.9948694 0.5971291 0.41644938
Proportion of Variance 0.6200604 0.2474413 0.0891408 0.04335752
Cumulative Proportion 0.6200604 0.8675017 0.9566425 1.00000000
接下來查看每個特征在主成分中所在的比例
> loadings(pc.cr)
Loadings:
Comp.1 Comp.2 Comp.3 Comp.4
Murder -0.536 0.418 -0.341 0.649
Assault -0.583 0.188 -0.268 -0.743
UrbanPop -0.278 -0.873 -0.378 0.134
Rape -0.543 -0.167 0.818
Comp.1 Comp.2 Comp.3 Comp.4
SS loadings 1.00 1.00 1.00 1.00
Proportion Var 0.25 0.25 0.25 0.25
Cumulative Var 0.25 0.50 0.75 1.00
根據以上數據可很容易轉換為幾個數學等式:
Comp1 = -0.536 * Murder + (-0.583) * Assault + (-0.278)*UrbanPop + (-0.543)* Rape
Comp2 = 0.418 * Murder + 0.188 * Assault + (-0.873)*UrbanPop + (-0.167)* Rape
可以用Comp1、Comp2兩個維度的數據來表示各州,在二維圖上展現(xiàn)各州個聚類關系。
> head(pc.cr$scores) ##scores包含有各州在四個主成分的得分
Comp.1 Comp.2 Comp.3 Comp.4
Alabama -0.98556588 1.13339238 -0.44426879 0.156267145
Alaska -1.95013775 1.07321326 2.04000333 -0.438583440
Arizona -1.76316354 -0.74595678 0.05478082 -0.834652924
Arkansas 0.14142029 1.11979678 0.11457369 -0.182810896
California -2.52398013 -1.54293399 0.59855680 -0.341996478
##將前兩個Comp提取出來,轉換為data.frame方便會面繪圖
> stats.arrests <- data.frame(pc.cr$scores[, -c(3:4)])
> head(stats.arrests)
Comp.1 Comp.2
Alabama -0.9855659 1.1333924
Alaska -1.9501378 1.0732133
Arizona -1.7631635 -0.7459568
> library(ggplot2)
##展現(xiàn)各州的分布情況,觀察哪些州比較異常,哪些能夠進行聚類
> ggplot(stats.arrests, aes(x = Comp.1, y = Comp.2)) +
+ xlab("First Component") + ylab("Second Component") +
+ geom_text(alpha = 0.75, label = rownames(stats.arrests), size = 4)
有興趣的同學還可以,分析南北各州在犯罪數據上的迥異。
1.2 PCA理論基礎
經過上一小節(jié)對PCA的簡單應用,應該可以體會到PCA在降維處理上的魅力,下面簡單介紹PCA的理論基礎,對于更好的理解和應用PCA會非常有幫助。
PCA本質就是將數據投影在眾多正交向量上,根據投影后數據的方差大小,說明向量解釋數據的程度,方差越大,解釋的程度越大。以下圖為例,數據投影在向量u的方差明顯最大,因此u向量作為第一主成分,與u向量正交的v向量,作為第二主成分。
Nd
= dim(data) 代表數據的維數, Sc = num(Comp)代表主成分的個數(Nd = Sc ),在實際情況中,往往取前k
<<
Nd個主成分便能解釋數據的方差程度超過90%,因此能夠在只丟失少量消息的情況,達到大規(guī)模減少數據維度的效果,無論對于建立模型、提升性能、減少成本都有很大的意義。
從某種意義上講,PCA只是將很多相互間存在線性關系的特征,轉換成新的、相互獨立的特征,從而減少特征數量。對此,它需要借助特征值來找到方差最大的主成分,每一個特征值對應一個特征向量,特征值越大,特征向量解釋數據矩陣的方差的程度越高。因此,只需要將特征值從大到小排列,取出前k個特征向量,便能確定k個最重要的主成分。
PCA算法通常包括如下5個步驟:
A 平均值歸一化,減去每個特征的平均值,保證歸一化后的數據平均值為0
B 計算協(xié)方差矩陣,每兩個特征之間的協(xié)方差
C 計算協(xié)方差矩陣的特征向量和特征值
D 將特征向量根據對應的特征值大小降序排列,特征向量按列組成FeatureVector = (eig_1, eig_2, …,eig_n)
E RowFeatureVector = t(FeatureVector) (轉置),eig_1變?yōu)榈谝恍校琑owDataAdjusted = t(DataAdjusted), 特征行變?yōu)榱?,得到最終的數據。
FinalData = RowFeatureVector X RowDataAdjusted
從維度變化的角度出發(fā)
協(xié)方差矩陣:n x n , FeatureVector: n x n,RowFeatureVector:n x n, n為特征數量
DataAdjusted:m x n, RowDataAdjusted: n x m
取前k個特征向量, RowFeatureVector:k x n
那么FinalData: k x m, 這樣便實現(xiàn)維度的降低。
2 奇異值分解(SVD)
2.1 案例研究
我們通過一張圖片的處理來展示奇異值分解的魅力所在,對于圖片的處理會用到R語言中raster和jpeg兩個包。
##載入圖片,并且顯示出來
> library(raster)
Loading required package: sp
> library(jpeg)
> raster.photo <- raster("Rlogo.jpg")
> photo.flip <- flip(raster.photo, direction = "y")
##將數據轉換為矩陣形式
> photo.raster <- t(as.matrix(photo.flip))
> dim(photo.raster)
[1] 288 196
> image(photo.raster, col = grey(seq(0, 1, length = 256))) ##灰化處理
##奇異值進行分解
> photo.svd <- svd(photo.raster)
> d <- diag(photo.svd$d)
> v <- as.matrix(photo.svd$v)
> u <- photo.svd$u
取第一個奇異值進行估計,如下左圖
> u1 <- as.matrix(u[, 1])
> d1 <- as.matrix(d[1, 1])
> v <- as.matrix(v[, 1])
> photo1 <- u1 %*% d1 %*% t(v)
> image(photo1, col = grey(seq(0, 1, length = 256)))
取前五十個奇異值進行模擬,基本能還原成最初的模樣,如上右圖
> u2 <- as.matrix(u[, 1:50])
> d2 <- as.matrix(d[1:50, 1:50])
> v2 <- as.matrix(v[, 1:50])
> photo2 <- u2 %*% d2 %*% t(v2)
> image(photo2, col = grey(seq(0, 1, length = 256)))
當我們嘗試用更多的奇異值模擬時,會發(fā)現(xiàn)效果越來來越好,這就是SVD的魅力,對于降低數據規(guī)模、提高運算效率、節(jié)省存儲空間有著非常棒的效果。原本一張圖片需要288
X 196的存儲空間,經過SVD處理后,在保證圖片質量的前提下,只需288 X 50 + 50 X 50 + 196 X
50的存儲空間僅為原來的一半。
2.1 SVD理論基礎
SVD算法通過發(fā)現(xiàn)重要維度的特征,幫助更好的理解數據,從而在數據處理過程中減少不必要的屬性和特征,PCA(主成分分析)只是SVD的一個特例。PCA針對的正方矩陣(協(xié)方差矩陣),而SVD可用于任何矩陣的分解。
對于任意m x n矩陣A,都有這樣一個等式
Am x n = Um x r Sr x r VTn x r
U的列稱為左奇異向量,V的列稱為右奇異向量,S是一個對角線矩陣,對角線上的值稱為奇異值,
r = min(n,
m)。U的列對應AAT的特征向量,V的列則是ATA的特征向量,奇異值是AAT和ATA共有特征值的開方。由于A可能不是正方矩陣,因此無法利用得到特征值和特征向量,因此需要進行變換,即AAT(m
x m)和ATA(n x n),這樣就可以計算特征向量和特征值了。
A = USVT AT = VSUT
AAT = USVT VSUT = US2UT
AAT U = U S2
同樣可以推導出: ATA V = V S2
總結下來,SVD算法主要有六步:
A 、計算出AAT
B 、計算出AAT的特征向量和特征值
C、計算出ATA
D 、計算出ATA的特征向量和特征值
E、計算ATA和ATA共有特征值的開方
F、計算出U、 S、 V
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
DSGE 模型中的 Et:理性預期算子的內涵、作用與應用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數據分析師:解鎖表結構數據特征價值的專業(yè)核心 表結構數據(以 “行 - 列” 規(guī)范存儲的結構化數據,如數據庫表、Excel 表、 ...
2025-09-17Excel 導入數據含缺失值?詳解 dropna 函數的功能與實戰(zhàn)應用 在用 Python(如 pandas 庫)處理 Excel 數據時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應用 在數據分析與統(tǒng)計學領域,假設檢驗是驗證研究假設、判斷數據差異是否 “ ...
2025-09-16CDA 數據分析師:掌控表格結構數據全功能周期的專業(yè)操盤手 表格結構數據(以 “行 - 列” 存儲的結構化數據,如 Excel 表、數據 ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數量的準確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網絡請求開發(fā)時(如使用requests ...
2025-09-15CDA 數據分析師:激活表格結構數據價值的核心操盤手 表格結構數據(如 Excel 表格、數據庫表)是企業(yè)最基礎、最核心的數據形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調用、數據爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數據的科學計數法問題 為幫助 Python 數據從業(yè)者解決pd.read_csv讀取長浮點數據時的科學計數法問題 ...
2025-09-12CDA 數據分析師:業(yè)務數據分析步驟的落地者與價值優(yōu)化者 業(yè)務數據分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務邏輯:從規(guī)則拆解到數據把關的實戰(zhàn)指南 在業(yè)務系統(tǒng)落地過程中,“業(yè)務邏輯” 是連接 “需求設計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數據驅動下的精準零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當下,精準營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數據分析師與戰(zhàn)略 / 業(yè)務數據分析:概念辨析與協(xié)同價值 在數據驅動決策的體系中,“戰(zhàn)略數據分析”“業(yè)務數據分析” 是企業(yè) ...
2025-09-11Excel 數據聚類分析:從操作實踐到業(yè)務價值挖掘 在數據分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數據中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數據解讀到決策支撐的價值導向 統(tǒng)計模型作為數據分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10CDA 數據分析師:商業(yè)數據分析實踐的落地者與價值創(chuàng)造者 商業(yè)數據分析的價值,最終要在 “實踐” 中體現(xiàn) —— 脫離業(yè)務場景的分 ...
2025-09-10機器學習解決實際問題的核心關鍵:從業(yè)務到落地的全流程解析 在人工智能技術落地的浪潮中,機器學習作為核心工具,已廣泛應用于 ...
2025-09-09SPSS 編碼狀態(tài)區(qū)域中 Unicode 的功能與價值解析 在 SPSS(Statistical Product and Service Solutions,統(tǒng)計產品與服務解決方案 ...
2025-09-09