概率主成分分析(Probabilistic Principal Component Analysis, PPCA)是主成分分析(PCA)的概率版本,它通过引入一个概率模型来解释数据的结构。前面,我们已经学习了PCA的相关知识,PPCA与PCA的差距在于PPCA假设数据是由低维潜在变量经过线性变换加上高斯噪声生成的,因此具有明确的概率解释。相比于传统的PCA,PPCA对数据中的噪声有更好的处理能力,并且能够自然地处理缺失数据。
PPCA的目标和PCA类似:通过将高维数据投影到一个低维空间中,实现数据降维的目的,同时保留尽可能多的信息。然而,PPCA的建模方式更加灵活,能处理更复杂的情况。
通过PPCA,我们不仅可以解释降维后的主成分,还可以得到一个概率模型,这个模型允许我们进行更多的推断,如对缺失数据的处理、生成新样本等。
PPCA与PCA的主要区别在于,PPCA引入了一个生成模型。它假设观测数据由一个低维潜在变量(Latent Variable)通过线性变换生成,并且在生成过程中加上了高斯噪声。这种假设使得PPCA能够提供对数据的概率解释。接下来,我们逐步介绍PPCA的原理。
PPCA假设每一个观测数据
其中:
-
$\mathbf{W}$ 是一个线性变换矩阵(称为“权重矩阵”),用于将低维的潜在变量$\mathbf{z}_i$ 转换为高维观测空间。 -
$\mu$ 是观测数据的均值向量,用于平移数据。 -
$\epsilon_i \sim \mathcal{N}(0, \sigma^2\mathbf{I})$ 是一个服从高斯分布的噪声项,具有零均值和方差$\sigma^2$ 。
潜在变量
PPCA的目标是通过最大似然估计(Maximum Likelihood Estimation, MLE)找到使得数据生成过程最符合观测数据的模型参数,包括
PPCA的似然函数基于观测数据的概率分布。根据PPCA的生成模型,观测数据
PPCA的核心任务是最大化这个似然函数,进而找到最佳的参数估计。这与PCA不同,PCA直接通过协方差矩阵的特征值分解来获得主成分,而PPCA通过最大化数据的概率来确定潜在变量和模型参数。
PPCA和PCA在数学上是紧密相关的。当高斯噪声的方差
我们通过Python的scikit-learn库中的PPCA实现来演示如何对数据进行概率主成分分析。这里使用的库是 sklearn.decomposition.FactorAnalysis ,它可以用于实现PPCA。
我们使用 scikit-learn 库来实现PPCA,首先确保相关库已经安装:
pip install numpy pandas scikit-learn matplotlib
我们继续使用经典的Iris数据集来演示PPCA的应用。
from sklearn.datasets import load_iris
# 加载Iris数据集
iris = load_iris()
X = iris.data # 特征数据
y = iris.target # 标签
与PCA一样,PPCA对不同量纲的特征也比较敏感,因此我们需要对数据进行标准化处理。
from sklearn.preprocessing import StandardScaler
# 标准化数据
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
使用 FactorAnalysis 来进行PPCA,并将数据降维到2个维度:
from sklearn.decomposition import FactorAnalysis
# 执行PPCA,降到2个主成分
ppca = FactorAnalysis(n_components=2)
X_ppca = ppca.fit_transform(X_scaled)
接下来,我们将降维后的结果进行可视化,以便直观展示PPCA的效果。
import matplotlib.pyplot as plt
# 可视化PPCA的结果
plt.figure(figsize=(8, 6))
plt.scatter(X_ppca[:, 0], X_ppca[:, 1], c=y, cmap='viridis', edgecolor='k', s=150)
plt.title('PPCA on Iris Dataset')
plt.xlabel('First Principal Component')
plt.ylabel('Second Principal Component')
plt.grid(True)
plt.colorbar()
plt.show()
通过以上代码,我们将PPCA降维后的数据绘制成散点图,展示出不同类别的数据在二维空间中的分布情况。
通过PPCA,我们将高维数据降到了二维,同时保留了主要的信息。由于PPCA引入了高斯噪声的建模,它比PCA更适合处理噪声数据。通过降维后的结果,我们依然可以明显看到不同类别的鸢尾花在二维空间中的分布差异。
概率主成分分析(PPCA)通过引入概率模型,使得我们能够处理带有噪声或部分缺失的数据。与传统的PCA相比,PPCA提供了更灵活的生成模型,并且对数据进行了明确的概率建模。通过PPCA,我们不仅可以进行数据降维,还能够在数据噪声较大或存在缺失值的情况下,依然得到合理的降维结果。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import FactorAnalysis
from sklearn.datasets import load_iris
# 加载Iris数据集
iris = load_iris()
X = iris.data
y = iris.target
# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 执行PPCA,选择前两个主成分
ppca = FactorAnalysis(n_components=2)
X_ppca = ppca.fit_transform(X_scaled)
# 可视化PPCA的结果
plt.figure(figsize=(8, 6))
plt.scatter(X_ppca[:, 0], X_ppca[:, 1], c=y, cmap='viridis', edgecolor='k', s=150)
plt.title('PPCA on Iris Dataset')
plt.xlabel('First Principal Component')
plt.ylabel('Second Principal Component')
plt.grid(True)
plt.colorbar()
plt.show()
- "【机器学习】Probabilistic PCA: An Introduction and Tutorial"Link
- "主成分分析(PCA),概率主成分分析(PPCA)和因子分析(FA)的区别"Link
- Iris Dataset: UCI Machine Learning Repository - Iris Data
- Scikit-learn PCA Documentation: scikit-learn PCA