【視頻】主成分分析PCA降維方法和R語言分析葡萄酒可視化實(shí)例|數(shù)據(jù)分享
原文鏈接:http://tecdat.cn/?p=22492
原文出處:拓端數(shù)據(jù)部落公眾號
?
降維技術(shù)之一是主成分分析?(PCA) 算法,該算法將可能相關(guān)變量的一組觀察值轉(zhuǎn)換為一組線性不相關(guān)變量。在本文中,我們將討論如何通過使用 R編程語言使用主成分分析來減少數(shù)據(jù)維度分析葡萄酒數(shù)據(jù)(查看文末了解數(shù)據(jù)獲取方式)。
主成分分析PCA降維方法和R語言分析葡萄酒可視化實(shí)例
主成分分析PCA降維方法和R語言分析葡萄酒可視化實(shí)例
,時(shí)長04:30
高維數(shù)據(jù)集的處理可能是一個(gè)復(fù)雜的問題,因?yàn)槲覀冃枰叩挠?jì)算資源,或者難以控制機(jī)器學(xué)習(xí)模型的過度擬合等。為避免此類問題,您可以降低數(shù)據(jù)集的維數(shù)。降維將數(shù)據(jù)從高維空間轉(zhuǎn)移到低維空間,使數(shù)據(jù)的低維表示只保留原始數(shù)據(jù)的重要方面。

這是將三維數(shù)據(jù)集轉(zhuǎn)換為三個(gè)二維數(shù)據(jù)集的可視化:該圖說明了一個(gè)三維特征空間被分成三個(gè)二維特征空間,之后,如果發(fā)現(xiàn)相關(guān),特征的數(shù)量可以進(jìn)一步減少。

主成分分析(PCA)
主成分分析(PCA)是最流行的線性降維算法之一。它是一種基于投影的方法,通過將數(shù)據(jù)投影到一組正交(垂直)軸上來轉(zhuǎn)換數(shù)據(jù)。
“PCA 的工作條件是,當(dāng)高維空間中的數(shù)據(jù)映射到低維空間中的數(shù)據(jù)時(shí),低維空間中數(shù)據(jù)的方差或散布應(yīng)該最大?!?/p>
假設(shè)我們必須將數(shù)據(jù)點(diǎn)的二維表示轉(zhuǎn)換為一維表示。因此,我們將嘗試在它們上找到一條直線并投影數(shù)據(jù)點(diǎn)。(直線是一維的)。選擇直線的可能性有很多。
假設(shè)藍(lán)色線將是我們的新維度。如果你看到藍(lán)線(連接紅點(diǎn)在藍(lán)線上的投影),即每個(gè)數(shù)據(jù)點(diǎn)與直線的垂直距離就是投影誤差。所有數(shù)據(jù)點(diǎn)的誤差之和將是總投影誤差。
我們的新數(shù)據(jù)點(diǎn)將是那些原始藍(lán)色數(shù)據(jù)點(diǎn)的投影(紅色點(diǎn))。正如我們所看到的,我們通過將二維數(shù)據(jù)點(diǎn)投影到一維空間(即直線)上,將它們轉(zhuǎn)換為一維數(shù)據(jù)點(diǎn)。
您從本質(zhì)上將數(shù)據(jù)的維度從二維減少到一維。一維空間(也就是直線)是二維坐標(biāo)系的子空間。
藍(lán)線是使用數(shù)學(xué)優(yōu)化構(gòu)建的,以盡可能地沿該線最大化數(shù)據(jù)點(diǎn)之間的方差,數(shù)據(jù)在二維空間中沿藍(lán)線具有最大方差。

我們稱這條線為我們的第一個(gè)主成分。自然,線上的點(diǎn)仍然比原始 2D 空間中的點(diǎn)更接近,因?yàn)槟谑^(qū)分它們的維度。但在很多情況下,通過降維實(shí)現(xiàn)的簡化超過了信息的損失,損失可以部分或全部重構(gòu)。
在我們之前的示例中,我們只有一個(gè)主成分。一旦進(jìn)入更高維空間,您可能會使用多個(gè)主成分,因?yàn)橛梢粋€(gè)主成分解釋的方差通常不足。主成分是相互正交的向量。這意味著它們形成 90 度角。在數(shù)學(xué)上,正交向量是獨(dú)立的,這意味著由第二個(gè)主成分解釋的方差與第一個(gè)主成分的方差不重疊。因此,它們盡可能有效地表示信息。第一個(gè)主成分將捕獲大部分方差;第二個(gè)主成分將捕獲第一個(gè)未解釋的方差的第二大部分,依此類推。

