R語言高維數(shù)據(jù)的主成分pca、 t-SNE算法降維與可視化分析案例報(bào)告
原文鏈接:http://tecdat.cn/?p=6592
?
降低維度有兩個(gè)主要用例:數(shù)據(jù)探索和機(jī)器學(xué)習(xí)。它對于數(shù)據(jù)探索很有用,因?yàn)榫S數(shù)減少到幾個(gè)維度(例如2或3維)允許可視化樣本。然后可以使用這種可視化來從數(shù)據(jù)獲得見解(例如,檢測聚類并識別異常值)。對于機(jī)器學(xué)習(xí),降維是有用的,因?yàn)樵跀M合過程中使用較少的特征時(shí),模型通常會更好地概括。
在這篇文章中,我們將研究降維技術(shù):
主成分分析(PCA):最流行的降維方法
核PCA:PCA的一種變體,允許非線性
t-SNE?t分布隨機(jī)鄰域嵌入:非線性降維技術(shù)
這些方法之間的關(guān)鍵區(qū)別在于PCA輸出旋轉(zhuǎn)矩陣,可以應(yīng)用于任何其他矩陣以轉(zhuǎn)換數(shù)據(jù)。?
加載數(shù)據(jù)集
? 我們可以通過以下方式加載數(shù)據(jù)集:
df <- read.csv(textConnection(f), header=T)
# 選擇變量
features <- c("Body", "Sweetness", "Smoky",
"Medicinal", "Tobacco", "Honey",
"Spicy", "Winey", "Nutty",
"Malty", "Fruity", "Floral")
feat.df <- df[, c("Distillery", features)]
關(guān)于結(jié)果的假設(shè)
在我們開始減少數(shù)據(jù)的維度之前,我們應(yīng)該考慮數(shù)據(jù)。
由于來自鄰近釀酒廠的威士忌使用類似的蒸餾技術(shù)和資源,他們的威士忌也有相似之處。
為了驗(yàn)證這一假設(shè),我們將測試來自不同地區(qū)的釀酒廠之間威士忌特征的平均表達(dá)是否不同。為此,我們將進(jìn)行MANOVA測試:
## ? ? ? ? ? Df Pillai approx F num Df den Df ? ?Pr(>F) ? ?
## Region ? ? 5 1.2582 ? 2.0455 ? ? 60 ? ?365 3.352e-05 ***
## Residuals 80 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
## ---
## Signif. codes: ?0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
檢驗(yàn)統(tǒng)計(jì)量在5%水平上是顯著的,因此我們可以拒絕零假設(shè)(區(qū)域?qū)μ卣鳑]有影響)。
釀酒廠的地理位置
由于區(qū)域?qū)ν考善鹬匾饔?,我們將通過繪制其緯度和經(jīng)度來探索數(shù)據(jù)集中的釀酒廠所在的位置。以下蘇格蘭威士忌地區(qū)存在:

?

?
?
?
PCA
使用PCA可視化威士忌數(shù)據(jù)集:
?

?
在第二個(gè)圖中,我們將繪制釀酒廠的標(biāo)簽,以便我們可以更詳細(xì)地解釋類別。

