zoukankan      html  css  js  c++  java
  • Matlab实现PCA

    主成分分析(PCA)中,介绍了PCA的数学原理,其有用Matlab能够非常方便地对矩阵进行操作!

    比方,用Matlab求多个样本的协方差矩阵、求矩阵的特征根和特征向量等。

    以下介绍用Matlab实现PCA:

    如果有4个样本A、B、C、D,每一个样本都是6维。

    >> A=[1,2,3,4,5,6];
    >> B=[1,3,5,7,9,9];
    >> C=[2,3,4,6,7,8];
    >> D=[3,4,6,7,8,9];


    将这4个样本组合成一个矩阵Q,矩阵Q的每一行为一个样本
    >> Q=[A;B;C;D]


    Q =


         1     2     3     4     5     6
         1     3     5     7     9     9
         2     3     4     6     7     8
         3     4     6     7     8     9

    依据cov()函数,求训练样本的协方差矩阵W(注意W是对称的,也即W==W‘

    >> W=cov(Q)


    W =


        0.9167    0.6667    0.8333    0.6667    0.4167    0.6667
        0.6667    0.6667    1.0000    1.0000    1.0000    1.0000
        0.8333    1.0000    1.6667    1.6667    1.8333    1.6667
        0.6667    1.0000    1.6667    2.0000    2.3333    2.0000
        0.4167    1.0000    1.8333    2.3333    2.9167    2.3333
        0.6667    1.0000    1.6667    2.0000    2.3333    2.0000


    因为cov()函数是按行处理的,也即它觉得Q中每一行为一个样本,

    所以假设Q写成Q=[A',B',C',D'](6*4的矩阵,每一列为一个样本),W将会为4*4的矩阵,显然不正确。



    依据协方差矩阵求特征根v、特征向量d(d中每一列为特征根v相应的特征向量)
    >> [d,v]=eig(W)


    d =


       -0.0338    0.4409   -0.3021    0.3507   -0.7491    0.1704
       -0.1133   -0.8695   -0.2299    0.0334   -0.3427    0.2444
        0.0490    0.1429    0.1773   -0.8342   -0.2871    0.4092
       -0.5987    0.0439    0.5673    0.2998    0.0718    0.4720
       -0.1319    0.1552   -0.6568   -0.0176    0.4782    0.5460
        0.7796   -0.0563    0.2668    0.2998    0.0718    0.4720




    v =


       -0.0000         0         0         0         0         0
             0    0.0000         0         0         0         0
             0         0    0.0000         0         0         0
             0         0         0    0.1169         0         0
             0         0         0         0    1.1473         0
             0         0         0         0         0    8.9024


    假设要降到3维,那么依据特征根大小,选择前三个特征根相应的特征向量组合成6*3的投影矩阵----PCA投影矩阵!

  • 相关阅读:
    hdu5358 推公式+在一个区间内的尺取+枚举法
    poj3349 散列表(hash)
    hdu3282 链表或者对顶堆
    hdu5178 尺取
    hdu5672 尺取
    hdu3244完全背包+二分答案 留坑
    hdu5256 二分求LIS+思维
    hdu5646数学构造+二分
    hdu4190 二分答案
    Python中Scapy网络嗅探模块的使用
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4365947.html
Copyright © 2011-2022 走看看