實(shí)際上,主成分是通過確保特征之間沒有信息重疊來盡可能有效地表示數(shù)據(jù)及其差異的特征組合。原始特征通常顯示出顯著的冗余,這也是主成分分析在降維方面如此有效的主要原因。
R語言主成分分析(PCA)葡萄酒可視化:主成分得分散點(diǎn)圖和載荷圖
我們將使用葡萄酒數(shù)據(jù)集進(jìn)行主成分分析。
數(shù)據(jù)
數(shù)據(jù)包含177個(gè)樣本和13個(gè)變量的數(shù)據(jù)框;vintages包含類標(biāo)簽。這些數(shù)據(jù)是對生長在意大利同一地區(qū)但來自三個(gè)不同栽培品種的葡萄酒進(jìn)行化學(xué)分析的結(jié)果:內(nèi)比奧羅、巴貝拉和格里格諾葡萄。來自內(nèi)比奧羅葡萄的葡萄酒被稱為巴羅洛。
這些數(shù)據(jù)包含在三種類型的葡萄酒中各自發(fā)現(xiàn)的幾種成分的數(shù)量。
#?看一下數(shù)據(jù)
head(no)
輸出

轉(zhuǎn)換和標(biāo)準(zhǔn)化數(shù)據(jù)
對數(shù)轉(zhuǎn)換和標(biāo)準(zhǔn)化,將所有變量設(shè)置在同一尺度上。
#?對數(shù)轉(zhuǎn)換
no_log?<-?log(no)
#?標(biāo)準(zhǔn)化
log\_scale?<-?scale(no\_log)
head(log_scale)

主成分分析(PCA)
使用奇異值分解算法進(jìn)行主成分分析
prcomp(log_scale,?center=FALSE)
summary(PCA)

