0

我目前正在尝试了解 Isomap 结果与 PCA 和 MDS 有何不同,以及它们是否更适合我的数据。为此,我开始使用 vegan 在 R 中使用 BCI 数据集及其基本示例https://www.rdocumentation.org/packages/vegan/versions/2.4-2/topics/isomap提供的 isomap 函数(代码如下) . 一些出版物将残差方差作为一个很好的衡量标准(例如“Tenenbaum 2002 年的原始论文,第 2321 页) https://web.mit.edu/cocosci/Papers/sci_reprint.pdf 然而,到目前为止我还没有从示例中的对象“ord”中提取此信息。有这个元素 ord[["eig"]],可能与它相关,但到目前为止我很困惑。非常感谢帮助!

> data(BCI)
dis <- vegdist(BCI)
tr <- spantree(dis)
pl <- ordiplot(cmdscale(dis), main="cmdscale")
lines(tr, pl, col="red")
ord <- isomap(dis, k=3)
ord 

plot(ord[["eig"]])  # plot of the eig values, index represents sample number (?)

4

1 回答 1

0

所以我对这个话题做了一些进一步的调查。

本质上,数据集中的特征值与变量一样多。Eigenvals 将根据其解释力被包含在新的组件或维度中,第一个组件或维度通常解释最多,即具有最大的特征值。特征值 1 只解释一个变量,这很无聊。在数学上,特征值是平方因子载荷的总和。

对于上面示例中的 Isomap,可以如下所示:

gram<-(ord[["eig"]]) # extracts the  values of the gram matrix aka Eigenvalues
sum(gram) # close to ~55 (number of variables) the Isomap procedure can alter the maximum variance in the dataset by compression and expansion unlike Principal Component Analysis

variance_covered <-0

for (i in gram) {
  print(variance_covered)
  variance_covered<-variance_covered+(i/sum(gram))  # this prints the amount of variance covered per dimension
}

以下带有 [prcomp] 的 PCA 给出了一个更直接的示例

data(mtcars)
head(mtcars)

cars.autoscale <- prcomp(mtcars,
             center = TRUE,
             scale. = TRUE) 

pca_factorload<-summary(cars.autoscale)[1] 
factors<-unlist(pca_factorload, use.names=FALSE) # extracts the factor loadings aka. standard deviation
eigenvals <-factors^2   #squared factor loadings = Eigenvalues
total_eigenvals<-sum(eigenvals) #This sum is 11 which is the number of variables in mtcars

var_sum <-0

for (i in eigenvals) {
   print(var_sum)
   var_sum<-var_sum+(i/sum(eigenvals)) ))  # this prints the amount of variance covered per component

 }
于 2020-06-16T14:59:50.900 回答