数学建模模型7——主成分分析 PCA【数据型】

  • 主成分分析的原理—— PCA投影
  • PCA与线性回归的区别
  • matlab自带PCA函数
  • 代码
  • 主成分回归

    判定自变量相关程度大小,即变量间是否存在严重的多重共线性。若存在就用主成分分析,将存在多重共线性的变量合并为一个新的变量,然后再和其它自变量纳入回归。这整个过程叫主成分回归。

    数据降维

    二维数据->一维数据、


    降维到一维之后的数据:


    三维数据->二维数据


    上图中的数据可以投影到二维平面上,大致在如下平面上:


    投影之后如下图所示:


    主成分分析的原理—— PCA投影

    假设有一组二维数据如下图所示:


    若将上图中的数据投影到图中的红色直线上,注意到原始数据到投影数据的距离为蓝色线段,且距离最短。PCA求解的目标是:将原始数据投影到低维平面上,使得图中蓝色线段的和达到最小,即投影误差最小。


    换一个投影方向,投影到图中玫红色的直线上,投影误差达到最大化。


    将二维数据投影成一维数据,需要寻找一个投影方向,或者是一个n维向量


    将三维数据降为二维数据,需要寻找两个n维向量,组成一个投影平面:



    PCA与线性回归的区别

    在PCA由二维投影成一维的过程中,与线性回归类似,都是寻找一条直线,但是本质却不同。左图是线性回归中的预测直线,预测值与真实值之间的误差是图中蓝色线段,可见蓝色线短和y轴平行;右图是PCA的投影方向,蓝色线段是投影误差,可见蓝色线段垂直于投影方向,是最短距离。除此之外,线性回归需要使用标记数据,获取样本的类别标记,而PCA算法则是无监督的,不需要使用样本的类别标记。


    matlab自带PCA函数

    数据集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(___)

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

    Input Argument 1
    'Algorithm' — Principal component algorithm
    'svd' (default) | 'eig' | 'als'
    解释:PCA 涉及到求协方差矩阵的特征向量, 在matlab 有三种算法
    默认 :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

    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时则会自动终止.

    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时使用的是默认的中心化(i.e 不对’Centered’设置’false’),拿X * coeff 和score对比的时候,记得把X中心化后再乘以coeff,之后再和score对比…;同样如果pca使用的是默认值, 恢复的X = score * coeff’ (注意转置)是中心化后的数据

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

    Output Argument 4
    tsquared :层次不够 无法解释......

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

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

    代码

    clc;
    clear;
    
    load fisheriris
    data=meas;
    
    % data行为不同样本的特征,列为不同特征,latent长度与data列数相同,res为维度累计占比
    % coeff按对应的特征值的大小,从大到小进行排列.
    [coeff,score,latent,tsquare] = pca(data);%我们这里需要他的pc和latent值做分析
    % 根据res结果决定降到final维
    res=cumsum(latent)./sum(latent);
    final=2;
    % 取coeff中的1:final列来做最后的变换矩阵
    data_after_PCA=score(:,1:final);
    % 散点图表示每个样例在pc1和pc2两个成分上的位置,可以看出大量的鸢尾花数据基本分为两类,每个点表示一个鸢尾花数据
    scatter(data_after_PCA(:,1),data_after_PCA(:,2))
    
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值