云计算百科
云计算领域专业知识百科平台

《Matlab教学建模方法与实践(第三章)》学习笔记——主成分分析法(PCA)

目录

一、主成分分析(PCA)基本原理

1. PCA基本思想

2.PCA方法步骤

二、PCA应用案例

三、运用PCA的数模论文


一、主成分分析(PCA)基本原理

1. PCA基本思想

主成分分析是采用一种数学降维的方法,其所做的就是设法将原来众多具有一定相关性的变量,重新组合为一组新的综合变量来代替原来的变量。通常数学上的处理方法是将原来的变量做线性组合,作为新的综合变量,如果选取第一个线性组合即第一个综合变量为F_{1}。用方差测量新综合变量反应原来变量的信息,即希望Var(F_{1})越大,表示F_{1}包含的信息越多。因此在所有线性组合中,所选取的F_{1}应该使方差最大的,故称F_{1}为第一主成分。如果第一主成分不足以代表原来p个变量的信息,再考虑选取F_{2},即第二个线性组合。为了有效地反应原来的信息,F_{1}已有的信息就不需要再出现在F_{2}中,用数学语言表示就是要求Con(F_{1},F_{2})=0,称F_{2}为第二主成分。以此类推,可以构造出第三、第四、…、第p个主成分(Con表示统计学中的协方差)

2.PCA方法步骤
  • Step1:对原始数据进行标准化处理。假设样本观测数据矩阵为:

X=\\begin{bmatrix} x_{11} & x_{12} & \\cdots & x_{1p} \\\\ x_{21} & x_{22} & \\cdots & x_{2p} \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ x_{n1} & x_{n2} & \\cdots & x_{np} \\\\ \\end{bmatrix}

那么可以按照如下方法对原始数据进行标准化处理:

x_{ij}^{*}=\\tfrac{x_{ij}-\\overline{x_{j}}}{\\sqrt{Var(x_{j})}} (i=1,2,...,n:j=1,2,...,p)

其中,

\\overline{x_{j}}=\\tfrac{1}{n}\\sum_{i=1}^{n}x_{ij},Var(x_{j})=\\tfrac{1}{n-1}\\sum_{i=1}^{n}{(x_{ij}-\\overline{x_j})}^{2} (j=1,2,...,p)

  • Step2:计算样本相关系数矩阵,假设数据标准化后依旧用X表示,经过标准化处理后端数据的相关系数为:

R=\\begin{bmatrix} r_{11} & r_{12} & \\cdots & r_{1p} \\\\ r_{21} & r_{22} & \\cdots & r_{2p} \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ r_{p1} & r_{p2} & \\cdots & r_{pp} \\\\ \\end{bmatrix}

其中,

r_{ij}=\\tfrac{Cov(x_{i},x_j)}{\\sqrt{Var(x_1)}\\sqrt{Var(x_2)}}=\\tfrac{\\sum_{k=1}^{n}(x_{ki}-\\overline{x_i})(x_{kj}-\\overline{x_j})}{\\sqrt{\\sum_{k=1}^{n}{(x_{ki}-\\overline{x_i})}^{2}\\sqrt{\\sum_{k=1}^{n}{(x_{kj}-\\overline{x_j})}^{2}}}}(n>1)

对于协方差,样本方差为s^{2}=\\tfrac{1}{n-1}\\sum_{i=1}^{n}{(x_{i}-\\overline{x})}^{2}

样本X和样本Y的协方差为

Cov(X,Y)\\\\=E\\left [ (X-E(X))(Y-E(Y)) \\right ]\\\\=\\tfrac{1}{n-1}\\sum_{i=1}^{n}(x_{i}-\\overline{x})(y_{i}-\\overline{y})

协方差为正时,说明X和Y是正相关关系;协方差为负时,说明X和Y是负相关关系;协方差为0时,说明X和Y是相互独立。Cov(X,X)就是X的方差。

  • 计算相关系数矩阵R的特征值(\\lambda _1,\\lambda _2,...,\\lambda _p)和相应的特征向量:

a_i=(a_{i1},a_{i2},...,a_{ip}) (i=1,2,...,p)

  • 选择最主要的主成分,并写出主成分表达式。根据个个主成分累计贡献率的大小选取前k给主成分。贡献率是指主成分的方差占全部方差的比重,实际就是某个特征值占全部特征值合计的比重。

贡献率=\\tfrac{\\lambda _i}{\\sum_{i=1}^{p}\\lambda _i}

贡献率越大说明该主成分所包含的原始变量的信息越强。主成分个数k的选取,主要根据主成分的累计贡献率来决定,即一般要求累计贡献率达到85%以上,这样才能保证综合变量能包含原始变量的绝大多数信息。

  • 计算主成分得分。根据标准化的原始数据,按照各个样品分别代入主成分表达式,得到个主成分下各个样品的新数据,即主成分得分。

\\begin{bmatrix} F_{11} & F_{12} & \\cdots & F_{1k} \\\\ F_{21} & F_{22} & \\cdots & F_{2k} \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ F_{n1} & F_{n2} & \\cdots & F_{nk} \\\\ \\end{bmatrix}

其中,

F_{ij}=a_{j1}x_{i1}+a_{j2}x_{i2}+...+a_{jp}x_{ip} (i=1,2,...,n;j=1,2,...,k)

  • 依据主成分得分的数据,进一步对问题进行后续的分析和建模。

二、PCA应用案例

为系统分析某IT企业的经济效益,选择了8个不同的利润指标,对15家企业进行调研,得到如下数据。请根据这些数据对15家企业进行综合实力排序。

  • 数据导入及处理

clc
clear all
A=xlsread('Coporation_evaluation.xlsx','B2:I16');

  • 数据标准化处理

a=size(A,1);
b=size(A,2);
for i=1:b
SA(:,i)=(A(:,i)-mean(A(:,i)))/std(A(:,i));
end

x_{ij}^{*}=\\tfrac{x_{ij}-\\overline{x_{j}}}{\\sqrt{Var(x_{j})}} (i=1,2,...,n:j=1,2,...,p)

size()函数:获取矩阵的行数与列数。该代码把矩阵A的行数赋值给a,列数赋值给b,用于循环进行数据标准化。

①s=size(A)

当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时矩阵的行数,第二个元素是矩阵的列数。

②[r,c]=size(A)

当有两个输出参数时,将矩阵的行数返回到第一个输出变量r,将矩阵的列数返回到第二个输出变量c。

③size(A,n)

如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则 size将返回矩阵的行数或列数。

r=size(A,1)该语句返回矩阵A的行数

r=size(A,2) 该语句返回矩阵A的列数

mean()函数:计算样本均值

①M = mean(A)

当只有一个输出参数时,返回 A 沿大小不等于 1 的第一个数组维度的元素的均值。

如果 A 是向量,则 mean(A) 返回元素均值。

如果 A 为矩阵,那么 mean(A) 返回包含每列均值的行向量。

②M = mean(A,‘all’)

当第二个参数是'all'时,返回 A 的所有元素的均值。

③M = mean(A,dim)

返回维度 dim 上的均值。

例如:a=[1,2,3;4,5,6;7,8,9];

  • mean(a,1)

        ans =

        4 5 6

  • mean(a,2)

        ans =

        2         5         8

  • mean(a,3)

        ans =         1 2 3         4 5 6         7 8 9

std()函数:计算标准差

①S = std(A),返回 A 沿大小不等于 1 的第一个数组维度的元素的标准差。

②S = std(A,w)

当 w = 0 时(默认值),S 按 N-1 进行归一化。

当 w = 1 时,S 按观测值数量 N 进行归一化。

③S = std(A,w,dim),沿维度 dim 返回标准差。

  • 计算相关系数矩阵的特征值和特征函数

CM=corrcoef(SA);%计算相关系数矩阵
[V,D]=eig(CM);%计算特征值和特征向量
for j=1:b
DS(j:1)=D(b+1-j,b+1-j);%对特征值按降序排列
end
for i=1:b
DS(i,2)=DS(i,1)/sum(DS(:,1));%贡献率
DS(i,3)=sum(DS(1:i,1))/sum(DS(:,1));%累计贡献率

corrcoef()函数:计算相关系数矩阵

  • R = corrcoef(A) 返回 A 的相关系数的矩阵,其中 A 的列表示随机变量,行表示观测值。
  • R = corrcoef(A,B) 返回两个随机变量 A 和 B 之间的系数。
  • [R,P] = corrcoef(___) 返回相关系数的矩阵和 p 值矩阵,用于测试观测到的现象之间没有关系的假设(原假设)。此语法可与上述语法中的任何参数结合使用。如果 P 的非对角线元素小于显著性水平(默认值为 0.05),则 R 中的相应相关性被视为显著。如果 R 包含复数元素,则此语法无效。
  • [R,P,RL,RU] = corrcoef(___) 包括矩阵,这些矩阵包含每个系数的 95% 置信区间的下界和上界。如果 R 包含复数元素,则此语法无效。
  • ___ = corrcoef(___,Name,Value) 在上述语法的基础上,通过一个或多个 Name,Value 对组参数指定其他选项以返回任意输出参数。例如,corrcoef(A,'Alpha',0.1) 指定 90% 置信区间,corrcoef(A,'Rows','complete') 省略 A 的包含一个或多个 NaN 值的所有行。
  • eig()函数:计算矩阵的特征值和特征向量

  • E=eig(A):求矩阵A的全部特征值,构成向量E。
  • [V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。
  • [V,D]=eig(A,'nobalance'):与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。
  • E=eig(A,B):由eig(A,B)返回N×N阶方阵A和B的N个广义特征值,构成向量E。
  • [V,D]=eig(A,B):由eig(A,B)返回方阵A和B的N个广义特征值,构成N×N阶对角阵D,其对角线上的N个元素即为相应的广义特征值,同时将返回相应的特征向量构成N×N阶满秩矩阵,且满足AV=BVD。
    • 选择主成分及其对应的特征向量

    T=0.9;
    for K=1:b
    if DS(K,3)>T
    Com_num=K;
    break;
    end
    end

    • 提取主成分对应的特征向量

    for j=1:Con_num
    PV(:,j)=V(:,b+1-j);
    end

    • 计算各评价对象的主成分得分

    new_score=SA*PV
    for i=1:a
    total_score(i,1)=sum(new_score(i,:));
    total_score(i,2)=i;
    end
    result_report=[new_score,total_score];%将各主成分得分与总分放在同一个矩阵
    result_report=sortrows(result_report,-4);%将总分按照降序排列

    sortrows()函数:排序

    ①B = sortrows(A)

    默认依据第一列的数值按升序排序。

    ②B = sortrows(A,column)

    从某一列开始比较数值并进行排序。

    如果column>0则升序排列

    如果column<0则降序排列

    ③[B,index] = sortrows(A,…)

    B返回排序后的矩阵,index返回排序后的行索引

    • 输出模型及报告结果

    disp('特征值及其贡献率、累计贡献率:')
    DS
    disp('信息保留率T对应的主城分数与特征向量:')
    Com_num
    PV
    disp('主成分得分及排序(按第四列的总分进行降序排序,前三列为各主成分得分,第五列为企业编号):')
    result_report

    三、运用PCA的数模论文

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 《Matlab教学建模方法与实践(第三章)》学习笔记——主成分分析法(PCA)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!