?
總的來說,主成分似乎反映了以下特征:
PC1表示味道的強(qiáng)度:如煙熏味,藥用味(如Laphroaig或Lagavulin)與溫和味道(如Auchentoshan或Aberlour)
PC2表示味道的復(fù)雜性:即味道特征(例如Glenfiddich或Auchentoshan)與更具特色的味道特征(例如Glendronach或Macallan)
?
## ? Cluster Campbeltown Highlands Islands Islay Lowlands Speyside
## 1 ? ? ? 1 ? ? ? ? ? 2 ? ? ? ?17 ? ? ? 2 ? ? 2 ? ? ? ?0 ? ? ? 19
## 2 ? ? ? 2 ? ? ? ? ? 0 ? ? ? ? 8 ? ? ? 2 ? ? 1 ? ? ? ?3 ? ? ? 22
## 3 ? ? ? 3 ? ? ? ? ? 0 ? ? ? ? 2 ? ? ? 2 ? ? 4 ? ? ? ?0 ? ? ? ?0
對類別的合理解釋如下:
群集1:?復(fù)合威士忌,主要來自Highlands / Speyside
群集2:?均衡的威士忌,主要來自斯佩塞德和高地
群集3:?煙熏威士忌,主要來自艾萊島
可視化有兩個(gè)有趣的觀察結(jié)果:
Oban和Clynelish是唯一一個(gè)類似于艾萊島釀酒廠口味的高地釀酒廠。
Highland和Speyside威士忌主要在一個(gè)方面不同。在一個(gè)極端是平滑,均衡的威士忌,如Glenfiddich。在另一個(gè)極端是具有更有特色的味道,如麥卡倫。
這包含了我們對PCA的可視化研究。我們將在本文末尾研究使用PCA進(jìn)行預(yù)測。
核PCA
內(nèi)核PCA(KPCA)是PCA的擴(kuò)展,它利用了內(nèi)核函數(shù),這些函數(shù)在支持向量機(jī)上是眾所周知的。通過將數(shù)據(jù)映射到再現(xiàn)內(nèi)核Hilbert空間,即使它們不是線性可分的,也可以分離數(shù)據(jù)。
?
在R中使用KPCA
要執(zhí)行KPCA,我們使用包中的kpca
函數(shù)kernlab
。
使用此核,可以按如下方式減少維數(shù):

?
檢索到新維度后,我們現(xiàn)在可以在轉(zhuǎn)換后的空間中可視化數(shù)據(jù):

?
就可視化而言,結(jié)果比我們使用常規(guī)PCR獲得的結(jié)果稍微粗糙一些。盡管如此,來自艾萊島的威士忌分離得很好,我們可以看到斯佩塞特威士忌的集群,而高地威士忌則分布較廣。
?
T-SNE
t-SNE已成為一種非常流行的數(shù)據(jù)可視化方法。
?
使用t-SNE可視化數(shù)據(jù)
在這里,我們將威士忌數(shù)據(jù)集的維度降低到兩個(gè)維度:

