在多變量分析中，主成分分析（英語：Principal components analysis，縮寫：PCA）是一種統計分析、簡化數據集的方法。它利用正交变换来对一系列可能相关的变量的观测值进行线性变换，从而投影为一系列线性不相关变量的值，这些不相关变量称为主成分（Principal Components）。具体地，主成分可以看做一个线性方程，其包含一系列线性系数来指示投影方向。PCA对原始数据的正则化或预处理敏感（相对缩放）。
基本思想：

将坐标轴中心移到数据的中心，然后旋转坐标轴，使得数据在C1轴上的方差最大，即全部n个数据个体在该方向上的投影最为分散。意味着更多的信息被保留下来。C1成为第一主成分。
C2第二主成分：找一个C2，使得C2与C1的协方差（相关系数）为0，以免与C1信息重叠，并且使数据在该方向的方差尽量最大。
以此类推，找到第三主成分，第四主成分......第p个主成分。p个随机变量可以有p个主成分。
主成分分析经常用于减少数据集的维数，同时保留数据集當中对方差贡献最大的特征。这是通过保留低維主成分，忽略高維主成分做到的。这样低維成分往往能够保留住数据的最重要部分。但是，这也不是一定的，要视具体应用而定。由于主成分分析依赖所给数据，所以数据的准确性对分析结果影响很大。
主成分分析由卡尔·皮尔逊於1901年發明，用於分析數據及建立數理模型，在原理上与主轴定理相似。之后在1930年左右由哈罗德·霍特林独立发展并命名。依据应用领域的不同，在信号处理中它也叫做离散K-L 转换（discrete Karhunen–Loeve transform (KLT)）。其方法主要是通過對共變異數矩陣進行特征分解，以得出數據的主成分（即特征向量）與它們的權值（即特征值）。PCA是最簡單的以特征量分析多元統計分布的方法。其結果可以理解為對原數據中的方差做出解釋：哪一個方向上的數據值對方差的影響最大？換而言之，PCA提供了一種降低數據維度的有效辦法；如果分析者在原數據中除掉最小的特征值所對應的成分，那麼所得的低維度數據必定是最優化的（也即，這樣降低維度必定是失去訊息最少的方法）。主成分分析在分析複雜數據時尤為有用，比如人臉識別。
PCA是最简单的以特征量分析多元统计分布的方法。通常，这种运算可以被看作是揭露数据的内部结构，從而更好地展現数据的變異度。如果一个多元数据集是用高维数据空间之坐标系來表示的，那么PCA能提供一幅较低维度的图像，相當於数据集在讯息量最多之角度上的一個投影。这样就可以利用少量的主成分讓数据的维度降低了。
PCA 跟因子分析密切相关。因子分析通常包含更多特定領域底層結構的假設，並且求解稍微不同矩陣的特徵向量。
PCA 也跟典型相關分析（CCA）有關。CCA定義的坐標系可以最佳地描述兩個數據集之間的互協方差，而PCA定義了新的正交坐標系，能最佳地描述單個數據集當中的變異數。


数学定义 PCA的数学定义是：一个正交化线性变换，把数据变换到一个新的坐标系统中，使得这一数据的任何投影的第一大方差在第一个坐标（称为第一主成分）上，第二大方差在第二个坐标（第二主成分）上，依次类推。
定义一个
  
    
      
        n
        ×
        m
      
    
    {\displaystyle n\times m}
  
的矩阵, 
  
    
      
        
          X
          
            T
          
        
      
    
    {\displaystyle X^{T}}
  
为去平均值（以平均值为中心移动至原点）的数据，其行为数据样本，列为数据类别（注意，这里定义的是
  
    
      
        
          X
          
            T
          
        
      
    
    {\displaystyle X^{T}}
  
 而不是
  
    
      
        X
      
    
    {\displaystyle X}
  
）。则
  
    
      
        X
      
    
    {\displaystyle X}
  
的奇异值分解为
  
    
      
        X
        =
        W
        Σ
        
          V
          
            T
          
        
      
    
    {\displaystyle X=W\Sigma V^{T}}
  
，其中
  
    
      
        W
        ∈
        
          
            R
          
          
            m
            ×
            m
          
        
      
    
    {\displaystyle W\in \mathbf {R} ^{m\times m}}
  
是
  
    
      
        X
        
          X
          
            T
          
        
      
    
    {\displaystyle XX^{T}}
  
的特征向量矩阵， 
  
    
      
        Σ
        ∈
        
          
            R
          
          
            m
            ×
            n
          
        
      
    
    {\displaystyle \Sigma \in \mathbf {R} ^{m\times n}}
  
是奇异值矩阵，
  
    
      
        V
        ∈
        
          
            R
          
          
            n
            ×
            n
          
        
      
    
    {\displaystyle V\in \mathbf {R} ^{n\times n}}
  
