资源简介
在实验中,我们可以把高维的数据进行降维,得到低维的数据,然后在进行分析。完美运行,你值得拥有。

代码片段和文件信息
%程序说明:PCA= pca(X),程序中X为 n*m阶混合数据矩阵,m为信号个数即变量的个数,n为采样点数即样本个数
% T为主分量矩阵P为得分向量矩阵,Q和T2为统计量。
%function PCA= pca(X)
tic;
load(‘高维特征.mat‘)
X=features(:1:30);
[m n]=size(X);
if X == 0
error(‘You must supply the mixed data as input argument.‘);%判断是否输入数据
end
if length(size(X))>2
error(‘Input data can not have more than two dimensions. ‘);%判断输入数据维数
end
if any(any(isnan(X)))
error(‘Input data contains NaN‘‘s.‘);%判断输入数据是否含有非数值的数据
end
%——————————————标准化数据(首先去均值,然后标定到单位方差)————————————
a=0.99;
meanValue = mean(X); %求采集数据的样本均值
e=ones(size(X1)1);
s=std(X);
d=diag(s.^-10);
fprintf(‘Normalizing the input data X:\n‘);
normX = (X - e*meanValue)*d; %将采集数据去均值并标准化
[NumofSamplDim] = size(X); %最初采集数据的维数及每个变量样本的个数
oldDim = Dim; %最初变量个数,即数据的维数
fprintf(‘Number of process variables: %d\n‘Dim);
fprintf(‘Number of samples of every variable: %d\n‘NumofSampl);
fprintf(‘Calculate PCA:\n‘);
%———计算协方差矩阵的特征值大于阈值的个数numEig(实际求出特征值中非零的特征值个数)———
firstEig=1;
numEig = 0;
covarianceMatrix = (1/(NumofSampl-1))*(normX‘*normX); %计算normX的协方差矩阵
[VD] = eig(covarianceMatrix) ; %计算协方差矩阵的特征值和特征向量全部特征值构成对角阵D,特征向量为V的列向量
threshold = 1e-5;
for n=1:Dim
if D(nn)>threshold
numEig=numEig+1;
else if D(nn)<=threshold
numEig=numEig; %实际求出的特征值大于零的非零特征值的个数
end
end
end
%——————————降序排列各特征值——————————
eigenvalues = flipud(sort(diag(D))); %按从大到小顺序排列的所有的特征值
t=eigenvalues‘;
%fprintf(‘The eigenvalues are as follows: %g \n‘eigenvalues);
%fprintf(‘Number of non-zero eigenvalues: %d\n‘numEig);
%—————————去掉较小的特征值(去掉较小值的阈值是去掉最大和最小特征值的和求平均)——————————
if numEig < oldDim %特征值的个数小于最初数据的维数的情况
lowerValue=(sum(eigenvalues)-eigenvalues(1)-eigenvalues(2))/numEig;
else
lowerValue=(sum(eigenvalues)-eigenvalues(1)-eigenvalues(numEig))/numEig; %特征值个数等于最初数据维数的情况
end
columns = diag(D) >=lowerValue ;%求得去掉较小特征值后的特征值向量(逻辑向量,大于设定值的特征值为1,小于设定值的为0)
%—————————合并选择的特征值,确定所选择则的特征值——————————
selectedColumns =columns ;
newDim=sum(selectedColumns);
%—————————输出处理的结果信息—————————
fprintf(‘Selected[ %d ] dimensions.\n‘newDim);
fprintf(‘Smallest remaining (non-zero) eigenvalue: %g \n‘eigenvalues(numEig));
fprintf(‘Largest remaining (non-zero) eigenvalue : %g \n‘eigenvalues(firstEig));
%———————选择相应的特征值和特征向量———————
B=V*fliplr(diag(selectedColumns)); %根据特征值大小,选择相应的特征向量
y=find(sum(B)~=0); %计算经过换算过的矩阵的列向量是否为0
selectedEvector=B(:y); %根据所选择的特征值,确定所选择的单位特征向量组成的新矩阵
%——————————计算负荷向量构成的矩阵———————————
disp(‘Calculate the loading vectors:‘);
P=selectedEvector ; %计算负荷向量P
%——————————提取主分量T————————————
disp(‘Calculate the score vectors:‘);
T= normX*P ; %计算得分向量,即主分量矩阵
%——————————计算Q统计量,即主元模型的SPE———————————
disp(‘Calculate the model prediction values:‘);
normXpre=T*P‘; %计算归一化后的主元模型预测值矩阵
error=normX-normXpre; %计算归一化的相对于主元模型的预测的误差
squaredError=error.^2 ;%计算归一化后的平方预测误差
disp(‘Calculate the Q statistic:‘);
Q=sum(squaredError2) ; %计算Q统计量
%——————————计算T统计量———————————
selectedEigvalue=diag(eigenvalues(1:newDim)); %计算所选择的特征值矩阵
disp(‘Calculate the T2 statistic:‘);
T2=diag(T*inv(selec
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5732 2018-10-15 10:02 pca降维算法\PCA.m
文件 117313 2018-06-17 15:39 pca降维算法\高维特征.mat
目录 0 2018-11-19 10:34 pca降维算法
----------- --------- ---------- ----- ----
123045 3
- 上一篇:MMC可靠性预测计算程序
- 下一篇:时域特征的求取,例如峭度、裕度等等。
相关资源
- 编程实现二维DCT变换
- 图像二值化
- 用FFT对信号进行频谱分析
- Tone-Reservation
- QGA 量子遗传算法
- 差分形式的阻滞增长模型
- 遗传算法的M文件
- 简单二阶互联系统的非线性动力学分
- 手写数字识别-模板匹配法
- Stock_Watson_动态因子分析模型
- 果蝇优化算法优化支持向量回归程序
- 自己做的一个简单GUI扑克纸牌识别-
- multi output SVR
- AR过程的线性建模过程与各种功率谱估
- PCNN TOOLBOX
- plstoolbox.zip
- 中国国家基础地理信息系统GIS数据
- 粒子群微电网优化调度
- 矩阵分析-经典教材-中文版-Roger.A.Ho
- 压缩感知TwIST
- 基于最小错误率的贝叶斯手写数字分
- 最全系统辨识源代码,包括多种最小
- 导弹制导实验
- 画跟踪精确度图的程序.zip
- 重力场大地水准面及重力异常阶次误
- prtools5.2.3工具包
- 脉冲耦合神经网络工具箱PCNN-toolbox
- SVM算法-回归拟合程序.zip
- Kriging代理模型EGO算法.zip
- Matalb实现停车场完整系统
评论
共有 条评论