手把手的機器學習新手教學與R語言實作:主成份分析— PCA ...
文章推薦指數: 80 %
基本介紹. “手把手的機器學習新手教學與R語言實作:主成份分析— PCA (Principle component analysis)” is published by Shan-Jyun Wu.
GetstartedOpeninappShan-JyunWuSigninGetstarted12FollowersAboutGetstartedOpeninapp手把手的機器學習新手教學與R語言實作:主成份分析—PCA(Principlecomponentanalysis)Shan-JyunWuAug18,2018·3minread基本介紹在資料科學實務中,經常會處理到高維度的資料。
以Kaggle的Zillow資料集為例,每一筆資料有著不同欄位,也就是特徵(features),諸如房子的類別、房子的大小、周圍的房價、衛浴房間的數量…等等。
高維度資料通常有不易分析、不易理解、無法視覺化呈現的缺點。
從實際層面看,過高的維度也會增加儲存資料所需的資源。
不過,在高維度下,有些維度是多餘的,可以在不丟失過多資訊下,被其他維度的線性組合所表述。
於是,就有了所謂的降維(dimensionalityreduction)技術。
舉例來說,本來有1、2百個欄位的資料,經過一番處理,欄位頓時少了一半,而且即使欄位變少,這份資料帶給你的資訊量卻沒變少(起碼資訊量的減少沒有明顯到讓你可以察覺),OMG,這真是太神奇了,人生還有什麼比這更美好的事?回到正題。
PCA是一種常見的降維方法,考慮N筆具有p個特徵,X1,X2,…,Xp,的資料,令X=[X1,X2,…,Xp]為Nxp維矩陣,也就是說,每一筆資料都可視為R^p空間中的一個向量。
PCA的基本精神,即是利用正交投影(orthogonalprojection),將高維度資料投影到低維度空間,並找到保留最大資料變異數(variation)的低維度表徵方式,使每筆資料的低維度表徵是該p個特徵的線性組合。
利用PCA,我們可以找到某個位於R^p空間中的標準化(normalized)向量:,使資料投影在此向量上的變異數最大,而該投影Z1稱為第一主成份(firstprinciplecomponent):firstprinciplecomponent其中,稱為fisrtprinciplecomponentscores,即為N筆資料在向量上的投影量,而此向量稱為第一主成分的負荷向量(loadingvectorofthefirstprinciplecomponent)。
依此類推,PCA可以進一步沿著與向量正交的方向,找到一個標準化的向量,使資料投影在此向量上的變異數最大,接著找到向量既然已經用PCA找出各個主成分:,而主成分的幾何意義又代表p維空間中向量,於負荷向量(loadingvectors)張出的子空間中的投影,那麼,只要適當選取主成份的數量,比如:(以上都是Nx2維矩陣)就可以用低維空間的向量來表徵原本的N筆資料了。
PCA演算法(施工中施工中施工中施工中施工中)R語言實例讓我們用R語言內建的USArrests資料集,實作一下PCA。
USArrests是根據1973年,美國50州各州,平均每100,000個居民裡,因為犯下Murder(謀殺)、Assault(襲擊他人)、與Rape(強暴)而遭逮補的人數,UrbanPop代表各州居住在都會區的人口百分比。
>library(tidyverse)─Attachingpackages─────────────────────tidyverse1.2.1─✔ggplot23.0.0✔purrr0.2.5✔tibble1.4.2✔dplyr0.7.6✔tidyr0.8.1✔stringr1.2.0✔readr1.1.1✔forcats0.3.0─Conflicts──────────────────────tidyverse_conflicts()─✖dplyr::filter()masksstats::filter()✖dplyr::lag()masksstats::lag()>data("USArrests")>head(USArrests)MurderAssaultUrbanPopRapeAlabama13.22365821.2Alaska10.02634844.5Arizona8.12948031.0Arkansas8.81905019.5California9.02769140.6Colorado7.92047838.7首先,直接用R語言內建的prcomp函數,來看看PCA的應用。
>pcaattributes(pca)$names[1]"sdev""rotation""center""scale""x"$class[1]"prcomp">mode(pca)[1]"list"其中,rotation這個屬性儲存了由負荷向量(loadingvector)形成的矩陣:>pca$rotationPC1PC2PC3PC4Murder-0.53589950.4181809-0.34123270.64922780Assault-0.58318360.1879856-0.2681484-0.74340748UrbanPop-0.2781909-0.8728062-0.37801580.13387773Rape-0.5434321-0.16731860.81777790.08902432一般來說,對N筆p維的資料,principlecomponents的數量為min(N-1,p),在這裡,我們可以看到USArrests資料集的principlecomponents一共有四個。
x屬性則存取principalcomponentsscores:>head(pca$x)PC1PC2PC3PC4Alabama-0.97566041.1220012-0.439803660.154696581Alaska-1.93053791.06242692.01950027-0.434175454Arizona-1.7454429-0.73845950.05423025-0.826264240Arkansas0.13999891.10854230.11342217-0.180973554California-2.4986128-1.52742670.59254100-0.338559240Colorado-1.4993407-0.97762971.084001620.001450164我們可以選取PC1和PC2來作為降維視覺化兩個principlecomponents。
利用biplot函數,可以幫助我們很快完成這件事。
biplot預設會選取PC1,PC2來做圖,也可以自訂想選取的components,比如想選取PC1和PC3,則可以在biplot裡加入choices=1:3。
biplot(pca,scale=0)#scale=0代表將loadingvector做適當scale紅色箭頭代表loadingvectors在PC1PC2兩個方向上的分量。
文字則代表PC1與PC2方向上的scores。
現在,我們稍微把水探得深一點,來看看如何用R語言實作PCA演算法。
首先必須把每一個特徵的平均值歸零、標準差歸ㄧ。
先來看一下原本數據的平均值標準差為何。
>apply(USArrests,2,var)MurderAssaultUrbanPopRape18.970476945.16571209.5187887.72916>apply(USArrests,2,mean)MurderAssaultUrbanPopRape7.788170.76065.54021.232接著,把數據集rescale一下:>scaledUSArrestsapply(USArrests,2,var)#檢查一下標準差MurderAssaultUrbanPopRape18.970476945.16571209.5187887.72916>scaledUSArrestsapply(scaledUSArrests,2,var)#檢查一下標準差MurderAssaultUrbanPopRape1111>apply(scaledUSArrests,2,mean)#檢查一下平均值MurderAssaultUrbanPopRape-7.663087e-171.112408e-16-4.332808e-168.942391e-17(施工中施工中施工中)參考資料:MathematicsforMachineLearning:PCAAnIntroductiontoStatisticalLearningwithApplicationsinRShan-JyunWuFollow3838 38MachineLearningDimensionalityReductionDataScienceStatisticalLearningRMorefromShan-JyunWuFollow
延伸文章資訊
- 1R语言教程|带你搞清楚主成分分析(PCA)并完成分析 - 知乎专栏
既然主成分分析主要是选取解释变量方差最大的主成分,故先需要计算变量两两之间协方差,根据协方差与方差的关系,位于协方差矩阵对角线上的数值即为相应 ...
- 2Principal Components Analysis (PCA) | 主成份分析| R 統計
Principal Components Analysis (PCA) | 主成份分析| R 統計 · 主成分分析屬於非監督是式學習法,即處理一組沒有回應變數Y(目標變數)的一群X變數(X1,X...
- 3PCA主成分分析R語言- IT閱讀 - ITREAD01.COM - 程式入門教學
作主成分分析並顯示分析結果 #princomp()主成分分析可以從相關陣或者從協方差陣做主成分分析 #cor是邏輯變量當cor=TRUE表示用樣本的相關矩陣R做主成分 ...
- 4R筆記–(7)主成份分析(2012美國職棒MLB) - RPubs
Reference; R and packages version. 主成份分析(Principal Component Analysis) ... 計算每個主成分的解釋比例= 各個主成份的特徵...
- 5主成分分析(Principal Components Analysis) - RPubs
主成分分析是一種通過降維技術把多個變數化成少數幾個主成分的方法。這些主成分能夠反映原始變數的絕大部分資訊,它們通常表示為原始變數的線性組合。