基本圖形(默認(rèn)設(shè)置)
帶有基礎(chǔ)圖形的主成分得分和載荷圖
plot(scores\[,1:2\],?#?x和y數(shù)據(jù)
?????pch=21,?#?點(diǎn)形狀
????cex=1.5,?#?點(diǎn)的大小
legend("topright",?#?legend的位置
???????legend=levels(vint),?#?圖例顯示
plot(loadings\[,1:2\],?#?x和y數(shù)據(jù)
?????pch=21,?#?點(diǎn)的形狀
text(loadings\[,1:2\],?#?設(shè)置標(biāo)簽的位置


此外,我們還可以在分?jǐn)?shù)圖中的組別上添加95%的置信度橢圓。
置信度橢圓圖函數(shù)
##?橢圓曲線圖
????????????????????????elev=0.95,?#?橢圓概率水平
????????????????????????pcol=NULL,?#?手工添加顏色,必須滿足長度的因素
????????????????????????cexsize=1,?#?點(diǎn)大小
????????????????????????ppch=21,?#?點(diǎn)類型,必須滿足因素的長度
????????????????????????legcexsize=2,?#?圖例字體大小
????????????????????????legptsize=2,?#?圖例點(diǎn)尺寸
????##?設(shè)定因子水平
????if(is.factor(factr)?{
????????f?<-?factr
????}?else?{
????????f?<-?factor(factr,?levels=unique(as.character(factr)))
????}
????intfactr?<-?as.integer(f)?#?設(shè)置與因子水平相匹配的整數(shù)向量
????##?獲取橢圓的數(shù)據(jù)
????edf?<-?data.frame(LV1?=?x,?LV2=y,?factr?=?f)?#?用數(shù)據(jù)和因子創(chuàng)建數(shù)據(jù)框
????ellipses?<-?dlply(edf,?.(factr),?function(x)?{
????????Ellipse(LV1,?LV2,?levels=elev,?robust=TRUE,?draw=FALSE)?#從dataEllipse()函數(shù)中按因子水平獲取置信度橢圓點(diǎn)
????})
????##?獲取X和Y數(shù)據(jù)的范圍
????xrange?<-?plotat(range(c(as.vector(sapply(ellipses,?function(x)?x\[,1\])),?min(x),?max(x))))
????##?為圖塊設(shè)置顏色
????if(is.null(pcol)?!=?TRUE)?{?#?如果顏色是由用戶提供的
????????pgcol?<-?paste(pcol,?"7e",?sep="")?#?增加不透明度
????#?繪圖圖形
????plot(x,y,?type="n",?xlab="",?ylab="",?main=""
????abline(h=0,?v=0,?col="gray",?lty=2)?#在0添加線條
????legpch?<-?c()?#?收集圖例數(shù)據(jù)的矢量
????legcol?<-?c()?#?收集圖例col數(shù)據(jù)的向量
????##?添加點(diǎn)、橢圓,并確定圖例的顏色
????##?圖例
????legend(x=legpos,?legend=levels(f),?pch=legpch,?
##?使用prcomp()函數(shù)的PCA輸出的軸圖示
????pcavar?<-?round((sdev^2)/sum((sdev^2))
基礎(chǔ)圖形
繪制主成分得分圖,使用基本默認(rèn)值繪制載荷圖
plot(scores\[,1\],?#?X軸的數(shù)據(jù)
????????????scores\[,2\],?#?Y軸的數(shù)據(jù)
????????????vint,?#?有類的因素
????????????pcol=c(),?#?用于繪圖的顏色(必須與因素的數(shù)量相匹配)
????????????pbgcol=FALSE, #點(diǎn)的邊框是黑色的?
????????????cexsize=1.5,?#?點(diǎn)的大小?
????????????ppch=c(21:23),?#?點(diǎn)的形狀(必須與因子的數(shù)量相匹配)
????????????legpos="bottom?right",?#?圖例的位置???????????
????????????legcexsize=1.5,?#?圖例文字大小
????????????legptsize=1.5,?#?圖例點(diǎn)的大小?
????????????axissize=1.5,?#?設(shè)置軸的文字大小
????????????linewidth=1.5?#?設(shè)置軸線尺寸
)?????????????????????????
title(xlab=explain\[\["PC1"\]\],?#?PC1上解釋的方差百分比
??????ylab=explain\[\["PC2"\]\],?#?PC2解釋的方差百分比?
??????main="Scores",?#?標(biāo)題
??????cex.lab=1.5,?#?標(biāo)簽文字的大小
??????cex.main=1.5?#?標(biāo)題文字的大小
plot(loadings\[,1:2\],?#?x和y數(shù)據(jù)
?????pch=21,?#?點(diǎn)的形狀
?????cex=1.5,?#?點(diǎn)的大小
????#?type="n",?#?不繪制點(diǎn)數(shù)
?????axes=FALSE,?#?不打印坐標(biāo)軸
?????xlab="",?#?刪除x標(biāo)簽
?????ylab=""??????????????#?刪除y標(biāo)簽
)
pointLabel(loadings\[,1:2\],?#設(shè)置標(biāo)簽的位置
???????????labels=rownames(PCAloadings),?#?輸出標(biāo)簽
???????????cex=1.5?#?設(shè)置標(biāo)簽的大小
)?#?pointLabel將嘗試將文本放在點(diǎn)的周圍
axis(1,?#?顯示x軸
?????cex.axis=1.5,?#?設(shè)置文本的大小
?????lwd=1.5?#?設(shè)置軸線的大小
)
axis(2,?#?顯示y軸
?????las=2,?#?參數(shù)設(shè)置文本的方向,2是垂直的
?????cex.axis=1.5,?#?設(shè)置文本的大小
?????lwd=1.5?#?設(shè)置軸線的大小
)
title(xlab=explain\[\["PC1"\]\],?#?PC1所解釋的方差百分比
??????ylab=explain\[\["PC2"\]\],?#?PC2解釋的方差百分比?
??????cex.lab=1.5,?#?標(biāo)簽文字的大小
??????cex.main=1.5?#?標(biāo)題文字的大小
)


數(shù)據(jù)獲取
在下面公眾號后臺回復(fù)“葡萄酒數(shù)據(jù)”,可獲取完整數(shù)據(jù)。

點(diǎn)擊文末“閱讀原文”
獲取全文完整資料。
本文選自《R語言主成分分析(PCA)葡萄酒可視化:主成分得分散點(diǎn)圖和載荷圖》。
點(diǎn)擊標(biāo)題查閱往期內(nèi)容
數(shù)據(jù)分享|R語言用主成分分析(PCA)PCR回歸進(jìn)行預(yù)測汽車購買信息可視化
R語言主成分分析(PCA)葡萄酒可視化:主成分得分散點(diǎn)圖和載荷圖
主成分分析PCA譜分解、奇異值分解SVD預(yù)測分析運(yùn)動員表現(xiàn)數(shù)據(jù)和降維可視化
用回歸和主成分分析PCA 回歸交叉驗(yàn)證分析預(yù)測城市犯罪率數(shù)據(jù)
R語言k-means聚類、層次聚類、主成分(PCA)降維及可視化分析鳶尾花iris數(shù)據(jù)集
R語言有限混合模型(FMM,finite mixture model)EM算法聚類分析間歇泉噴發(fā)時(shí)間
R語言用溫度對城市層次聚類、kmean聚類、主成分分析和Voronoi圖可視化
R語言k-Shape時(shí)間序列聚類方法對股票價(jià)格時(shí)間序列聚類
R語言中的SOM(自組織映射神經(jīng)網(wǎng)絡(luò))對NBA球員聚類分析
Python、R對小說進(jìn)行文本挖掘和層次聚類可視化分析案例
R語言復(fù)雜網(wǎng)絡(luò)分析:聚類(社區(qū)檢測)和可視化
R語言中的劃分聚類模型
基于模型的聚類和R語言中的高斯混合模型
r語言聚類分析:k-means和層次聚類
SAS用K-Means 聚類最優(yōu)k值的選取和分析
R語言k-Shape時(shí)間序列聚類方法對股票價(jià)格時(shí)間序列聚類
基于LDA主題模型聚類的商品評論文本挖掘
R語言中實(shí)現(xiàn)層次聚類模型
用R語言進(jìn)行網(wǎng)站評論文本挖掘聚類
R語言鳶尾花iris數(shù)據(jù)集的層次聚類分析
R語言對用電負(fù)荷時(shí)間序列數(shù)據(jù)進(jìn)行K-medoids聚類建模和GAM回歸
R語言聚類算法的應(yīng)用實(shí)例
基于模型的聚類和R語言中的高斯混合模型