matlab 自带函数 pca 的用法

用于学习记录:

matlab函数的pca函数的输入参数除了数据集X还有10个

数据集X(每行为一个样本,行数为样本数)

- coeff = pca(X)

- coeff = pca(X,Name,Value)

- [coeff,score,latent] = pca(___)

- [coeff,score,latent,tsquared] = pca(___)

- [coeff,score,latent,tsquared,explained,mu] = pca(___)

i.e

Input Argument 0

X :--数据集 假设n个样本, 每个样本p维,则 X是n-by-p的matrix

Input Argument 1

\'Algorithm\' — Principal component algorithm

\'svd\' (default) | \'eig\' | \'als\'

解释:PCA 涉及到求协方差矩阵的特征向量, 在matlab 有3中算法

默认 :SVD,

eig (Eigenvalue decomposition )算法, 此算法当n(number of examples) > p (features) 时,速度快于SVD,但是计算的结果没有SVD精确

als( Alternating least squares )算法,此算法为了处理数据集X中有少许缺失数据时的情况(i.e 0), 但是对于X为稀疏数据集(缺失数据过多)时,不好用

Input Argument 2

\'Centered\' — Indicator for centering columns

true (default) | false

解释:选择是否对数据进行中心化, 也是数据的特征是否进行零均值化(i.e.按列减去均值, 为了得到covariance

matrix), 如果选择了true, 则可用score*coeff\'恢复中心化后的X, 若选择了false,则可用score*coeff\'

恢复原始的X

默认:true(中心化)

Input Argument 3

\'Economy\' — Indicator for economy size output

true (default) | false

解释: 有时候输出的coeff(映射矩阵p-by-p)过大, 而且是没有必要的(因为我们要降维),所以可以只输出coeff(以及score,latent)的前d列,

d是数据集的自由度,数据集没NAN的时候d=n-1; 具体的解释见matlab.总之如果将看见完整的PCA结果,可以设置为false.

默认:true ,(默认ture以后对于初次使用matlab这个函数的人非常迷惑).

Input Argument 4

\'NumComponents\' — Number of components requested

number of variables (default) | scalar integer

解释:输出指定的components 也就是更为灵活的Economy,但是经过试验发现指定成分数 仅在小于d(自由度)时有效,大于d时无效;

默认: number of variables ( i.e p,特征数目)

Input Argument 5

\'Rows\' — Action to take for NaN values

\'complete\' (default) | \'pairwise\' | \'all\'

解释: 此选项是为了智能处理数据集X中含有NAN的情况,

complete: 计算之前.移除X中含有NAN的行(i.e 样本),计算完成后,含有NAN的行被重新插入到

score and tsquared相应的位置中(coeff呢?)

pairwise : 首先这个选项必须配合 \'Argorithm\'中 \'eig\'进行使用.如果没有指定\'eig\'(默认svd),

当指定pairwise时,则会自动切换为eig; 指定为svd,则会发送warning message,

然后自动切换为eig;若指定为als, 则会发送warning message然后忽略 \'Rows\'此选项.

成功使用此选项时,若计算协方差(i,j)处值时遇到NAN,则使用X中第i或j列中不含NAN

的行此处来计算的协方差值.

all : 当确定X中无缺失数据,使用\'all\',则pca会使用X中所有的数据,当遇到NAN时则会自动终止.

默认:complete

Input Argument 6

\'Weights\' — Observation weights

ones (default) | row vector

解释: 基于observations(i.e 样本)的权重pca,有需求的可以自己查查

Input Argument 7

\'VariableWeights\' — Variable weights

row vector | \'variance\'

解释:基于variables(i.e.features)的权重pca,有需求的自己查

默认: 无默认值, 也就是默认不使用此选项

Input Argument 8

\'Coeff0\' — Initial value for coefficients

matrix of random values (default) | p-by-k matrix

解释: Initial value for the coefficient matrix coeff, 不是太看的懂,但是要配合\'Algorithm\'中的

\'als\'使用

默认: p-by-random

Input Argument 9

\'Score0\' — Initial value for scores

matrix of random values (default) | k-by-m matrix

解释: Initial value for scores matri score.不是太看的懂,但是要配合\'Algorithm\'中的 \'als\'使用

默认 : n-by-random

Input Argument 10

\'Options\' — Options for iterations

structure(此用法是个结构体)

解释: 用于迭代的选项,仅配合\'Algorithm\'中的\'als\'使用. 因为\'als\'是使用迭代的方法进行计算的

对这个不感兴趣, 有兴趣的可以去help一下

附上help中的使用方法 opt = statset(\'pca\'); opt.MaxIter = 2000; coeff =pca(X,\'Options\',opt);

Output Argument 1

coeff : 主成分系数 应该就是协方差矩阵的特征向量矩阵(也就是映射矩阵).

完整输出的情况下是一个p-by-p 的matrix.每一列都是一个特征向量.按对应的特征值

的大小,从大到小进行排列.

Output Argument 2

score: 进行旋转(也就是利用映射矩阵coeff进行)后的结果i.e. score = X * coeff. n-by-p matrix

这里要注意: 如果你使用pca时使用的是\'Centered\'设置\'false\', 拿X *coeff 和score对比的时候,

   记得把X中心化后再乘以coeff,之后再和score对比....; 同样如果pca使用的是默认值\'true\',

恢复的X = score * coeff\' (注意转置)是中心化后的数据

Output Argument 3

latent: 主成分方差 也就是各特征向量对应的特征值,从大到小进行排列

Output Argument 4

tsquared :层次不够 无法解释......

Output Argument 5

explained : 每一个主成分所贡献的比例,可以更直观的选择所需要降维的维数了,不用再用特征值去求了

Output Argument 6

mu: X 按列的均值,当前仅当 \'Centered\'置于\'true\'(默认值)时才会返回此变量