是
  
    
      
        
          X
          
            T
          
        
        X
      
    
    {\displaystyle X^{T}X}
  
的特征向量矩阵。据此，

  
    
      
        
          
            
              
                
                  
                    Y
                  
                  
                    ⊤
                  
                
              
              
                
                =
                
                  
                    X
                  
                  
                    ⊤
                  
                
                
                  W
                
              
            
            
              
              
                
                =
                
                  V
                
                
                  
                    Σ
                  
                  
                    ⊤
                  
                
                
                  
                    W
                  
                  
                    ⊤
                  
                
                
                  W
                
              
            
            
              
              
                
                =
                
                  V
                
                
                  
                    Σ
                  
                  
                    ⊤
                  
                
              
            
          
        
      
    
    {\displaystyle {\begin{aligned}{\boldsymbol {Y}}^{\top }&={\boldsymbol {X}}^{\top }{\boldsymbol {W}}\\&={\boldsymbol {V}}{\boldsymbol {\Sigma }}^{\top }{\boldsymbol {W}}^{\top }{\boldsymbol {W}}\\&={\boldsymbol {V}}{\boldsymbol {\Sigma }}^{\top }\end{aligned}}}
  

当 m < n − 1时，V 在通常情况下不是唯一定义的，而Y 则是唯一定义的。W 是一个正交矩阵，YTWT=XT，且YT的第一列由第一主成分组成，第二列由第二主成分组成，依此类推。
为了得到一种降低数据维度的有效办法，我们可以利用WL把 X 映射到一个只应用前面L个向量的低维空间中去：

  
    
      
        
          Y
        
        =
        
          
            
              W
              
                L
              
            
          
          
            ⊤
          
        
        
          X
        
        =
        
          
            Σ
            
              L
            
          
        
        
          
            V
          
          
            ⊤
          
        
      
    
    {\displaystyle \mathbf {Y} =\mathbf {W_{L}} ^{\top }\mathbf {X} =\mathbf {\Sigma _{L}} \mathbf {V} ^{\top }}
  

其中
  
    
      
        
          
            Σ
            
              L
            
          
        
        =
        
          
            I
          
          
            L
            ×
            m
          
        
        
          Σ
        
      
    
    {\displaystyle \mathbf {\Sigma _{L}} =\mathbf {I} _{L\times m}\mathbf {\Sigma } }
  
，且
  
    
      
        
          
            I
          
          
            L
            ×
            m
          
        
      
    
    {\displaystyle \mathbf {I} _{L\times m}}
  
為
  
    
      
        L
        ×
        m
      
    
    {\displaystyle L\times m}
  
的單位矩陣。
X 的单向量矩阵W相当于协方差矩阵的特征向量 C = X XT,

  
    
      
        
          X
        
        
          
            X
          
          
            ⊤
          
        
        =
        
          W
        
        
          Σ
        
        
          
            Σ
          
          
            ⊤
          
        
        
          
            W
          
          
            ⊤
          
        
      
    
    {\displaystyle \mathbf {X} \mathbf {X} ^{\top }=\mathbf {W} \mathbf {\Sigma } \mathbf {\Sigma } ^{\top }\mathbf {W} ^{\top }}
  

在欧几里得空间给定一组点数，第一主成分对应于通过多维空间平均点的一条线，同时保证各个点到这条直线距离的平方和最小。去除掉第一主成分后，用同样的方法得到第二主成分。依此类推。在Σ中的奇异值均为矩阵 XXT的特征值的平方根。每一个特征值都与跟它们相关的方差是成正比的，而且所有特征值的总和等于所有点到它们的多维空间平均点距离的平方和。PCA提供了一种降低维度的有效办法，本质上，它利用正交变换将围绕平均点的点集中尽可能多的变量投影到第一维中去，因此，降低维度必定是失去讯息最少的方法。PCA具有保持子空间拥有最大方差的最优正交变换的特性。然而，当与离散余弦变换相比时，它需要更大的计算需求代价。非线性降维技术相对于PCA来说则需要更高的计算要求。
PCA对变量的缩放很敏感。如果我们只有两个变量，而且它们具有相同的样本方差，并且成正相关，那么PCA将涉及两个变量的主成分的旋转。但是，如果把第一个变量的所有值都乘以100，那么第一主成分就几乎和这个变量一样，另一个变量只提供了很小的贡献，第二主成分也将和第二个原始变量几乎一致。这就意味着当不同的变量代表不同的单位（如温度和质量）时，PCA是一种比较武断的分析方法。但是在Pearson的题为
"On Lines and Planes of Closest Fit to Systems of Points in Space"的原始文件里，是假设在欧几里得空间里不考虑这些。一种使PCA不那么武断的方法是使用变量缩放以得到单位方差。


