ssh网站开发的书籍,北京摇号网站维护,vps可以同时做ss和网站吗,整合营销实施的技能包括这段时间一直在学习数据挖掘的一些算法#xff0c;今天通过不断查阅资料#xff0c;学习整理了一下主成分分析这个数据降维算法。并且结合一个实例进行matlab编程实现。
主成分基本原理 在数据挖掘中#xff0c;经常会遇到一个问题就是一个问题出现了n多个变量#xff0c;…这段时间一直在学习数据挖掘的一些算法今天通过不断查阅资料学习整理了一下主成分分析这个数据降维算法。并且结合一个实例进行matlab编程实现。
主成分基本原理 在数据挖掘中经常会遇到一个问题就是一个问题出现了n多个变量而且变量之间还可能会存在各种复杂的相互联系变量之间并不是独立的。那么主成分分析就是将多个变量综合为少数几个代表性的变量而且这些主要的变量仅能够代表原始变量的绝大多数信息又互不相关的一种数据降维算法。 主成分分析采取一种数据降维思想其所要做的就是设法就原来众多的具有一定相关性的变量重新组合为一种新的相互无关的综合变量来代表原来的众多个变量。它借助于一个正交变换将其分量相关的原随机向量转化成其分量不相关的新随机向量这在代数上表现为将原随机向量的协方差阵变换成对角形阵在几何上表现为将原坐标系变换成新的正交坐标系使之指向样本点散布最开的p 个正交方向然后对多维变量系统进行降维处理使之能以一个较高的精度转换成低维变量系统再通过构造适当的价值函数进一步把低维系统转化成一维系统。 主成分分析的原理是设法将原来变量重新组合成一组新的相互无关的几个综合变量同时根据实际需要从中可以取出几个较少的总和变量尽可能多地反映原来变量的信息的统计方法叫做主成分分析或称主分量分析也是数学上处理降维的一种方法。主成分分析是设法将原来众多具有一定相关性比如P个指标重新组合成一组新的互相无关的综合指标来代替原来的指标。通常数学上的处理就是将原来P个指标作线性组合作为新的综合指标。最经典的做法就是用F1选取的第一个线性组合即第一个综合指标的方差来表达即Var(F1)Var(F1)越大表示F1包含的信息越多。因此在所有的线性组合中选取的F1应该是方差最大的故称F1为第一主成分。如果第一主成分不足以代表原来P个指标的信息再考虑选取F2即选第二个线性组合为了有效地反映原来信息F1已有的信息就不需要再出现再F2中用数学语言表达就是要求: CovF1,F20 Cov(F1,F2)=0 则称F2为第二主成分依此类推可以构造出第三、第四……第P个主成分。PCA方法计算步骤 1首先对于原始数据进行标准化处理。 X X = x11x21⋮xn1x12x22⋮xn2⋯⋯⋮⋯x1px2p⋮xnp\begin{matrix}x_{11} x∗x−μσx^*=\frac{x-\mu}{\sigma} 其中μ\mu为按照列计算得到的样本数据均值σ\sigma 位按照列计算得到的样本数据的标准差。 2计算经过标准化处理后得到的数据的相关性矩阵。 RR= r11r21⋮rn1r12r22⋮rn2⋯⋯⋮⋯r1pr2p⋮rnp\begin{matrix}r_{11} rijCov(xi,xj)var(xi)√var(xj)√r_{ij}=\frac{Cov(x_i,x_j)}{\sqrt{var(x_i)}\sqrt{var(x_j)}}∑knk1(xki−x¯i)(xkj−x¯j)∑knk1(xki−x¯i)√∑knk1(xkj−x¯j)√\frac{\sum_{k=1}^{k=n}(x_{ki}-\overline x_i)(x_{kj}-\overline x_j)}{\sqrt{\sum_{k=1}^{k=n}(x_{ki}-\overline x_i)}\sqrt{\sum_{k=1}^{k=n}(x_{kj}-\overline x_j)}}n1n>1. 3计算相关系数矩阵RR特征值(λ1,λ2,⋯,λp\lambda_1,\lambda_2, \cdots, \lambda_p 和相应的特性向量ai(ai1,ai2,⋯,ai3)a_i=(a_{i1},a_{i2},\cdots,a_{i3}) 4对特征值进行降序排列。 5计算降序排列后的特征值的贡献率以及累计贡献率 contributionRateλi∑pi1λicontributionRate=\frac{\lambda_i}{\sum_{i=1}^p \lambda_i} accumulativeContributionRate∑ki1λi∑pi1λiaccumulativeContributionRate=\frac{\sum_{i=1}^k\lambda_i}{\sum_{i=1}^p \lambda_i},k≤pk\le p . 6计算主成分得分矩阵 根据标准化的原始数据按照各个样品分别带入主成分表达式就可以得到各个主成分下的各个样品的新数据即主成分的得分。具体形式为 F11F21⋮Fn1F12F22⋮Fn2⋯⋯⋱⋯F1kF1k⋮Fnk\begin{matrix}F_{11} Fijaj1xi1aj2xi2⋯ajpxip,i1,2,⋯,n,j1,2,⋯,kF_{ij}=a_{j1}x_{i1}+a_{j2}x_{i2}+\cdots+a_{jp}x_{ip},i=1,2,\cdots,n,j=1,2,\cdots,k。Matlab程序实现
clc
clear
close all
%%
%数据导入
coporationEvaluationxlsread(Coporation_evaluation.xlsx,B2:I16);
%%
%数据预处理
%利用size函数得到数据集中的公司数量以及变量数量
[corporationNumber,variableNumber]size(coporationEvaluation);
%预先定义标准化后的数据矩阵
normalizedcorporationEvaluationzeros(corporationNumber,variableNumber);
%利用Z-score方法进行数据标准化
for i1:variableNumbernormalizedcorporationEvaluation(:,i)(coporationEvaluation(:,i)-...mean(coporationEvaluation(:,i)))./std(coporationEvaluation(:,i));
end
%%
%数据相关系数矩阵求解以及相关系数矩阵的对应的特征值以及特征向量求解。
%计算标准化后的数据集的相关系数矩阵relativeCoefficientMatrixcorrcoef(normalizedcorporationEvaluation);%计算相关系数矩阵的特征向量以及特征值矩阵
[eigenVector,eigenValueDig]eig(relativeCoefficientMatrix);
%因为使用eig函数计算得到的特征值为一个variable*variable的对角阵
%因此需要处理一下将特征值矩阵存放在一个行向量里面
eigenValuezeros(variableNumber,1);
for j1:variableNumbereigenValue(j,1)eigenValueDig(j,j);
end
%将特征值进行降序排列
eigenValuesort(eigenValue,descend);
%%
%计算排序后的主成分的贡献率以及累计贡献率
for k1:variableNumbercontributionRateOfEachEigenValueeigenValue(k,1)/sum(eigenValue);accumulativeContributionRate(k,1)sum(eigenValue(1:k,1))/sum(eigenValue);
end
%设置主成分信息保留率
pcaInformationRetensionRatio0.9;
%统计在满足主成分保留率的主成分的数量。
for l1:variableNumberif accumulativeContributionRate(l,1)pcaInformationRetensionRatio;mainComponentNumberl;break;end
end
%截取主成分对应的特征向量
for ii1:mainComponentNumbermainComponentBasedVector(:,ii)eigenVector(:,variableNumber1-ii);
end
%%
%计算打分矩阵
scoreMatrixnormalizedcorporationEvaluation*mainComponentBasedVector;
%计算最终的公司的总打分finalScoreMatrix的第一列为打分值第二列为公司序号。
for jj1:corporationNumberfinalScoreMatrix(jj,1)sum(scoreMatrix(jj,:));finalScoreMatrix(jj,2)jj;
end
%对打分矩阵按照分数那一列进行降序排列
finalScoreMatrixsortrows(finalScoreMatrix,-1);
disp(the tope 5 corperations is: )
%输出排名前5的公司序号
for kk1:5finalScoreMatrix(kk,2)
end
4 . 结果
1特征值贡献率以及累计贡献率
特征值贡献率累计贡献率5.72610.71700.71701.09720.13720.85470.58960.07370.92790.28580.03570.96360.14560.01820.98180.13690.01710.99890.00600.000750.99970.00270.0020341.0000
2公司打分以及排名
特征值贡献率4.23593.97112.36781.97061.79851.103130.752150.16814-0.2922-1.00710-1.5237-2.0544-2.51311-3.6433-5.33212
可依据打分结果得出综合实力最强的是序号为9的那家公司。
5 . Matlab自带主成分分析函数pca对比验证 为了表明计算的准确性我再采用了matlab自带的主成分函数pca进行了一个对比验证。
[COEFF,SCORE,latent]pca(zscore(coporationEvaluation))返回的latent是一个向量它是X所对应的协方差矩阵的特征值向量。 我们主要看latent矩阵得到结果
特征值5.72611.09720.58960.28580.14560.13690.00600.0027
发现计算结果是一样的。
6 . 主成分分析法优缺点 优点 ①可消除评估指标之间的相关影响。因为主成分分析法在对原始数据指标变量进行变换后形成了彼此相互独立的主成分而且实践证明指标间相关程度越高主成分分析效果越好。 ②可减少指标选择的工作量对于其他评估方法由于难以消除评估指标间的相关影响所以选择指标时要花费不少精力而主成分分析法由于可以消除这种相关影响所以在指标选择上相对容易些。 ③主成分分析中各主成分是按方差大小依次排列顺序的在分析问题时可以舍弃一部分主成分只取前面方差较大的几个主成分来代表原变量从而减少了计算工作量。用主成分分析法作综合评估时由于选择的原则是累计贡献率≥85%不至于因为节省了工作量却把关键指标漏掉而影响评估结果。 缺点 ①在主成分分析中我们首先应保证所提取的前几个主成分的累计贡献率达到一个较高的水平即变量降维后的信息量须保持在一个较高水平上其次对这些被提取的主成分必须都能够给出符合实际背景和意义的解释否则主成分将空有信息量而无实际含义。 ②主成分的解释其含义一般多少带有点模糊性不像原始变量的含义那么清楚、确切这是变量降维过程中不得不付出的代价。因此提取的主成分个数m通常应明显小于原始变量个数p除非p本身较小否则维数降低的“利”可能抵不过主成分含义不如原始变量清楚的“弊”。 ③当主成分的因子负荷的符号有正有负时综合评价函数意义就不明确。