﻿功能:数据主成分分析（Principal Component Analysis，PCA）

格式:
[x,c] = DataPCA(A,m)
[x,c] = DataPCA(A)

A:采集的一个n*p的矩阵变量,此数据表示采集样本为n个,变量个数为p
m:返回的前m个特征值向量的参数,默认m为p

x:返回前m个特征向量,每一个特征值对应相应列
c:返回一个p*2的矩阵变量,第一列是特征值排列序号(从大到小),第二列主要代表主成分的累积贡献率

说明:为了达到分析降维的目的,需要将p个变量变成m个变量进行分析。

例子:
a = 
[ 40.4000000000000    24.7000000000000    7.20000000000000    6.10000000000000    8.30000000000000    8.70000000000000    2.44200000000000    20.0000000000000
  25.0000000000000    12.7000000000000    11.2000000000000    11.0000000000000    12.9000000000000    20.2000000000000    3.54200000000000    9.10000000000000
  13.2000000000000    3.30000000000000    3.90000000000000    4.30000000000000    4.40000000000000    5.50000000000000    0.57800000000000    3.60000000000000
  22.3000000000000    6.70000000000000    5.60000000000000    3.70000000000000    6.00000000000000    7.40000000000000    0.17600000000000    7.30000000000000
  34.3000000000000    11.8000000000000    7.10000000000000    7.10000000000000    8.00000000000000    8.90000000000000    1.72600000000000    27.5000000000000
  35.6000000000000    12.5000000000000    16.4000000000000    16.7000000000000    22.8000000000000    29.3000000000000    3.01700000000000    26.6000000000000
  22.0000000000000    7.80000000000000    9.90000000000000    10.2000000000000    12.6000000000000    17.6000000000000    0.84700000000000    10.6000000000000
  48.4000000000000    13.4000000000000    10.9000000000000    9.90000000000000    10.9000000000000    13.9000000000000    1.77200000000000    17.8000000000000
  40.6000000000000    19.1000000000000    19.8000000000000    19.0000000000000    29.7000000000000    39.6000000000000    2.44900000000000    35.8000000000000
  24.8000000000000    8.00000000000000    9.80000000000000    8.90000000000000    11.9000000000000    16.2000000000000    0.78900000000000    13.7000000000000
  12.5000000000000    9.70000000000000    4.20000000000000    4.20000000000000    4.60000000000000    6.50000000000000    0.87400000000000    3.90000000000000
  1.80000000000000    0.60000000000000    0.70000000000000    0.70000000000000    0.80000000000000    1.10000000000000    0.05600000000000    1.00000000000000
  32.3000000000000    13.9000000000000    9.40000000000000    8.30000000000000    9.80000000000000    13.3000000000000    2.12600000000000    17.1000000000000
  38.5000000000000    9.10000000000000    11.3000000000000    9.50000000000000    12.2000000000000    16.4000000000000    1.32700000000000    11.6000000000000 ];

[x,p]=DataPCA(a,3)//假如之前采集了如上的14组8变量的数据，执行本命令后得到如下两个矩阵变量x、p
x =
[ 0.32113222406756   -0.41510453337487   -0.45122756846099
  0.29516428640908   -0.59766342848371    0.10303133799494
  0.38911998330991    0.22974378658078   -0.03989470692925
  0.38472362969578    0.27869298684435    0.05387430087619
  0.37955145335695    0.31631691557631   -0.03729234611621
  0.37086734302036    0.37150519624766    0.07518615792839
  0.31995525140450   -0.27814480521656    0.77058529456158
  0.35546061845294   -0.15683631482641   -0.42478091211638 ]

p =
[ 1.00000000000000    0.76707793929312
  2.00000000000000    0.89734422725122
  3.00000000000000    0.95183843333216
  4.00000000000000    0.97938494164813
  5.00000000000000    0.99837329920644
  6.00000000000000    0.99947672884319
  7.00000000000000    0.99984702603321
  8.00000000000000    1.00000000000000 ]

//从上面p的结果就可以发现,取前3个主成分其贡献率就达到了0.95183843333216，如果我们只要求贡献率达到95%就可以，那么我们直接取前3个主成分即可,所以DataPCA(a,3)函数中第2个参数设置为3,则x变量只返回了3列,如果第2个变量不设置或设置其它值则x将视情况返回不同的列数

y={mul<矩阵运算\mul>}(a,x)//如果我们只要前3个主成分,则执行本命令则可得到主成分y1、y2、y3,其分别对应如下变量y的每一列
y =
[ 39.6801437877381   -26.1367576529893   -21.9125842236908
  37.1227029845217   -3.15669180098242   -9.92479868862616
  13.5592561885673   -2.64759396634109   -6.37450578922585
  20.4143003495035   -7.49026544718433   -12.0287944123099
  36.6566042686021   -16.6367578798628   -24.1427075210029
  57.8690568304919   -0.74042419049065   -22.1520095740332
  32.4921574241392   -0.05091152041589   -11.9654009049083
  43.7344994583431   -17.5092639046654   -25.9173131824051
  73.1580163009258   -0.61422034945329   -27.5684482974369
  33.2097780069190   -2.92960145402749   -14.7149497029100
  15.9499012704049   -5.83562607541374   -5.24821510804142
  2.38180045681061   -0.26058365135245   -1.06936234346264
  36.7370297331570   -12.4749666559447   -18.0613467634665
  38.3621918755925   -8.41322139076616   -19.5004860672301 ]