讨论 通常，为了确保第一主成分描述的是最大方差的方向，我们会使用平均减法进行主成分分析。如果不执行平均减法，第一主成分有可能或多或少的对应于数据的平均值。另外，为了找到近似数据的最小均方误差，我们必须选取一个零均值。
假设零经验均值，数据集 X 的主成分w1可以被定义为：

  
    
      
        
          
            w
          
          
            1
          
        
        =
        
          
            
              arg
              
              m
              a
              x
            
            
              ‖
              
                w
              
              ‖
              =
              1
            
          
        
        
        Var
        ⁡
        {
        
          
            w
          
          
            ⊤
          
        
        
          X
        
        }
        =
        
          
            
              arg
              
              m
              a
              x
            
            
              ‖
              
                w
              
              ‖
              =
              1
            
          
        
        
        E
        
          {
          
            
              (
              
                
                  
                    w
                  
                  
                    ⊤
                  
                
                
                  X
                
              
              )
            
            
              2
            
          
          }
        
      
    
    {\displaystyle \mathbf {w} _{1}={\underset {\Vert \mathbf {w} \Vert =1}{\operatorname {\arg \,max} }}\,\operatorname {Var} \{\mathbf {w} ^{\top }\mathbf {X} \}={\underset {\Vert \mathbf {w} \Vert =1}{\operatorname {\arg \,max} }}\,E\left\{\left(\mathbf {w} ^{\top }\mathbf {X} \right)^{2}\right\}}
  

为了得到第 k个主成分，必须先从X中减去前面的 
  
    
      
        k
        −
        1
      
    
    {\displaystyle k-1}
  
 个主成分：

  
    
      
        
          
            
              
                X
                ^
              
            
          
          
            k
            −
            1
          
        
        =
        
          X
        
        −
        
          ∑
          
            i
            =
            1
          
          
            k
            −
            1
          
        
        
          
            w
          
          
            i
          
        
        
          
            w
          
          
            i
          
          
            ⊤
          
        
        
          X
        
      
    
    {\displaystyle \mathbf {\hat {X}} _{k-1}=\mathbf {X} -\sum _{i=1}^{k-1}\mathbf {w} _{i}\mathbf {w} _{i}^{\top }\mathbf {X} }
  

然后把求得的第k个主成分带入数据集，得到新的数据集，继续寻找主成分。

  
    
      
        
          
            w
          
          
            k
          
        
        =
        
          
            
              a
              r
              g
              
              m
              a
              x
            
            
              ‖
              
                w
              
              ‖
              =
              1
            
          
        
        
        E
        
          {
          
            
              (
              
                
                  
                    w
                  
                  
                    ⊤
                  
                
                
                  
                    
                      
                        X
                        ^
                      
                    
                  
                  
                    k
                    −
                    1
                  
                
              
              )
            
            
              2
            
          
          }
        
        .
      
    
    {\displaystyle \mathbf {w} _{k}={\underset {\Vert \mathbf {w} \Vert =1}{\operatorname {arg\,max} }}\,E\left\{\left(\mathbf {w} ^{\top }\mathbf {\hat {X}} _{k-1}\right)^{2}\right\}.}
  

PCA相当于在气象学中使用的经验正交函数（EOF）,同时也类似于一个线性隐层神经网络。 隐含层 K 个神经元的权重向量收敛后，将形成一个由前 K 个主成分跨越空间的基础。但是与PCA不同的是，这种技术并不一定会产生正交向量。
PCA是一种很流行且主要的模式识别技术。然而，它并不能最优化类别可分离性。另一种不考虑这一点的方法是线性判别分析。


符号和缩写表 主成分分析的属性和限制 如上所述，主成分分析的结果依赖于变量的缩放。
主成分分析的适用性受到由它的派生物产生的某些假设的限制。


主成分分析和信息理论 通过使用降维来保存大部分数据信息的主成分分析的观点是不正确的。确实如此，当没有任何假设信息的信号模型时，主成分分析在降维的同时并不能保证信息的不丢失，其中信息是由香农熵来衡量的。
基于假设得

  
    
      
        
          x
        
        =
        
          s
        
        +
        
          n
        
      
    
    {\displaystyle \mathbf {x} =\mathbf {s} +\mathbf {n} }
  

也就是说，向量 x 是含有信息的目标信号 s 和噪声信号 n 之和，从信息论角度考虑主成分分析在降维上是最优的。
特别地，Linsker证明了如果 s 是高斯分布，且 n 是 与密度矩阵相应的协方差矩阵的高斯噪声，


