精华内容
下载资源
问答
  • MATLAB自带工具箱实现PCA降维代码
    2021-04-18 08:43:06

    PCA基本流程:

    1、训练集矩阵算协方差矩阵A;

    2、算协方差矩阵特征值与特征向量;

    3、按特征值的大小排列特征矩阵,得B,对应的特征值(按从大到小排列)组成向量a;

    4、A*B得到去关联的新矩阵C,A与C的对应位置物理意义相同(指样本维度和样本数),但是去掉了关联,并且按特征贡献度大小排列;

    5、选贡献度百分比或降维后的维度。例如百分之90,则是取满足sum(a(1:n))/sum(a)>90%的最小的n;如果直接定降维后的维度,则直接设置个n;

    6、任一样本的降维公式相同,对于样本x:x*B(1:n,:)。

    原理说明:

    步骤3,4本质上是基变换原理。4可以去关联的原理与马氏距离相仿。贡献度的原理与协方差矩阵的数学意义相关。转换矩阵相关的计算必须在训练集上完成是因为协方差矩阵的计算需要一个样本集,如将测试集样本加入这个样本集,则训练集中已经包含了测试集信息(例如某一维特征的均值)。

    matlab函数说明:

    [coeff,score,latent,tsquare] = pca(feature);%我们这里需要他的pc和latent值做分析

    feature是被降维的特征,每一行是一个特征,列数代表总的特征个数,比如一个图片的HOG特征是96维,总共有8000个HOG特征,那么feature的维度是8000×96,我们的目标就是将其降维(假设将96维降到50维,)那么我们期望的降维后feature就变成了我们需要的feature_after_PCA:8000×50

    coeff:步骤3算出来的矩阵B,本质上是一个基变换矩阵。数学意义是协方差矩阵按特征值的大小排列的特征矩阵。

    score:步骤4算出来的矩阵C,与A同维同物理意义。

    latent:步骤3算出来的向量a,存储了贡献度,数学意义是协方差矩阵特征值从大到小排列。

    用途:

    根据latent计算满足某贡献度所需的样本维度,或直接定一个样本维度,然后feature*coeff(1:n,:)降维。把训练集中所有样本计算feature*coeff就是score,当然,feature*coeff(1:n,:)这个式子更大的用途是计算测试集中的样本。

    重点!!!

    pca内建函数在算协方差的时候先减了个样本均值,所以这里feature*coeff不是score,需要先算:

    x0 = bsxfun(@minus,feature,mean(feature,1));

    然后x0*coeff才是score。

    更多相关内容
  • matlab实现PCA降维

    千次阅读 2018-09-18 20:28:22
    利用PCA,把二维数据降为一维数据 load ('ex7data1.mat'); %变成一维 K = 1; %对数据归一化 means = mean(X); X_means = bsxfun(@minus, X, means); sigma = std(X_means); X_std = bsxfun(@rdivide, X_means, ...

    利用PCA,把二维数据降为一维数据

    load ('ex7data1.mat');
    %变成一维
    K = 1;
    %对数据归一化
    means = mean(X);
    X_means = bsxfun(@minus, X, means);
    sigma = std(X_means);
    X_std = bsxfun(@rdivide, X_means, sigma);
    %绘制原始数据
    scatter(X_std(:,1), X_std(:,2),'ro');
    hold on;
    [m n] = size(X);
    %计算二维到一维的变换矩阵
    sigma = 1/m * X_std' * X_std;
    U = zeros(n);
    %U为特征向量构成的n*n矩阵,S为对角矩阵,对角线上的元素为特征值
    [U S D] = svd(sigma);
    U_reduce = U(:,1:K);
    Z = X_std * U_reduce;
    X_rec = Z * U_reduce';
    scatter(X_rec(:,1), X_rec(:,2),'bo');
    %在原数据和降维后的数据间连线
    for i = 1 : m
        plot([X_std(i,1) X_rec(i, 1)], [X_std(i, 2) X_rec(i, 2)], 'k');
    end;
    [c, cc] = min(X(:,1));
    [d, dd] = max(X(:,1));
    plot([X_rec(cc,1) X_rec(dd, 1)], [X_rec(cc,2) X_rec(dd, 2)], 'b');
    axis([-3 3 -3 3]);
    

    效果图

    测试数据

    3.381563 3.389113
    4.527875 5.854178
    2.655682 4.411995
    2.765235 3.715414
    2.846560 4.175506
    3.890672 6.488381
    3.475805 3.632849
    5.911298 6.680769
    3.928894 5.098447
    4.561835 5.623299
    4.574072 5.397651
    4.371734 5.461165
    4.191694 4.954694
    5.244085 4.661488
    2.835840 3.768017
    5.635270 6.312114
    4.686330 5.665241
    2.850513 4.626456
    5.110157 7.363197
    5.182564 4.646509
    5.707328 6.681040
    3.579685 4.802781
    5.639378 6.120436
    4.263469 4.689429
    2.536517 3.884491
    3.223829 4.942556
    4.929488 5.955020
    5.792958 5.108393
    2.816848 4.818958
    3.888824 5.100366
    3.343234 5.893013
    5.879734 5.521417
    3.103919 3.857102
    5.331506 4.680742
    3.375427 4.565379
    4.776679 6.254350
    2.675746 3.730970
    5.500277 5.679481
    1.797097 3.247539
    4.322515 5.111105
    4.421004 6.025640
    3.179299 4.436860
    3.033541 3.978793
    4.609348 5.879792
    2.963789 3.300248
    3.971762 5.407737
    1.180233 2.878694
    1.918950 5.071078
    3.955247 4.505327
    5.117955 6.085074
    

     

    展开全文
  • pca针对二阶统计量的分析,主要处理服从高斯分布的信号信息。
  • 整理了各位博主的伪代码,并写成matlab程序,然后自己利用matlab自带的pca函数进行计算,两种方法进行比较,程序只需要导入自己数据就能运行。
  • PCA降维MATLAB程序

    2018-11-05 11:00:14
    PCA降维MATLAB程序,主要用于光谱的降维PCA降维MATLAB程序,主要用于光谱的降维
  • (如果对你有帮助记得点赞分享)数据集和详细介绍见博客:https://blog.csdn.net/weixin_43863744/article/details/106062212
  • 由于本人最近需要处理的数据特征太多,导致分类不准确,...整理了各位博主的伪代码,并写成matlab程序,然后自己利用matlab自带的pca函数进行计算,两种方法进行比较,程序已全副武装,只需要导入自己数据就能运行。
  • pca 是常见的数据降维 可以广泛的应用在各个领域
  • 新手教程,含搜集资料加代码。高光谱图像分类是高光谱遥感对地观测技术的一项重要内容,在军事及民用领域都有着重要的应用。然而,高光谱图像的高维特性、波段间高度相关性、光谱混合等使高光谱图像分类面临巨大挑战...
  • 前言题目复述Experiment 7: PCA in Face RecognitionNovember 27, 20181 DescriptionThe ORL Database of Faces (https://www.cl.cam.ac.uk/research/dtg/attarchive/ facedatabase.html) is a widely used database...

    前言

    题目复述

    Experiment 7: PCA in Face Recognition

    November 27, 2018

    1 Description

    The ORL Database of Faces (https://www.cl.cam.ac.uk/research/dtg/attarchive/ facedatabase.html) is a widely used database in the context of face recognition applications. The images are organized in 40 directories, each of which consists of 10 images. Note that, in each directories, the images are taken from the same person. To construct a set of training data, we randomly pick 5~7 images from each categories, while leaving the others as test data. Please ?rst apply PCA to the images to reduce data dimension, and then use SVM classi?er to realize face recognition. Speci?cally, for a given face image, ?nd who is in the image.

    2 Tasks

    Report the classi?cation accuracy based on your training data by varying parameter K (i.e., the number of projections in PCA).

    题目梗概

    本次实验是一个关于人脸识别的实验,就是先要求你对于给的人脸的数据进行降维的处理,然后再通过SVM的方式进行区别。这边呢,我可以贴上一篇paper,是和我们这次实验有关的一篇paper,感觉还是写得不错的。

    大致思想

    一般来说,pca的步骤都大体相似,先去中心化,然后构造协方差矩阵,然后对这个协方差矩阵进行特征向量和特征值的分解。通过特征值的选取,比如最大的top100,这样就可以选取top100特征值对应的特征向量。然后我们有原数据比如200x10000的一个矩阵,10000个feature,200个sample,我们将这个10000x100的特征向量与原数据相乘200x10000*10000x100,即可将这个矩阵降维至100个feature。

    实验

    读取数据

    读取pgm

    clear;clc;

    im1 = imread(‘./att_faces/orl_faces/s1/2.pgm‘);

    imshow(im1);

    m=im2double(im1);

    这样我们就可以读取出112x92的一个格式为uint8的矩阵。

    不过一般在matlab中,matrix的函数基本都是基于double类型的,所以我们可以对uint8类型的矩阵转换乘double,只需要使用函数im2double即可。

    这边我实现的思路是,将训练集降维之后,本来是一个高维矩阵,我把它降到他自身的1/4。

    然后得到一个训练集,现在就可以测试了。

    如何区分

    test读进来的肯定是一个原来维度的矩阵,还是先降维,降完维之后两种方式:欧式距离或者SVM进行区分

    欧式距离

    很简单,比如你有一个100个人的人脸训练数据,降完维度之后,你用test的降维后的矩阵和各个人的训练的矩阵求欧式距离,哪个最小,就是哪个人。

    SVM

    这个也简单,不过只能实现两个人之间的互判,就是说A的数据和B的数据分别打上1和-1的label,然后建立SVM,求max_{alpha}margin,然后根据alpha算出w和b,这样就能建立一个超平面,根据test的feature往里代入判断正负就ok。直接线性的SVM就ok,不用kernel升维度,已经实现了,但是代码中的一些细节部分还在整理,过几天附上来。

    展开全文
  • matlab鸢尾花降维代码
  • 光谱数据降维处理,结合了主成分分析和LDA方法,可直接运行
  • L1_PCA降维
  • MatlabPCA降维——以Mnist手写数据为例 一.参考文章 主成分分析(PCA)原理详解 主成分分析pca(Matlab pca函数参数解释) 二.百度云下载(代码+数据) PCA sharing 链接:...

    Matlab的PCA降维——以Mnist手写数据为例

    一.参考文章

    主成分分析(PCA)原理详解
    主成分分析pca(Matlab pca函数参数解释)

    二.百度云下载(代码+数据)

    PCA sharing
    链接:https://pan.baidu.com/s/1Bmfb7rLANU4D1T4q_GEu0A
    提取码:4xoh

    三.实际操作

    1.导入数据

    %%
    %导入原始数据 放在了E盘
    mnist_raw = csvread('E:/by/mnist_train.csv');
    %原始数据维度为60000*785,第一列为标签信息 
    %譬如第一个为"5"则这个图片是手写的"5"
    
    imgs = mnist_raw(1:1000,2:end);  %选取1000个样本,并去除标签列
    imgs = im2double(imgs);
    
    figure(1) %1显示前50幅图像
    for i = 1:50
        subplot(5, 10, i);
        imshow(reshape(imgs(i, :), 28, 28));%28x28=784 共有784%imshow(reshape(imgs(i, :), 40, 40));这样子是错误的
    end
    

    图1如下图所示,每个照片是由28*28的像素构成的,数据中为“0”则是黑色区域,通过数据的第一列的标签值,可以知道图1中第一行的数字分别是5 、0、 4、 1、 9、 2、 1、 3、 1、 4。
    在这里插入图片描述

    2.PCA数据可视化

    对于pca()函数的详细解说,请看上面的链接,这部分是最重要也是最难理解的,需要对pca原理有一定的了解

    %%
    %对数据imgs进行PCA降维
    [coeff,score,latent] = pca(double(imgs));
    % coeff的每一列是样本协方差矩阵的特征向量(主成分分量);
    %score第i行前n个数值代表着样本i降到n维的结果;
    % latent从大到小保存了样本协方差矩阵所有的特征值
    
    % 取前两维,并可视化如下:
    figure(2)
    plot(score(1:10, 1), score(1:10, 2), 'r*');
    hold on;
    plot(score(11:20, 1), score(11:20, 2), 'g*');
    hold on;
    plot(score(21:30, 1), score(21:30, 2), 'b*');
    hold on;
    plot(score(31:40, 1), score(31:40, 2), 'go');
    hold on;
    plot(score(41:50, 1), score(41:50, 2), 'ro');
    hold on;
    

    这里我一直不明白为什么要这样画图——每十个样本数据降到2维(降到二维就可以画图了),然后抹上不同的颜色,搞得同一个颜色就是一个类别了。
    在这里插入图片描述
    然后我取了前三维,用plot3()函数制作了三维图像,颜色一样的不代表同一个“类别”的(这个下次问问我亲爱的老师),红色圈的仅代表前10个的样本。
    在这里插入图片描述

    3.可视化“特征”

    coeff是一个784*784的double

    % 可视化“特征”,主成分分量coeff的每一列可以构造一个“特征”,对这些特征可视化如下:
    figure(3)
    for i=1:25
        subplot(5, 5, i);
        imshow(1.0 - reshape(coeff(:, i), 28, 28));
    end
    

    在这里插入图片描述

    4.重建图像

    % score第i行前n个数值代表着样本i降到n维的结果。
    %score第i行的第j个数值代表着第j个“特征”在原图像i中的权重。这些权值有正有负。
    % 据此,可以重构图像。下面以第二张图像为例。
    % 计算样本均值
    base_img =  mean(imgs);
    img = base_img';
    %使用前10个特征重建第二幅图像
    for i = 1:10
        img = img + coeff(:, i).*score(2, i);
    end
    % 显示重建的图像和原始图像,进行比较
    figure(4)
    subplot(2,1,1);
    imshow(reshape(img, 28, 28));
    subplot(2,1,2);
    imshow(reshape(imgs(2,:), 28, 28));
    

    在这里插入图片描述

    四.心得

    算法原理还是最核心的,这个代码数据啥的只是让大家好好消化比较抽象的PCA原理,写的不够好,希望大家多多交流(大大的微笑)

    展开全文
  • PCA降维算法总结以及matlab实现PCA

    万次阅读 多人点赞 2017-03-09 09:12:14
    http://blog.csdn.net/watkinsong/article/details/8234766 ... PCA的一些基本资料 最近因为最人脸表情识别,提取的gabor特征太多了,所以需要用PCA进行对提取的特征进行降维
  • PCA-L1AR-master_pca_L1PCA_PCAmatlab_pca降维_降维.zip
  • MATLAB人脸识别工程(PCA 主成分降维实现) 包含基于PCA算法实现人脸识别的代码文件和人脸数据库
  • PCA-L1AR-master_pca_L1PCA_PCAmatlab_pca降维_降维_源码.zip
  • PCA降维代码

    2021-04-18 08:43:04
    function y = pca(mixedsig)if nargin == 0error('You must supply the mixed data as input argument.');endif length(size(mixedsig))>2error('Input data can not have more than two dimensions. ');endif an...
  • svd算法matlab代码主成分分析(PCA)实验 主成分分析(PCA)非常有用,并且是统计和机器学习中常用的算法之一。 该工具被广泛用于各种应用中,例如用于可视化和分析的降维,压缩,离群值检测和图像处理。 PCA是我最...
  • 降维是机器学习中十分重要的一种思想。在机器学习中,我们会经常处理一些高维数据,而高维数据情形下,会出现距离计算困难,数据样本稀疏等问题。这类问题是所有机器学习方法共同面临的问题,我们也称之为“维度灾难...
  • 以某数据集为例: P=load('PaviaU.mat');...[coeff,score,latent,tsquared] = pca(ReshapedP); percent=cumsum(latent)./sum(latent); disp(percent); feature_after_PCA=score(:,1:3); RES=reshape(feature_after_PC
  • 高光谱图像基于MATLABPCA降维

    万次阅读 多人点赞 2018-09-17 13:45:54
    工具:matlab,本人使用的是2016a ...matlab中内含了进行PCA降维的函数,但这个函数输进去的数据要是二维的,所以我们先用resharp函数把原矩阵处理成111104*204的矩阵M 再使用自带的降维函数: [pc,score,latent...
  • 主成分分析PCA降维MATLAB程序实现代码

    千次下载 热门讨论 2011-03-09 20:41:54
    MATLAB实现用主成分分析(PCA)的方法对矩阵的降维.其中包括具体程序实现代码,为了增加程序的可读性,对程序的主要步骤都进行了解释。
  • Iris数据集PCA降维显示

    2016-03-15 10:06:41
    对IRIS数据集进行协方差分析,降维,二维显示分类。
  • 1. pca函数使用方法 [coeff, score] = pca(data); (1)输入参数 data:待降维的数据集 (2)输出参数 coeff:主成分分量,即样本协方差矩阵的特征向量; score:主成分,即样本在低维空间的投影,也就是...
  • MATLAB自带工具箱实现PCA降维代码,着重介绍实现方法

    万次阅读 多人点赞 2016-10-09 15:40:38
    作为项目中需要进行PCA降维,环境是MATLAB,但是在网上找了很多都是介绍PCA原理的,的确介绍的很仔细,但是我是一个工科狗,只是想最快查到用代码实现降维的方法而已,网上的对我来说太多了,因此在此做一个总结,出于对知识...
  • PCA(Principal Component Analysis)主成分分析方法是一种常见的数据降维方法。数据维度过高可能会使得模型效果不佳。PCA主要原理是将高维原数据通过一个转换矩阵,映射到另一组低维坐标系下,从而实现数据降维

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,097
精华内容 1,638
关键字:

matlab实现pca降维

matlab 订阅