R可視乎 主成分分析結果視覺化

2021-10-18 13:07:37 字數 3858 閱讀 8677

主成分分析法是很常用的一種資料降維方法。該方法可以減少資料的維數,並保持對方差貢獻最大的特徵,相當於保留低階主成分,忽略高階主成分。

關於主成分的理論介紹和r語言**實現可見前段時間趙西西寫的推文:主成分分析

但是後面留了乙個小尾巴,如果想對主成分結果進行視覺化,那得怎麼實現?有沒有簡便的方法呢?

正好這幾天有讀者問起,那今天就來說說這個問題吧。

使用ggbiplot包中的ggbiplot()函式,該函式 使用ggplot2對主成分進行視覺化。函式內部引數如下

ggbiplot(pcobj, choices = 1:2, scale = 1, pc.biplot =

true, obs.scale = 1 - scale, var.scale = scale, groups =

null, ellipse = false, ellipse.prob = 0.68, labels =

null, labels.size = 3, alpha = 1, var.axes = true, circle

= false, circle.prob = 0.69, varname.size = 3,

varname.adjust = 1.5, varname.abbrev = false, ...)

內部引數過多,就不做詳細解釋。如果對內部引數有興趣可以通過幫助文件進行查詢(?ggbiplot)。

這裡使用鳶尾花資料,給出乙個簡單的例子。大家可以將自己的資料進行匯入(如何匯入?可見推文:r資料科學|第八章內容介紹),替換鳶尾花資料。

注意:檢查自己資料集的資料結構是否和鳶尾花資料結構一致

使用prcomp()進行主成分分析,然後將結果儲存到res.pca變數中。之後使用ggbiplot()進行視覺化。其中觀測的尺度因子為1(obs.scale = 1),變數的尺度因子為1(var.scale = 1),每組繪製乙個橢圓(ellipse = true)並新增相關係數的圓。

如果想給不同組別新增分別顯示不同顏色,則可以使用引數groups,然後設定為原始資料對應的組別向量(如果你的原始資料沒有該列資料,可以自行構造乙個向量。)

# 新增組別顏色

當然你可以在此基礎上加入ggplot內部的引數,比如更改主題,更改顏色,新增標題等一系列操作。

# 更改主題

使用factominer包的pca()函式或者使用基礎包的

prcomp()函式進行資料降維處理,然後使用factoextra包的fviz_pca_ind()函式對結果進行視覺化。

這裡還是以鳶尾花的資料作為例子,沿用方法一的主成分分析結果res.pca。

這個包內部有四個主要繪製主成分結果的函式。

內部引數不做過多介紹,有興趣的讀者請看幫助文件。這裡只對下面的****現的引數進行解釋。

使用散點圖進行繪製(geom = "point"),顏色使用"cos2"(col.ind="cos2"),使用3階梯度顏色(gradient.cols = c("white", "#2e9fdf", "#fc4e07" ))。

library(ggplot2)

# 各個樣本圖

如果想展示分組變數資訊,可以通過habillage引數設定,和第一種方法類似,這裡還加入了一些細節:各組新增橢圓(addellipses=true),圖的版式使用"dark2"(palette = "dark2")。

當然可以使用palette = c("#999999", "#e69f00", "#56b4e9"),根據**全文配色,進行手動調整。

如果想繪製個體和變數的雙圖,可以使用fviz_pca_biplot(),內部其他引數構造相同,然後可以新增各種其他ggplot的函式,例如:

# 個體和變數的雙圖

# 只保留變數的標籤 #按組改變顏色,新增省略號

主成分分析的視覺化展示

一 主成分分析簡介 在對於一件事物的研究過程中,為了準確的反映事物間的關係,往往需要收集多維指標,以保證盡可能全面地收集資訊。然而多維指標往往會提高分析人員的分析難度,並且相似變數也造成了資訊重疊,不利於準確提煉資料關係的本質。主成分分析法 pca 就是一種常見的降維演算法,它能夠降低資料維度,減少...

R 主成分分析

一 實驗內容 基本思想 通過降維技術把多個變數化為幾個少數主成分的方法,即將原來眾多具有一定相關性的指標,重新組合成一組新的相互無關的綜合指標。表示形式 結論 1 uij為第i個成分yi和第j個原先的變數xj之間的線性係數 2 y1,y2,yp分別叫做第1主成分,第2主成分,第p主成分,y1得到最大...

結果視覺化

import tensorflow as tf import numpy as np import matplotlib.pyplot as plt def add layer inputs,input size,output size,activation function none weight...