样本数少于特征数的PCA降维

       模式识别在做SVM支持向量机的分类问题的时候,考虑到读取的图片特征数过大,如我的图片进行压缩之后还是有8100多的特征,而我的训练样本数只有600多张,需要用PCA降一下维,但是平时学的PCA降维要求样本数要大于特征数的,不然求不出协方差矩阵。

       我们老师说可以将训练样本的特征集转置过来求主成分向量大同小异。

       然后我就着手试一试了。代码如下,传入参数 X是特征集,如我的图片641张,一张图片8100特征,所以X = 641*8100,

       explained_leval 是希望保留百分之几的主成分特征,我保留80% ,所以explained_leval = 80,Xout 是降维后的特征集,Xvector 是前80%的主成分向量。

% 样本数小于特征数的pca降维

function [Xout,Xvector] = pca(X, explained_leval)
%X = trFeature;
X = X';
av = sum(X)/length(X);
Xav = []; % 去均值后
for i = 1:length(av)
    Xav = [Xav, X(:,i)-av(i)];
end
Xcov = cov(Xav); % 协方差
% Coeff的第i列是第i个主成分的系数向量
% latent是p个主成分的方差构成的向量
% explained是p个主成分的贡献率向量,已经转化为百分比
[COEFF,latent,explained]=pcacov(Xcov);
explained_sum = 0;
%explained_leval = 80;  % 提取百分比的特征
for times = 1:length(explained)
    explained_sum = explained_sum + explained(times);
    if explained_sum >= explained_leval
        break;
    end
end
Xvector = X*COEFF(:, 1:times);  % Xvector 为向量
Xout = X'*Xvector;  %降维结果  = 样本 * 向量

         首先去均值,求协方差,然后求主成分向量等等,跟之前PCA步骤一样,噢,前面的特征集需要转置一下!

          转置后的特征集乘以向量得出新的向量,然后再用原来的特征集乘以新的向量得出最终结果。

          另外测试样本也需要PCA降维,直接将训练样本的特征矩阵乘以新的主成分向量Xvector 即可,如1*8100 的样本乘以Xvector 就可以了。

          支持向量机实现的分类最终结果:

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值