主成分分析(PCA)深入剖析+Matlab模拟

来源:互联网 发布:数据分析师职业前景 编辑:程序博客网 时间:2024/05/20 02:28

1.降维引发的思考

对于现在维数比较多的数据,我们首先需要做的就是对其进行降维操作。降维,简单来说就是说在尽量保证数据本质的前提下将数据中的维数降低。降维的操作可以理解为一种映射关系,例如函数z=f(x,y),即由原来的二维转换成了一维。处理降维的技术有很多种,如前面的SVD奇异值分解主成分分析(PCA)因子分析(FA)独立成分分析(ICA)等等。

2.PCA的主调与意图

PCA是一种较为常用的降维技术,PCA的思想是将n维特征映射到k维上,这k维是全新的正交特征。这k维特征称为主元,是重新构造出来的k维特征。在PCA中,数据从原来的坐标系转换到新的坐标系下,新的坐标系的选择与数据本身是密切相关的。其中,第一个新坐标轴选择的是原始数据中方差最大的方向,第二个新坐标轴选取的是与第一个坐标轴正交且具有最大方差的方向,依次类推,我们可以取到这样的k个坐标轴
PCA的操作流程符合我们在矩阵论中学习的那一套,大致如下:
1.去平均值,即每一位特征减去各自的平均值;
2.计算协方差矩阵;
3.计算协方差矩阵的特征值与特征向量;
4.对特征值从大到小排序(更多时候我们愿意叫他贡献度);
5.保留最大的k个特征向量;将数据转换到k个特征向量构建的新空间中。

3.MATLAB仿真实验

%% pcadataSet = load('testSet.txt');%导入数据% pca[FinalData, reconData] = PCA(dataSet, 1);%% 作图hold onplot(dataSet(:,1), dataSet(:,2), '.');plot(reconData(:,1), reconData(:,2), '.r');hold off

function [ FinalData,reconData ] = PCA( dataSet, k )    [m,n] = size(dataSet);   %% 去除平均值    %取平均值    dataSetMean = mean(dataSet);    %减去平均值    dataSetAdjust = zeros(m,n);    for i = 1 : m        dataSetAdjust(i , :) = dataSet(i , :) - dataSetMean;    end    %% 计算协方差矩阵    dataCov = cov(dataSetAdjust);    %% 计算协方差矩阵的特征值与特征向量    [V, D] = eig(dataCov);        % 将特征值矩阵转换成向量    d = zeros(1, n);    for i = 1:n        d(1,i) = D(i,i);    end        %% 对特征值排序    [maxD, index] = sort(d);        %% 选取前k个最大的特征值    % maxD_k = maxD(1, (n-k+1):n);    index_k = index(1, (n-k+1):n);    % 对应的特征向量    V_k = zeros(n,k);    for i = 1:k        V_k(:,i) = V(:,index_k(1,i));    end        %% 转换到新的空间    FinalData = dataSetAdjust*V_k;        % 在原图中找到这些点    reconData = FinalData * V_k';    for i = 1 : m        reconData(i , :) = reconData(i , :) + dataSetMean;    endend
1 0
原创粉丝点击