zoukankan      html  css  js  c++  java
  • 主成分分析PCA的matlab实现

    关于PCA的详细说明,参见:http://blog.sina.com.cn/s/blog_61b8694b0101jg4f.html

    在此,我把我所用的matlab实现代码列举在此,比较简洁,并附有详细的注释。

    训练数据的PCA处理:

    function [ mu,sigma,coeff,score,latent ] = PCA( originalData )
    % originalData——原始数据,每行代表一组;
    % 标准化数据:mu-每列的均值;sigma-每列的标准差;
    % PCA降维数据:coeff-系数矩阵;score-PCA降维结果;latent-所有主成分的影响率(%)。
    
    %训练时:
    %1、数据标准化,并保存标准化所用的参数;
    %2、PCA降维;
    %3、选择维度(一般选择累计影响率大于95%的前几个维度),并保留所用的样本均值和系数矩阵;
    
    
    %1、数据标准化:Z-标准化后的数据;mu-每列的均值;sigma-每列的标准差。
    [Z,mu,sigma]=zscore(originalData);
    %2、PCA降维:
    [coeff,score,latent] = princomp(Z);
    %3、选择维度
    latent=100*latent/sum(latent);
    A=length(latent);
    percent_threshold=95;           %百分比阀值,用于决定保留的主成分个数;
    percents=0;                          %累积百分比
    for n=1:A
        percents=percents+latent(n);
        if percents>percent_threshold
            break;
        end
    end
    coeff=coeff(:,1:n);               %达到主成分累积影响率要求的系数矩阵;
    score=score(:,1:n);              %达到主成分累积影响率要求的主成分;
    save PCA mu sigma coeff latent end

     测试数据的PCA处理:

    %测试时:
    %1、按照训练样本的标准化参数,对测试数据进行处理:
    %              Y=(X-mu)/sigma;
    %2、再按照训练样本的PCA降维后所选择的系数矩阵对数据进行处理:
    %               Y=X*coeff
    %   由于在标准化中,已经对数据进行了减去均值处理,所以在此可直接乘系数矩阵。
    load PCA
    rownum=size(input_test,1);
    input_test=(input_test-repmat(mu,rownum,1))./repmat(sigma,rownum,1);
    input_test=input_test*coeff;
    
  • 相关阅读:
    javaweb中带标签体的自定义标签
    javaweb带父标签的自定义标签
    Filter的常见应用
    Filter内容
    JFace TableViewer性能改善 -- 使用VirtualTable
    SWT table性能改善 -- 使用VirtualTable
    java自动探测文件的字符编码
    [小技巧]Filezilla无法确定拖放操作目标,由于shell未正确安装__解决办法
    批量导出VBA工程中的Source
    开源许可证知多少
  • 原文地址:https://www.cnblogs.com/lutaitou/p/5535171.html
Copyright © 2011-2022 走看看