R語言高維數據的主成分pca、 t-SNE算法降維與可視化分析案例報告


原文鏈接:http://tecdat.cn/?p=6592

 

維度降低有兩個主要用例:數據探索和機器學習。它對於數據探索很有用,因為維數減少到幾個維度(例如2或3維)允許可視化樣本。然后可以使用這種可視化來從數據獲得見解(例如,檢測聚類並識別異常值)。對於機器學習,降維是有用的,因為在擬合過程中使用較少的特征時,模型通常會更好地概括。

在這篇文章中,我們將研究三維降維技術:

  • 主成分分析(PCA):最流行的降維方法
  • 內核PCA:PCA的一種變體,允許非線性
  • t-SNE t分布隨機鄰域嵌入:最近開發的非線性降維技術

這些方法之間的關鍵區別在於PCA輸出旋轉矩陣,可以應用於任何其他矩陣以轉換數據。 

加載數據集

  我們可以通過以下方式加載數據集:

 
df <- read.csv(textConnection(f), header=T)
# select characterics of the whiskeys
features <- c("Body", "Sweetness", "Smoky",
            "Medicinal", "Tobacco", "Honey",
            "Spicy", "Winey", "Nutty",
            "Malty", "Fruity", "Floral")
feat.df <- df[, c("Distillery", features)]

關於結果的假設

在我們開始減少數據的維度之前,我們應該考慮數據。

由於來自鄰近釀酒廠的威士忌使用類似的蒸餾技術和資源,他們的威士忌也有相似之處。
為了驗證這一假設,我們將測試來自不同地區的釀酒廠之間威士忌特征的平均表達是否不同。為此,我們將進行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

檢驗統計量在5%水平上是顯着的,因此我們可以拒絕零假設(區域對特征沒有影響)。

釀酒廠的地理位置

由於區域性對威士忌起着重要作用,我們將通過繪制其緯度和經度來探索數據集中的釀酒廠所在的位置。以下蘇格蘭威士忌地區存在:

 

 

 

 

PCA

使用PCA可視化威士忌數據集

 

 

在第二個圖中,我們將繪制釀酒廠的標簽,以便我們可以更詳細地解釋聚類。

 