使用统计方法计算PCA 以下是使用统计方法计算PCA的详细说明。但是请注意，如果利用奇异值分解（使用标准的软件）效果会更好。
我们的目标是把一个给定的具有 M 维的数据集X 变换成具有较小维度 L的数据集Y。现在要求的就是矩阵Y，Y是矩阵X  Karhunen–Loeve变换。:
  
    
      
        
          Y
        
        =
        
          K
          L
          T
        
        {
        
          X
        
        }
      
    
    {\displaystyle \mathbf {Y} =\mathbb {KLT} \{\mathbf {X} \}}
  


= 组织数据集 =
假设有一组 M 个变量的观察数据，我们的目的是减少数据，使得能够用L 个向量来描述每个观察值，L < M。进一步假设，该数据被整理成一组具有N个向量的数据集，其中每个向量都代表M 个变量的单一观察数据。

  
    
      
        
          
            x
          
          
            1
          
        
        …
        
          
            x
          
          
            N
          
        
      
    
    {\displaystyle \mathbf {x} _{1}\ldots \mathbf {x} _{N}}
  
为列向量，其中每个列向量有M 行。
将列向量放入M × N的单矩阵X 裡。


= 计算经验均值 =
对每一维m = 1, ..., M计算经验均值
将计算得到的均值放入一个 M × 1维的经验均值向量u中

  
    
      
        u
        [
        m
        ]
        =
        
          
            1
            N
          
        
        
          ∑
          
            n
            =
            1
          
          
            N
          
        
        X
        [
        m
        ,
        n
        ]
      
    
    {\displaystyle u[m]={1 \over N}\sum _{n=1}^{N}X[m,n]}
  


= 计算平均偏差 =
对于在最大限度地减少近似数据的均方误差的基础上找到一个主成分来说，均值减去法是该解决方案的不可或缺的组成部分。因此，我们继续如下步骤：

从数据矩阵X的每一列中减去经验均值向量 u
将平均减去过的数据存储在M × N矩阵B中

  
    
      
        
          B
        
        =
        
          X
        
        −
        
          u
        
        
          h
        
      
    
    {\displaystyle \mathbf {B} =\mathbf {X} -\mathbf {u} \mathbf {h} }
  

其中h是一个长度为N的全为1的行向量：

  
    
      
        h
        [
        n
        ]
        =
        1
        
        
        
        
          for 
        
        n
        =
        1
        ,
        …
        ,
        N
      
    
    {\displaystyle h[n]=1\,\qquad \qquad {\text{for }}n=1,\ldots ,N}
  


= 求协方差矩阵 =
从矩阵B 中找到M × M 的经验协方差矩阵C

  
    
      
        
          C
        
        =
        
          E
        
        
          [
          
            
              B
            
            ⊗
            
              B
            
          
          ]
        
        =
        
          E
        
        
          [
          
            
              B
            
            ⋅
            
              
                B
              
              
                ∗
              
            
          
          ]
        
        =
        
          
            1
            
              N
              −
              1
            
          
        
        
          ∑
          

          
        
        
          B
        
        ⋅
        
          
            B
          
          
            ∗
          
        
      
    
    {\displaystyle \mathbf {C} =\mathbb {E} \left[\mathbf {B} \otimes \mathbf {B} \right]=\mathbb {E} \left[\mathbf {B} \cdot \mathbf {B} ^{*}\right]={1 \over N-1}\sum _{}\mathbf {B} \cdot \mathbf {B} ^{*}}
  

其中  
  
    
      
        
          E
        
      
    
    {\displaystyle \mathbb {E} }
  
为期望值

  
    
      
        ⊗
      
    
    {\displaystyle \otimes }
  
是最外层运算符

  
    
      
        ∗
         
      
    
    {\displaystyle *\ }
  
是共轭转置运算符。
请注意，如果B完全由实数组成，那么共轭转置与正常的转置一样。

为什么是N-1,而不是N，Bessel's correction给出了解释


= 查找协方差矩阵的特征值和特征向量 =
计算矩阵C 的特征向量

  
    
      
        
          
            V
          
          
            −
            1
          
        
        
          C
        
        
          V
        
        =
        
          D
        
      
    
    {\displaystyle \mathbf {V} ^{-1}\mathbf {C} \mathbf {V} =\mathbf {D} }
  

其中，D 是C的特征值对角矩阵，这一步通常会涉及到使用基于计算机的计算特征值和特征向量的算法。在很多矩阵代数系统中这些算法都是现成可用的，如R语言，MATLAB,Mathematica,SciPy, IDL(交互式数据语言), 或者GNU Octave以及OpenCV。
矩阵D为M × M的对角矩阵
各个特征值和特征向量都是配对的，m个特征值对应m个特征向量。


参见 圖模式
马尔可夫链
马尔可夫逻辑网络


注释 参考 Jolliffe, I. T. Principal Component Analysis. Springer-Verlag. 1986: 487  [2012-01-24]. ISBN 978-0-387-95442-4. doi:10.1007/b98835. （原始内容存档于2019-10-16）.