與PCA相比,簇的分離更加清晰,特別是對于簇1和簇2。
對于t-SNE,我們必須進(jìn)行解釋:
V1表示味道復(fù)雜性。這里的異常值是右側(cè)的煙熏艾萊威士忌(例如Lagavulin)和左側(cè)復(fù)雜的高地威士忌(例如麥卡倫)。
V2表示煙熏/藥用味道。
使用PCA進(jìn)行監(jiān)督學(xué)習(xí)
PCA是獨(dú)立完成的,這一點(diǎn)至關(guān)重要。因此,需要遵循以下方法:
在測試數(shù)據(jù)集上執(zhí)行PCA并在轉(zhuǎn)換后的數(shù)據(jù)上訓(xùn)練模型。
將訓(xùn)練數(shù)據(jù)中的學(xué)習(xí)PCA變換應(yīng)用于測試數(shù)據(jù)集,并評估模型在變換數(shù)據(jù)上的性能。
為此,我們將使用?最近鄰模型。此外,因?yàn)樗械淖兞渴窃谔卣骺臻g[0,4]。我們必須優(yōu)化k,因此我們還預(yù)留了用于確定此參數(shù)的驗(yàn)證集。
PCA轉(zhuǎn)換
首先,我們編寫一些函數(shù)來驗(yàn)證預(yù)測的性能。
get.accuracy <- <strong>function</strong>(preds, labels) {
correct.idx <- which(preds == labels)
accuracy <- length(correct.idx) / length(labels)
return (accuracy)
}
在下面的代碼中,我們將對訓(xùn)練數(shù)據(jù)執(zhí)行PCA并研究解釋的方差以選擇合適的維數(shù)
## ? ? ? ? [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
## N_dim ? ? ?1 ? ?2 ? ?3 ? ?4 ? ?5 ? ?6 ? ?7 ? ?8 ? ?9 ? ?10 ? ?11 ? ?12
## Cum_Var ? 22 ? 41 ? 52 ? 63 ? 72 ? 79 ? 85 ? 90 ? 94 ? ?97 ? ?99 ? 100
由于有足夠百分比的方差用3維可以解釋,我們將使用該值來設(shè)置訓(xùn)練,測試和驗(yàn)證數(shù)據(jù)集。
現(xiàn)在我們已經(jīng)將訓(xùn)練,驗(yàn)證和測試集轉(zhuǎn)換為PCA空間,我們可以使用k最近鄰居。
## [1] "PCA+KNN accuracy for k = 9 is: 0.571"
讓我們研究一下使用PCA的模型是否優(yōu)于基于原始數(shù)據(jù)的模型:
## [1] "KNN accuracy for k = 7 is: 0.524"
?
# 威士忌特色的方差
print(diag(var(data)))
## ? ? ?Body Sweetness ? ? Smoky Medicinal ? Tobacco ? ? Honey ? ? Spicy
## 0.8656635 0.5145007 0.7458276 0.9801642 0.1039672 0.7279070 0.6157319
## ? ? Winey ? ? Nutty ? ? Malty ? ?Fruity ? ?Floral
## 0.8700410 0.6752394 0.3957592 0.6075239 0.7310534
現(xiàn)在我們只能根據(jù)他們的口味確定蘇格蘭威士忌的六個(gè)區(qū)域,但問題是我們是否仍能獲得更好的表現(xiàn)。我們知道很難預(yù)測數(shù)據(jù)集中代表性不足的蘇格蘭地區(qū)。那么,如果我們局限于更少的地區(qū),會發(fā)生什么?
島威士忌與艾萊島威士忌組合在一起
Lowland / Campbeltown威士忌與Highland威士忌組合在一起
通過這種方式,問題減少到三個(gè)區(qū)域:Island / Islay威士忌,Highland / Lowland / Campbeltown威士忌和Speyside威士忌。再次進(jìn)行分析:
## [1] "PCA+KNN accuracy for k = 13 is: 0.619"
我們可以得出61.9%的準(zhǔn)確度,我們可以得出結(jié)論,將我們樣品較少的威士忌區(qū)域分組確實(shí)是值得的。
KPCA用于監(jiān)督學(xué)習(xí)
應(yīng)用KPCA進(jìn)行預(yù)測并不像應(yīng)用PCA那樣簡單。在PCA中,特征向量是在輸入空間中計(jì)算的,但在KPCA中,特征向量來自核希爾伯特空間。因此,當(dāng)我們不知道所使用的顯式映射函數(shù)?,不可能簡單地轉(zhuǎn)換新數(shù)據(jù)點(diǎn)。
?
# 注意:這會高估實(shí)際效果
accuracy <- get.accuracy(preds.kpca, df$Region[samp.test])
?
摘要
我們看到了如何使用PCA,KPCA和t-SNE來降低數(shù)據(jù)集的維數(shù)。PCA是一種適用于可視化和監(jiān)督學(xué)習(xí)的方法。KPCA是一種非線性降維技術(shù)。t-SNE是一種最新的非線性方法,擅長可視化數(shù)據(jù),但缺乏PCA的可解釋性和穩(wěn)健性。
這可能表明以下兩點(diǎn)之一:
嘗試新的的威士忌仍有很大的潛力。
有很多種味道的組合是可能的,并且很好地結(jié)合在一起。
我傾向于選擇第二種選擇。為什么?在PCA圖中,右下角是沒有樣本所在的最大區(qū)域??粗拷@個(gè)區(qū)域的威士忌,我們發(fā)現(xiàn)那些是y軸上的Macallan和x軸上的Lagavulin。麥卡倫以其復(fù)雜的口味而聞名,Lagavulin以其煙熏味而聞名。
位于二維PCA空間右下方的威士忌將同時(shí)具有兩種特性:它既復(fù)雜又煙熏。我猜這種具有兩種特性的威士忌對于口感來說太好了。
?

?
?
非常感謝您閱讀本文,有任何問題請?jiān)谙旅媪粞裕?/h1>
?

參考文獻(xiàn)
1.matlab偏最小二乘回歸(PLSR)和主成分回歸(PCR)
2.R語言高維數(shù)據(jù)的主成分pca、 t-SNE算法降維與可視化分析
3.主成分分析(PCA)基本原理及分析實(shí)例
4.基于R語言實(shí)現(xiàn)LASSO回歸分析
5.使用LASSO回歸預(yù)測股票收益數(shù)據(jù)分析
6.r語言中對lasso回歸,ridge嶺回歸和elastic-net模型
7.r語言中的偏最小二乘回歸pls-da數(shù)據(jù)分析
8.r語言中的偏最小二乘pls回歸算法
9.R語言線性判別分析(LDA),二次判別分析(QDA)和正則判別分析(RDA)