主成分分析简单例子

一、数据降维

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

二、PCA的概念

    PCA是一种较为常用的降维技术,PCA的思想是将维特征映射到维上, 维是全新的正交特征。这维特征称为主元,是重新构造出来的维特征。在PCA中,数据从原来的坐标系转换到新的坐标系下,新的坐标系的选择与数据本身是密切相关的。其中,第一个新坐标轴选择的是原始数据中方差最大的方向,第二个新坐标轴选取的是与第一个坐标轴正交且具有最大方差的方向,依次类推,我们可以取到这样的个坐标轴。

三、PCA的操作过程

    1、PCA的操作流程大致如下:

  • 去平均值,即每一位特征减去各自的平均值
  • 计算协方差矩阵
  • 计算协方差矩阵的特征值与特征向量
  • 对特征值从大到小排序
  • 保留最大的个特征向量
  • 将数据转换到个特征向量构建的新空间中

    2、具体的例子

        假设二维数据为

  • 取平均值
       我们计算每一维特征的平均值,并去除平均值,我们计算出均值

去除均值后的矩阵为

  • 计算的协方差矩阵
  • 计算的特征值与特征向量
其中,特征值为

特征向量为

  • 对特征值进行排序,显然就两个特征值
  • 选择最大的那个特征值对应的特征向量
  • 转换到新的空间

四、实验的仿真

我们队一个数据集进行了测试:

MATLAB实验代码如下:
主程序
[plain]  view plain  copy
  1. %% pca  
  2.   
  3. dataSet = load('testSet.txt');%导入数据  
  4.   
  5. % pca  
  6. [FinalData, reconData] = PCA(dataSet, 1);  
  7.   
  8. %% 作图  
  9. hold on  
  10. plot(dataSet(:,1), dataSet(:,2), '.');  
  11. plot(reconData(:,1), reconData(:,2), '.r');  
  12. hold off  
  13.       
  14.       

PCA函数段
[plain]  view plain  copy
  1. function [ FinalData,reconData ] = PCA( dataSet, k )  
  2.     [m,n] = size(dataSet);  
  3.   
  4.    %% 去除平均值  
  5.     %取平均值  
  6.     dataSetMean = mean(dataSet);  
  7.     %减去平均值  
  8.     dataSetAdjust = zeros(m,n);  
  9.     for i = 1 : m  
  10.         dataSetAdjust(i , :) = dataSet(i , :) - dataSetMean;  
  11.     end  
  12.   
  13.     %% 计算协方差矩阵  
  14.     dataCov = cov(dataSetAdjust);  
  15.   
  16.     %% 计算协方差矩阵的特征值与特征向量  
  17.     [V, D] = eig(dataCov);  
  18.       
  19.     % 将特征值矩阵转换成向量  
  20.     d = zeros(1, n);  
  21.     for i = 1:n  
  22.         d(1,i) = D(i,i);  
  23.     end  
  24.       
  25.     %% 对特征值排序  
  26.     [maxD, index] = sort(d);  
  27.       
  28.     %% 选取前k个最大的特征值  
  29.     % maxD_k = maxD(1, (n-k+1):n);  
  30.     index_k = index(1, (n-k+1):n);  
  31.     % 对应的特征向量  
  32.     V_k = zeros(n,k);  
  33.     for i = 1:k  
  34.         V_k(:,i) = V(:,index_k(1,i));  
  35.     end  
  36.       
  37.     %% 转换到新的空间  
  38.     FinalData = dataSetAdjust*V_k;  
  39.       
  40.     % 在原图中找到这些点  
  41.     reconData = FinalData * V_k';  
  42.     for i = 1 : m  
  43.         reconData(i , :) = reconData(i , :) + dataSetMean;  
  44.     end  
  45. end  
  • 22
    点赞
  • 163
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维技术,可以用于分析变量之间的关系。下面以一个简单例子来解释主成分分析的过程。 假设我们有一组包含身高、体重和年龄的数据,我们想通过主成分分析来了解这三个变量之间的关系。首先,我们需要对数据进行标准化处理,即将数据转化为均值为0,方差为1的标准正态分布。这样可以确保不同变量之间的差异不会影响结果。 然后,我们计算相关系数矩阵。相关系数矩阵反映了不同变量之间的线性关系程度。通过计算相关系数矩阵,我们可以得到身高、体重和年龄之间的相关性。 接下来,我们对相关系数矩阵进行特征值分解。特征值分解可以得到相关系数矩阵的特征值和特征向量。特征值表示了每个主成分所解释的变异程度,而特征向量则代表了每个主成分的权重。 然后,我们根据特征值的大小选择主成分。选择的主成分应该能够解释大部分的变异程度,通常我们选择前几个特征值最大的主成分。 最后,我们将数据投影到所选择的主成分上,得到降维后的数据。降维后的数据可以更好地反映原始数据中的主要模式和关系。 综上所述,主成分分析是一种用于降维和分析变量之间关系的方法。通过将数据进行标准化、计算相关系数矩阵、进行特征值分解和选择主成分,我们可以得到降维后的数据,并了解原始数据中的主要模式和关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值