總的來說,主要成分似乎反映了以下特征:

  • PC1表示味道強度即煙熏味,葯用味(如Laphroaig或Lagavulin)與平滑味道(如Auchentoshan或Aberlour)
  • PC2表示味道復雜性即味道特征(例如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: 復合威士忌,主要來自Highlands / Speyside
  • 群集2: 均衡的威士忌,主要來自斯佩塞德和高地
  • 群集3: 煙熏威士忌,主要來自艾萊島

可視化有兩個有趣的觀察結果:

  • Oban和Clynelish是唯一一個產生類似於艾萊島釀酒廠口味的高地釀酒廠。
  • Highland和Speyside威士忌主要在一個方面不同。在一個極端是平滑,均衡的威士忌,如Glenfiddich。在另一個極端,威士忌是具有更有特色的味道,如麥卡倫。

這包含了我們對PCA的可視化研究。我們將在本文末尾研究使用PCA進行預測。

核PCA

內核PCA(KPCA)是PCA的擴展,它利用了內核函數,這些函數在支持向量機上是眾所周知的。通過將數據映射到再現內核Hilbert空間,即使它們不是線性可分的,也可以分離數據。

 

在R中使用KPCA

要執行KPCA,我們使用包中的kpca函數kernlab

 

其中σσ是反向內核寬度。使用此內核,可以按如下方式減少維數:

 

檢索到新維度后,我們現在可以在轉換后的空間中可視化數據:

 

就可視化而言,結果比我們使用常規PCR獲得的結果稍微粗糙一些。盡管如此,來自艾萊島的威士忌分離得很好,我們可以看到一群斯佩塞特威士忌,而高地威士忌則高度傳播。

 

T-SNE

t-SNE已成為一種非常流行的數據可視化方法。

 

使用t-SNE可視化數據

在這里,我們將威士忌數據集的維度降低到兩個維度:

與PCA相比,簇的分離更加清晰,特別是對於簇1和簇2。

對於t-SNE,我們必須進行解釋:

  • V1表示味道復雜性。這里的異常值是右側的煙熏艾萊威士忌(例如Lagavulin)和左側復雜的高地威士忌(例如麥卡倫)。
  • V2表示煙熏/葯用味道。

使用PCA進行監督學習

PCA是獨立完成的,這一點至關重要。因此,需要遵循以下方法:

  1. 在測試數據集上執行PCA並在轉換后的數據上訓練模型。
  2. 將訓練數據中的學習PCA變換應用於測試數據集,並評估模型在變換數據上的性能。

為此,我們將使用ķ最近鄰模型。此外,因為所有的變量是在特征空間小[0,4][0,4]。我們必須優化kk,因此我們還預留了用於確定此參數的驗證集。

PCA轉換

首先,我們編寫一些函數來驗證預測的性能。

get.accuracy <- <strong>function</strong>(preds, labels) {
    correct.idx <- which(preds == labels)
    accuracy <- length(correct.idx) / length(labels)
    return (accuracy)
}
 

在下面的代碼中,我們將對訓練數據執行PCA並研究解釋的方差以選擇合適的維數

##         [,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維解釋,我們將使用該值來設置訓練,測試和驗證數據集。

現在我們已經將訓練,驗證和測試集轉換為PCA空間,我們可以使用kk最近鄰居。

## [1] "PCA+KNN accuracy for k = 9 is: 0.571"

讓我們研究一下使用PCA的模型是否優於基於原始數據的模型:

## [1] "KNN accuracy for k = 7 is: 0.524"

 

 # variances of whiskeys characteristics 
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

現在我們只能根據他們的口味確定蘇格蘭威士忌的六個區域,但問題是我們是否仍能獲得更好的表現。我們知道很難預測數據集中代表性不足的蘇格蘭地區。那么,如果我們將自己局限於更少的地區,會發生什么?

  • 島威士忌與艾萊島威士忌組合在一起
  • Lowland / Campbeltown威士忌與Highland威士忌組合在一起

通過這種方式,問題減少到三個區域:Island / Islay威士忌,Highland / Lowland / Campbeltown威士忌和Speyside威士忌。再次進行分析:

## [1] "PCA+KNN accuracy for k = 13 is: 0.619"

我們可以得出61.9%的准確度,我們可以得出結論,將我們樣品較少的威士忌區域分組確實是值得的。

KPCA用於監督學習

應用KPCA進行預測並不像應用PCA那樣簡單。在PCA中,特征向量是在輸入空間中計算的,但在KPCA中,特征向量來自核心希爾伯特空間。因此,當我們不知道所使用的顯式映射函數ϕϕ,不可能簡單地轉換新數據點。

 

# NB: this would overestimate the actual performance
accuracy <- get.accuracy(preds.kpca, df$Region[samp.test])

 

摘要

在這里,我們看到了如何使用PCA,KPCA和t-SNE來降低數據集的維數。PCA是一種適用於可視化和監督學習的線性方法。KPCA是一種非線性降維技術。t-SNE是一種更新的非線性方法,擅長可視化數據,但缺乏PCA的可解釋性和穩健性。

這可能表明以下兩點之一:

  1. 嘗試新的的威士忌仍有很大的潛力。
  2. 有很多種味道的組合是可能的,並且很好地結合在一起。

我傾向於選擇第二種選擇。為什么?在PCA圖中,右下角是沒有樣本所在的最大區域。看着靠近這個區域的威士忌,我們發現那些是y軸上的Macallan和x軸上的Lagavulin。麥卡倫以其復雜的口味而聞名,Lagavulin以其煙熏味而聞名。

位於二維PCA空間右下方的威士忌將同時具有兩種特性:它既復雜又煙熏。我猜這種具有兩種特性的威士忌對於口感來說太過分了。

 

 

 

如果您有任何疑問,請在下面發表評論。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM