matlab主成分分析案例
- 格式:docx
- 大小:19.19 KB
- 文档页数:6
基于Matlab的中药主成分分析数学实验教学案例作者:董鸽闵建中陈立范王宏杰来源:《现代商贸工业》2021年第34期摘要:本文探讨医学院校数学实验课教学内容与专业相结合的教学案例。
以中药专业为例,介绍了中药专业中常用的主成分分析的统计方法,对10批三黄片样品的成分含量进行主成分分析,运用Matlab7.0软件进行计算,给出各主成分与原始成分的线性表达式和因子载荷阵,分析各主成分与原始成分的关联程度以及各主成分在原始成分中所产生的作用,最后运用综合评价函数计算10批样品的F值,根据F值大小进行排序,对10批样品进行综合评价。
关键词:数学实验;案例分析;Matlab;主成分分析中图分类号:G4文献标识码:Adoi:10.19311/ki.1672-3198.2021.34.068高等数学是许多医学专业的必修课程,但理论性强,与专业知识衔接不够紧密。
数学实验课程是联系高等数学理论知识与专业实际应用的桥梁,提高学生对高等数学知识的应用能力和计算机技术应用能力,培养学生的科研精神、创新意识和实际操作能力。
在医学院校中开始数学实验课,课程内容的选择非常重要,不同的专业对数学知识的需求也不尽相同,因此数学实验的内容也要跟着进行相应调整。
以中药专业为例,我们在基础知识的基础上,选择了与中药数理统计的案例,由于篇幅限制,我们仅举例主成分分析模块的数学实验教学案例。
1主成分分析的步骤主成分分析是一种降维数据处理的方法,在人脸数据识别、基因数据列分析、食品成分分析、中药成分分析等方面有着重要应用。
主成分分析的具体步骤如下:(1)设原始数据的样本个数为n,有m个观测指标X1,X2,…,X m,其中X j=(x1j,x2j,…,x nj)T,j=1,…,m,记矩阵X=(X1,X2,…,X m),欲寻找可以概括m个观测指标综合信息的综合指标Z1,Z2,…,Z m,满足线性组合。
Z i=a1i X1+a2i X2+…+a mi X m,i=1,…,m,(1)其中:a1i,a2i,…,a mi为常数,i=1,…,m。
稳健主成分 matlab稳健主成分分析(Robust Principal Component Analysis, RPCA)是一种用于处理含有异常值或噪声的数据的降维方法。
它能够通过将数据拆分为一个低秩矩阵和一个稀疏矩阵的组合来提取出数据的主要特征。
在MATLAB中,可以使用`robrpca`函数来进行稳健主成分分析。
该函数的基本语法如下:```matlab[L, S] = robrpca(X, lambda, maxIter, tol)```其中,`X`是输入的数据矩阵,`lambda`是一个正则化参数,`maxIter`是最大迭代次数,`tol`是收敛阈值。
函数的输出是一个低秩矩阵`L`和一个稀疏矩阵`S`,分别表示数据矩阵的主要成分和异常值。
以下是一个使用`robrpca`函数进行稳健主成分分析的示例:```matlab% 生成含有异常值的数据X = randn(100, 50);X(10, 10) = 10; % 添加一个异常值% 进行稳健主成分分析[L, S] = robrpca(X, 1, 100, 1e-6);% 显示结果subplot(1, 2, 1);imagesc(L);title('Low-rank Matrix');subplot(1, 2, 2);imagesc(S);title('Sparse Matrix');```该示例中,首先生成一个大小为100x50的随机数据矩阵,并在其中添加一个异常值。
然后使用`robrpca`函数对数据进行稳健主成分分析,并将结果分别显示在两个子图中。
需要注意的是,稳健主成分分析方法的运行时间可能较长,特别是在处理大规模数据时。
因此,在实际应用中,可能需要适当调整`maxIter`和`tol`参数的值来平衡运行时间和结果精度。
主成分分析(PCA)算法介绍及matlab实现案例主成分分析经常被⽤做模型分类时特征的降维,本篇⾸先介绍PCA的步骤,并根据步骤撰写对应的MATLAB代码,最后指明使⽤PCA的步骤。
我们在做分类时,希望提取的特征能够最⼤化将数据分开,如果数据很紧密,模型就⽐较难将其分开,如果数据⽐较离散,那么就⽐较容易分开,换句话说,数据越离散,越容易分开。
那怎么让数据离散呢?离散⼜⽤什么指标衡量呢?统计学的知识告诉我们,数据越离散,⽅差越⼤。
因此,PCA的问题就变为:寻找⼀个坐标轴,使得数据在该坐标轴上⾯离散度最⾼。
也就是寻找⼀个基使得所有数据在这个基上⾯的投影值的⽅差最⼤。
那具体怎么做呢?科学家们已经帮我们做好了,如下步骤:设有m个样本,每个样本有n个特征,组成m⾏n列的矩阵1)将每⼀列特征进⾏均值化处理,特征归⼀化,也称为数据中⼼平移到坐标原点2)求取协⽅差矩阵3)求取协⽅差矩阵的特征值和特征向量4)将特征向量按对应特征值⼤⼩从上到下按⾏排列成矩阵,取前K列组成系数矩阵matlab代码function [coffMatrix,lowData,eigValSort,explained,meanValue] = myPCA(data)%data为row⾏col列矩阵,row为样本数量,col为特征列,每⼀列代表⼀个特征[row , col] = size(data);% 求出每⼀列的均值meanValue = mean(data);% 将每⼀列进⾏均值化处理,特征归⼀化,数据中⼼平移到坐标原点normData = data - repmat(meanValue,[row,1]);%求取协⽅差矩阵covMat = cov(normData);%求取特征值和特征向量[eigVect,eigVal] = eig(covMat);% 将特征向量按对应特征值⼤⼩从上到下按⾏排列成矩阵[sortMat, sortIX] = sort(eigVal,'descend');[B,IX] = sort(sortMat(1,:),'descend');coffMatrix = eigVect(:,IX);% 排序后的特征向量就是新的坐标系lowData = normData * coffMatrix;% 分量得分explained = 100*B/sum(B);%特征值eigValSort = B;%%% [U,S,V] = svd(data);end我们在实际应⽤PCA的时候需要注意保留以下⼏个值。
1.设随机向量X=(X 1,X 2,X 3)T 的协方差与相关系数矩阵分别为⎪⎪⎭⎫ ⎝⎛=∑25441,⎪⎪⎭⎫⎝⎛=18.08.01R 分别从∑,R 出发,求X 的各主成分以及各主成分的贡献率并比较差异况。
解答:>> S=[1 4;4 25];>> [PC,vary,explained]=pcacov(S); 总体主成分分析:>> [PC,vary,explained]=pcacov(S) 主成分交换矩阵: PC =-0.1602 -0.9871 -0.9871 0.1602 主成分方差向量: vary = 25.6491 0.3509各主成分贡献率向量 explained = 98.6504 1.3496则由程序输出结果得出,X 的主成分为: Y 1=-0.1602X 1-0.9871X 2 Y 2=-0.9871X 1+0.1602X 2两个主成分的贡献率分别为:98.6504%,1.3496%;则若用第一个主成分代替原来的变量,信息损失率仅为1.3496,是很小的。
2.根据安徽省2007年各地市经济指标数据,见表5.2,求解: (1)利用主成分分析对17个地市的经济发展进行分析,给出排名; (2)此时能否只用第一主成分进行排名?为什么?解答:(1)>> clear>> A=[491.70,380.31,158.39,121.54,22.74,439.65,344.44,17.43;21.12,30.55,6.40,12.40,3.31,21.17,17.71,2.03;1.71,2.35,0.57,0.68,0.13,1.48,1.36,-0.03;9.83,9.05,3.13,3.43,0.64,8.76,7.81,0.54;64.06,77.86,20.63,30.37,5.96,63.57,52.15,4.71;30.38,46.90,9.19,9.83,17.87,28.24,21.90,3.80;31.20,70.07,8.93,18.88,33.05,31.17,26.50,2.84;79.18,62.09,20.78,24.47,3.51,71.29,59.07,6.78;47.81,40.14,17.50,9.52,4.14,45.70,34.73,4.47;104.69,78.95,29.61,25.96,5.39,98.08,84.81,3.81;21.07,17.83,6.21,6.22,1.90,20.24,16.46,1.09;214.19,146.78,65.16,41.62,4.39,194.98,171.98,11.05;31.16,27.56,8.80,9.44,1.47,28.83,25.22,1.05;12.76,14.16,3.66,4.07,1.57,11.95,10.24,0.73;6.45,5.37,2.39,2.20,0.40,5.97,4.79,0.52;39.43,44.60,15.17,15.72,3.27,36.03,27.87,3.48;5.02,3.62,1.63,1.42,0.53,4.45,4.04,0.02];得到的相关系数矩阵为:>> R=corrcoef(A)R =1.0000 0.9877 0.9988 0.9820 0.4281 0.9999 0.9980 0.95100.9877 1.0000 0.9884 0.9947 0.5438 0.98850.9835 0.94850.9988 0.9884 1.0000 0.9824 0.4294 0.99840.9948 0.94620.9820 0.9947 0.9824 1.0000 0.5051 0.98290.9763 0.93910.4281 0.5438 0.4294 0.5051 1.0000 0.43110.4204 0.45570.9999 0.9885 0.9984 0.9829 0.4311 1.00000.9986 0.95300.9980 0.9835 0.9948 0.9763 0.4204 0.99861.0000 0.95690.9510 0.9485 0.9462 0.9391 0.4557 0.95300.9569 1.0000计算特征值与特征向量:>> [v,d]=eig(corrcoef(A))v =-0.3723 0.1179 0.1411 -0.2543 -0.0459 0.5917-0.5641 0.3041-0.3741 -0.0343 0.1606 0.2247 -0.1514 -0.6284-0.1535 0.5841-0.3719 0.1152 0.1957 -0.1954 -0.6909 -0.13510.0383 -0.5244-0.3713 0.0096 0.2368 0.7875 0.2168 0.23850.0303 -0.2845-0.1949 -0.9689 -0.0004 -0.1242 0.0119 0.06280.0151 -0.0593-0.3725 0.1143 0.1222 -0.2302 0.0924 0.22590.7946 0.2988-0.3716 0.1272 0.0353 -0.3800 0.6591 -0.3521-0.1557 -0.3428-0.3613 0.0596 -0.9185 0.1165 -0.0872 0.03020.0022 -0.0096d =7.1135 0 0 0 0 0 0 00 0.7770 0 0 0 0 0 00 0 0.0810 0 0 0 0 00 0 0 0.0237 0 0 0 00 0 0 0 0.0041 00 00 0 0 0 0 0.0006 0 00 0 0 0 0 00.0000 00 0 0 0 0 0 0 0.0001各主成分贡献率:>> w=sum(d)/sum(sum(d))w =0.8892 0.0971 0.0101 0.0030 0.0005 0.00010.0000 0.0000计算各个主成分得分:>> F=[A-ones(17,1)*mean(A)]*v(:,8)F =224.3503-24.0409-40.0941-35.90754.7573-12.6102-2.85731.8038-13.901213.4541-29.384762.3383-23.3175-32.4285-38.1309-14.8637-39.1675>> [F1,I1]=sort(F,'descend')F1按从大到小的顺序给个主成分得分排名:F1 =224.350362.338313.45414.75731.8038-2.8573-12.6102-13.9012-14.8637-23.3175-24.0409-29.3847-32.4285-35.9075-38.1309-39.1675-40.0941I1给出各个名次的序号:I1 =1121058769161321114415173>> [F2,I2]=sort(I1)F2 =1234567891011121314151617I2给出个城市排名,即所求排名:I2 =1111714476583122101315916(2)由于第一主成分的贡献率大于80%,其他各成分贡献率都太小,所以只能用第一主成分进行排名。
主成分分析PCA(含有详细推导过程以及案例分析matlab版)主成分分析法(PCA)在实际问题中,我们经常会遇到研究多个变量的问题,而且在多数情况下,多个变量之间常常存在一定的相关性。
由于变量个数较多再加上变量之间的相关性,势必增加了分析问题的复杂性。
如何从多个变量中综合为少数几个代表性变量,既能够代表原始变量的绝大多数信息,又互不相关,并且在新的综合变量基础上,可以进一步的统计分析,这时就需要进行主成分分析。
I. 主成分分析法(PCA)模型(一)主成分分析的基本思想主成分分析是采取一种数学降维的方法,找出几个综合变量来代替原来众多的变量,使这些综合变量能尽可能地代表原来变量的信息量,而且彼此之间互不相关。
这种将把多个变量化为少数几个互相无关的综合变量的统计分析方法就叫做主成分分析或主分量分析。
主成分分析所要做的就是设法将原来众多具有一定相关性的变量,重新组合为一组新的相互无关的综合变量来代替原来变量。
通常,数学上的处理方法就是将原来的变量做线性组合,作为新的综合变量,但是这种组合如果不加以限制,则可以有很多,应该如何选择呢?如果将选取的第一个线性组合即第一个综合变量记为1F ,自然希望它尽可能多地反映原来变量的信息,这里“信息”用方差来测量,即希望)(1F Var 越大,表示1F 包含的信息越多。
因此在所有的线性组合中所选取的1F 应该是方差最大的,故称1F 为第一主成分。
如果第一主成分不足以代表原来p 个变量的信息,再考虑选取2F 即第二个线性组合,为了有效地反映原来信息,1F 已有的信息就不需要再出现在2F 中,用数学语言表达就是要求0),(21=F F Cov ,称2F 为第二主成分,依此类推可以构造出第三、四……第p 个主成分。
(二)主成分分析的数学模型对于一个样本资料,观测p 个变量p x x x ,,21,n 个样品的数据资料阵为:=np n n p p x x x x x x x x x X212222111211()p x x x ,,21=其中:p j x x x x nj j j j ,2,1,21== 主成分分析就是将p 个观测变量综合成为p 个新的变量(综合变量),即+++=+++=+++=ppp p p p p p p p x a x a x a F x a x a x a F x a x a x a F 22112222121212121111 简写为:p jp j j j x x x F ααα+++= 2211p j ,,2,1 =要求模型满足以下条件:①j i F F ,互不相关(j i ≠,p j i ,,2,1, =)②1F 的方差大于2F 的方差大于3F 的方差,依次类推③.,2,1122221p k a a a kp k k ==+++于是,称1F 为第一主成分,2F 为第二主成分,依此类推,有第p 个主成分。
主成分分析法例子与matlab 中的应运可联系我邮箱 ******************1.概述主成分分析也称主分量分析,旨在利用降维的思想,把多指标转化为少数几个综合指标。
在实证问题研究中,为了全面、系统地分析问题,我们必须考虑众多影响因素。
这些涉及的因素一般称为指标,在多元统计分析中也称为变量。
因为每个变量都在不同程度上反映了所研究问题的某些信息,并且指标之间彼此有一定的相关性,因而所得的统计数据反映的信息在一定程度上有重叠。
在用统计方法研究多变量问题时,变量太 多会增加计算量和增加分析问题的复杂性,人们希望在进行定量分析的过程中,涉及的变量较少,得到的信息量较多。
1.1主成分分析计算步骤① 计算相关系数矩阵⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=pp p p p p r r r r r r r r r R 212222111211 (1)在(3.5.3)式中,r ij (i ,j=1,2,…,p )为原变量的xi 与xj 之间的相关系数,其计算公式为∑∑∑===----=nk nk j kji kink j kj i kiij x xx xx x x xr 11221)()())(( (2)因为R 是实对称矩阵(即r ij =r ji ),所以只需计算上三角元素或下三角元素即可。
② 计算特征值与特征向量首先解特征方程0=-R I λ,通常用雅可比法(Jacobi )求出特征值),,2,1(p i i =λ,并使其按大小顺序排列,即0,21≥≥≥≥pλλλ ;然后分别求出对应于特征值i λ的特征向量),,2,1(p i e i =。
这里要求i e =1,即112=∑=pj ij e ,其中ij e 表示向量i e 的第j 个分量。
③ 计算主成分贡献率及累计贡献率 主成分i z 的贡献率为),,2,1(1p i pk ki=∑=λλ累计贡献率为),,2,1(11p i pk kik k=∑∑==λλ一般取累计贡献率达85—95%的特征值m λλλ,,,21 所对应的第一、第二,…,第m (m ≤p )个主成分。
主成分分析法MATLAB的实现在MATLAB中,主成分分析是通过`pca`函数实现的。
`pca`函数的语法如下:```[coeff,score,latent,tsquared,explained,mu] = pca(X)```- `latent`是一个长度为$p$的向量,表示每个主成分的方差。
- `tsquared`是一个长度为$n$的向量,表示每个样本在主成分上的投影平方和。
- `explained`是一个长度为$p$的向量,表示每个主成分的方差贡献率。
- `mu`是一个长度为$p$的向量,表示每个特征的平均值。
下面我们将用一个简单的例子演示如何使用MATLAB进行主成分分析。
假设我们有一个包含4个样本和3个特征的数据集:```matlabX=[1,2,3;2,4,6;3,6,9;4,8,12];```首先,我们需要对数据进行归一化处理,以保证不同特征之间的量纲一致。
```matlabX_norm = zscore(X);```然后,我们可以使用`pca`函数进行主成分分析:```matlab[coeff, score, latent, ~, explained, ~] = pca(X_norm);```在这个示例中,我们只关心`coeff`、`score`、`latent`和`explained`这四个输出。
`coeff`给出了主成分的系数,可以用于计算每个样本在每个主成分上的投影:```matlabproj = score * coeff';````latent`表示每个主成分的方差,我们可以通过对`latent`中的元素求和来得到总方差的百分比贡献:```matlabvar_contrib = cumsum(latent) / sum(latent);````explained`向量可以直接给出每个主成分的方差贡献率。
最后,我们可以绘制一个累积方差贡献率的曲线:```matlabplot(1:length(var_contrib), var_contrib, 'ro-');ylabel('Cumulative Variance Contribution');```这样,我们就完成了主成分分析的实现。
1•设随机向量X= (X i , X 2, X 3)T 的协方差与相关系数矩阵分别为
1 4
,R
4 25
分别从,R 出发,求X 的各主成分以及各主成分的贡献率并比较差异况。
解答: >> S=[1 4;4 25];
>> [P C,vary,ex plain ed]=p cacov(S); 总体主成分分析:
>> [P C,vary,ex plain ed]=p cacov(S) 主成分交换矩阵: PC =
-0.1602 -0.9871 -0.9871 0.1602 主成分方差向量: vary = 25.6491 0.3509
各主成分贡献率向量 explained = 98.6504 1.3496
则由程序输出结果得出,X 的主成分为: Y 1=-0.1602X 1-0.9871X 2 Y 2=-0.9871X 1+0.1602X 2
两个主成分的贡献率分别为:98.6504%, 1.3496%;贝U 若用第一个主成分代替原 来的变量,信息损失率仅为1.3496,是很小的。
2.根据安徽省2007年各地市经济指标数据,见表 5.2,求解: (1) 利用主成分分析对17个地市的经济发展进行分析,给出排名; (2) 此时能否只用第一主成分进行排名?为什么?
1 0.8 0.8 1
1.0000 0.9877 0.9980 0.9510 0.9988 0.9820 0.4281 0.9999
解答:
(1)
>> clear
>> A=[491.70,380.31,158.39,121.54,22.74,439.65,344.44,17.43;
21.12,30.55,6.40,12.40,3.31,21.17,17.71,2.03;
1.71,
2.35,0.57,0.68,0.13,1.48,1.36,-0.03;
9.83,9.05,3.13,3.43,0.64,8.76,7.81,0.54;
64.06,77.86,20.63,30.37,5.96,63.57,52.15,4.71;
30.38,46.90,9.19,9.83,17.87,28.24,21.90,3.80;
31.20,70.07,8.93,18.88,33.05,31.17,26.50,2.84;
79.18,62.09,20.78,24.47,3.51,71.29,59.07,6.78;
47.81,40.14,17.50,9.52,4.14,45.70,34.73,4.47;
104.69,78.95,29.61,25.96,5.39,98.08,84.81,3.81;
21.07,17.83,6.21,6.22,1.90,20.24,16.46,1.09;
214.19,146.78,65.16,41.62,4.39,194.98,171.98,11.05;
31.16,27.56,8.80,9.44,1.47,28.83,25.22,1.05;
12.76,14.16,3.66,4.07,1.57,11.95,10.24,0.73;
6.45,5.37,2.39,2.20,0.40,5.97,4.79,0.52;
39.43,44.60,15.17,15.72,3.27,36.03,27.87,3.48;
5.02,3.62,1.63,1.42,0.53,4.45,4.04,0.02];
得到的相关系数矩阵为:
>> R=corrcoef(A)
R =
0.9877 1.0000 0.9884 0.9947 0.5438 0.9885 0.9835 0.9485
0.9988 0.9884 1.0000 0.9824 0.4294 0.9984 0.9948 0.9462
0.9820 0.9947 0.9824 1.0000 0.5051 0.9829 0.9763 0.9391
0.4281 0.5438 0.4294 0.5051 1.0000 0.4311 0.4204 0.4557
0.9999 0.9885 0.9984 0.9829 0.4311 1.0000 0.9986 0.9530
0.9980 0.9835 0.9948 0.9763 0.4204 0.9986
1.0000 0.9569
0.9510 0.9485 0.9462 0.9391 0.4557 0.9530 0.9569 1.0000
计算特征值与特征向量:
>> [v,d]=eig(corrcoef(A))
V 一
-0.3723 0.1179 0.1411 -0.2543 -0.0459 0.5917 -0.5641 0.3041
-0.3741 -0.0343 0.1606 0.2247 -0.1514 -0.6284 -0.1535 0.5841
-0.3719 0.1152 0.1957 -0.1954 -0.6909 -0.1351 0.0383 -0.5244
-0.3713 0.0096 0.2368 0.7875 0.2168 0.2385 0.0303 -0.2845
-0.1949 -0.9689 -0.0004 -0.1242 0.0119 0.0628 0.0151 -0.0593
-0.3725 0.1143 0.1222 -0.2302 0.0924 0.2259 0.7946 0.2988
-0.3716 0.1272 0.0353 -0.3800 0.6591 -0.3521 -0.1557 -0.3428
-0.3613 0.0596 -0.9185 0.1165 -0.0872 0.0302 0.0022 -0.0096
d =
7.1135
0 0
0 0
0 0 0.7770
0.0810
0 0.0237
0 0.0041
0 0 0 0 0.0000
0 0 0.0001
各主成分贡献率:
>> w=sum(d)/sum(sum(d))
计算各个主成分得分:
>> F=[A-ones(17,1)*mean(A)]*v(:,8)
224.3503 -24.0409 -40.0941 -35.9075 4.7573 -12.6102 -2.8573
1.8038 -13.9012 13.4541 -29.3847 6
2.3383 -2
3.3175 -32.4285 -38.1309 -1
4.8637 -39.1675
>> [F1,I1]=sort(F,'descend')
F1按从大到小的顺序给个主成分得分排名: F1 = 224.3503
0.8892 0.0971 0.0000 0.0000
0.0101 0.0030 0.0005 0.0001
0.0006
62.3383
13.4541
4.7573
1.8038 -
2.8573 12.6102 1
3.9012 1
4.8637 23.3175 24.0409 29.3847 32.4285 3
5.9075 38.1309 39.1675 -40.0941
I1 给出各个名次的序号:
I1 =
1
12
10
5
8
7
6
9
16
13
2
11
14
4
15
17
3 >> [F2,I2]=sort(I1)
F2 =
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
I2 给出个城市排名,即所求排名:I2 =
1
11
17
14
4
7
6
5
8
3
12
2
10
13
15
9
16
(2)由于第一主成分的贡献率大于80%,其他各成分贡献率都太小,所以只能用第一主成分进行排名。