计算主成分分析的特征向量和特征值

时间:2012-06-04 11:12:26

标签: r pca eigenvector eigenvalue

我正在尝试对某些3D扫描执行主成分分析,但是在计算和处理特征值和特征向量时我被卡住了。

扫描采用.obj文件格式。

     x          y         z
v 0.001888 -0.058120 -0.069146
v 0.007348 -0.066757 -0.062134
...                        ...
f 6436 6439 6445
f 6446 6445 6430

有6449个向量,12894个面和115个扫描。我的理解是因为数据是3D我不能使用内置的princomp函数,而且由于数据量的原因我可能会在我的笔记本电脑上遇到一些内存问题,最后我想学习做PCA手动。

我相信执行此操作有5个阶段

  1. 计算平均3D扫描。 BarX
  2. 从每次扫描中减去均值。 Xa - BarX = Bar Xa
  3. 创建一个Bar Xa * Bar Xa = Ma
  4. 的矩阵
  5. 计算Ma的特征值和特征向量。帕
  6. 将平均形状BarX添加到Pa,根据特征值和特征向量查看形状变形
  7. 我希望我没有过多地简化这一点,但由于我不是数学家/统计学家,这是我目前的理解。

    我已经完成了第1阶段和第2阶段,因为它们很简单,但我认为这是以下几个阶段。

    由于我担心遇到内存问题,我将分别为x,y和z创建一个矩阵。所以我创建了一个6449x6449的对角矩阵,其中x * x。这是我用来为第一次扫描的x创建矩阵的代码。

    text <- readLines("R/location/scan1.obj", encoding="UTF-8")
    
    xmat <- matrix(1:6449, ncol=1)
    mat <- diag(6449)
    
    for(i in 1:6449){
        xyzLine <- sub("v ", "", text[i])
        xyzList <- unlist(strsplit(xyzLine, " "))
        xmat[i, 1] = as.numeric(xyzList[1])
    }
    
    for(i in 1:6449){
        for(j in 1:6449){
            mat[i, j] <- xmat[i, 1] * xmat[j, 1]
        }
    }
    

    我为x,y和z做这个。然后使用

    计算特征值和特征向量
    eigenx <- eigen(x)
    eigeny <- eigen(y)
    eigenz <- eigen(z)
    

    在这个阶段,我不确定我所做的是否正确?但它从这里我不知道如何将特征向量和特征值组合成一种格式,我可以将它们添加到BarX上以查看形状变形?

    如果有人有任何建议或指导,我们将非常感激。

    提前致谢。

0 个答案:

没有答案