关闭

PCA的MATLAB实现

903人阅读 评论(0) 收藏 举报

通常有两种方式 1. 直接调用PCA函数princomp 2. 使用SVD分解,调用eig

1. 直接调用PCA函数princomp

    princomp的输入是原始数据。princomp会自动进行中心化。

    [COEFF,SCORE,LATENT]=princomp(X)

    X: 原始输入数据 Rows of X correspond to observations, columns to variables.

    LATENT: 特征向量

    COEFF: PCA的映射矩阵,eigen vectors, 列是按主成分变量递减的顺序排列

    SCORE: 将输入data X映射到生成的PCA空间,得到的PCA coefficients

    得到特征向量后,可以进行映射

    (1)将数据从原始空间映射到PCA空间

             score=bsxfun(@minus,X,mean(X,1))*COEFF (X为测试集)

    (2)将PCA coeffeicients映射到原始数据空间

            x=bsxfun(@plus,score*inv(COEFF),mean(X,1))

例子:

(1)X=rand(2,4)

X =

    0.1309    0.1536    0.0091    0.6090
    0.1892    0.0289    0.5965    0.9189

(2)[COEFF,SCORE,LATENT]=princomp(X)

COEFF =

    0.0860    0.1356    0.7219    0.6731
   -0.1839    0.1807   -0.6653    0.7006
    0.8660   -0.4349   -0.1793    0.1693
    0.4569    0.8717   -0.0638   -0.1655


SCORE =

   -0.3391         0         0         0
    0.3391         0         0         0


LATENT =

    0.2300
         0
         0
         0

(3) Project to PCA space

  alpha=inv(COEFF)*(X(1,:)'-mean(X,1)')

  alpha =

   -0.3391
   -0.0000
    0.0000
    0.0000

  (4) Project back to original space

  mean(X,1)'+COEFF*alpha

  ans =

    0.1309
    0.1536
    0.0091
    0.6090

2. 使用SVD分解,调用eig

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:20443次
    • 积分:354
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:7篇
    • 译文:0篇
    • 评论:0条