简单易学的机器学习算法——主成分分析(PCA)

时间:2022-05-04
本文章向大家介绍简单易学的机器学习算法——主成分分析(PCA),主要内容包括一、数据降维、二、PCA的概念、三、PCA的操作过程、2、具体的例子、四、实验的仿真、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

一、数据降维

       对于现在维数比较多的数据,我们首先需要做的就是对其进行降维操作。降维,简单来说就是说在尽量保证数据本质的前提下将数据中的维数降低。降维的操作可以理解为一种映射关系,例如函数

,即由原来的二维转换成了一维。处理降维的技术有很多种,如前面的SVD奇异值分解,主成分分析(PCA),因子分析(FA),独立成分分析(ICA)等等。

二、PCA的概念

三、PCA的操作过程

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

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

    2、具体的例子

        假设二维数据为:

  • 取平均值

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

去除均值后的矩阵为

  • 计算协方差矩阵
  • 计算特征值与特征向量

其中,特征值为

特征向量为

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

四、实验的仿真

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

MATLAB实验代码如下:

主程序

%% pca

dataSet = load('testSet.txt');%导入数据

% pca
[FinalData, reconData] = PCA(dataSet, 1);

%% 作图
hold on
plot(dataSet(:,1), dataSet(:,2), '.');
plot(reconData(:,1), reconData(:,2), '.r');
hold off

PCA函数段

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;
    end
end

参考文献

  1. 机器学习中的数学(4)-线性判别分析(LDA), 主成分分析(PCA)

对于本文有任何问题,欢迎邮件或者微博私信,具体联系方式见博客左侧。