R

如何獲得不是 PCA 特徵向量的向量的“特徵值”(解釋方差的百分比)?

  • August 2, 2016

我想了解如何獲得數據集的方差百分比,而不是在 PCA 提供的坐標空間中,而是針對一組略有不同的(旋轉)向量。

在此處輸入圖像描述

set.seed(1234)
xx <- rnorm(1000)
yy <- xx * 0.5 + rnorm(1000, sd = 0.6)
vecs <- cbind(xx, yy)
plot(vecs, xlim = c(-4, 4), ylim = c(-4, 4))
vv <- eigen(cov(vecs))$vectors
ee <- eigen(cov(vecs))$values
a1 <- vv[, 1]
a2 <- vv[, 2]
theta = pi/10
rotmat <- matrix(c(cos(theta), sin(theta), -sin(theta), cos(theta)), 2, 2)
a1r <- a1 %*% rotmat
a2r <- a2 %*% rotmat
arrows(0, 0, a1[1], a1[2], lwd = 2, col = "red")
arrows(0, 0, a2[1], a2[2], lwd = 2, col = "red")
arrows(0, 0, a1r[1], a1r[2], lwd = 2, col = "green3")
arrows(0, 0, a2r[1], a2r[2], lwd = 2, col = "green3")
legend("topleft", legend = c("eigenvectors", "rotated"), fill = c("red", "green3"))

所以基本上我知道數據集沿每個紅色軸的方差由 PCA 給出,由特徵值表示。但是我怎麼能得到等價的方差,總計相同的數量,但將兩個不同的軸投影為綠色,這是主分量軸的 pi/10 旋轉。IE 給定來自原點的兩個正交單位向量,我怎樣才能獲得數據集沿這些任意(但正交)軸中的每一個的方差,以便考慮所有方差(即“特徵值”總和與PCA)。

如果向量是正交的,您可以只將數據的標量投影的方差帶到每個向量上。假設我們有一個數據矩陣(點 x尺寸)和一組正交列向量. 假設數據居中。數據沿每個向量方向的方差是(誰)給的.

如果向量的數量與原始維度一樣多(),投影的方差之和將等於沿原始維度的方差之和。但是,如果向量少於原始維度 (),方差之和通常會小於 PCA。考慮 PCA 的一種方法是最大化這個數量(受向量正交的約束)。

您可能還想計算(解釋的方差分數),通常用於衡量給定數量的 PCA 維度表示數據的程度。讓表示沿數據每個原始維度的方差之和。然後:

這只是投影的總方差與沿原始維度的總方差之比。

另一種思考方式如果我們嘗試從投影中重建數據,它會衡量擬合優度。然後它採用用於其他模型(例如回歸)的熟悉形式。說th 數據點是一個行向量. 沿矩陣的列存儲每個基向量. 的投影th 數據點到所有向量上是(誰)給的. 當向量少於原始維度時 (),我們可以認為這是將數據線性映射到降維空間中。我們可以通過映射回原始數據空間來近似地從低維表示重建數據點:. 均方重構誤差是每個原始數據點與其重構之間的均方歐幾里得距離:

合身性與其他模型的定義方式相同(即 1 減去無法解釋的方差的分數)。給定模型的均方誤差 () 和建模數量的總方差 (),. 在我們的數據重建的背景下,均方誤差是(重構誤差)。總方差為(沿數據每個維度的方差總和)。所以:

也等於每個數據點到所有數據點均值的均方歐幾里得距離,所以我們也可以認為將重建誤差與總是返回平均值作為重建的“最壞情況模型”的誤差進行比較。

的兩個表達式是等價的。如上所述,如果向量的數量與原始維度一樣多 () 然後將是一個。但是,如果,通常會小於 PCA。考慮 PCA 的另一種方式是它最小化平方重建誤差。

引用自:https://stats.stackexchange.com/questions/226905

comments powered by Disqus