主成分分析
主成分分析(Principal Component Analysis,简称PCA)是一种常用的降维技术和数据分析方法。它通过线性变换将原始高维数据映射到低维空间,从而提取出数据中最重要的特征。
主成分分析的基本原理与数学推导
基本原理
PCA的主要思想是找到一个新的坐标系,将数据投影到这个坐标系上,使得投影后的数据具有最大的方差。这意味着在新的坐标系下,数据的信息尽可能地集中在少数几个维度上,而其他维度的方差较小,可以被忽略。
具体步骤如下:
- 对原始数据进行去中心化,使得数据的均值为0。
- 计算数据的协方差矩阵。
- 对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。
- 根据特征值的大小,选择前k个特征向量作为主成分,其中k是降维后的维度。
- 将原始数据投影到选定的主成分上,得到降维后的数据。
数学推导
设原始数据矩阵为 X ∈ R m × n X \in R^{m \times n} X∈Rm×n,其中 m m m为样本数, n n n为特征数。我们的目标是将数据降低到 k k k维。
1. 1. 1. 去中心化
对原始数据矩阵 X X X进行去中心化,即将每个特征减去其均值,得到去中心化矩阵 Z Z Z:
Z = X − 1 m ∑ i = 1 m X i Z = X - \frac{1}{m} \sum_{i=1}^{m} X_i Z=X−m1i=1∑mXi
其中, X i X_i Xi表示第 i i i个样本。
2. 2. 2. 协方差矩阵
计算去中心化矩阵 Z Z Z的协方差矩阵 C C C,其中:
C = 1 m Z T Z C = \frac{1}{m} Z^T Z C=m1ZTZ
协方差矩阵 C C C的各个元素为:
C 1 , 1 = 1 m ∑ i = 1 m ( z i , 1 − z ˉ 1 ) 2 C 1 , 2 = 1 m ∑ i = 1 m ( z i , 1 − z ˉ 1 ) ( z i , 2 − z ˉ 2 ) ⋯ C i , j = 1 m ∑ i = 1 m ( z i , i − z ˉ i ) ( z i , j − z ˉ j ) ⋯ C n , n = 1 m ∑ i = 1 m ( z i , n − z ˉ n ) 2 \begin{aligned} C_{1,1} &= \frac{1}{m} \sum_{i=1}^{m} (z_{i,1}-\bar z_1)^2 \\ C_{1,2} &= \frac{1}{m} \sum_{i=1}^{m} (z_{i,1}-\bar z_1)(z_{i,2}-\bar z_2) \\ \cdots \\ C_{i,j} &= \frac{1}{m} \sum_{i=1}^{m} (z_{i,i}-\bar z_i)(z_{i,j}-\bar z_j) \\ \cdots \\ C_{n,n} &= \frac{1}{m} \sum_{i=1}^{m} (z_{i,n}-\bar z_n)^2 \end{aligned} C1,1C1,2⋯Ci,j⋯Cn,n=m1i=1∑m(zi,1−zˉ1)2=m1i=1∑m(zi,1−zˉ1)(zi,2−zˉ2)=m1i=1∑m(zi,i−zˉi)(zi,j−zˉj)=m1i=1∑m(zi,n−zˉn)2
其中, z i , j z_{i,j} zi,j表示去中心化矩阵 Z Z Z中第 i i i个样本的第 j j j个特征, z ˉ j \bar z_j zˉj是所有样本的第 j j j个特征的均值。
3. 3. 3. 特征值分解
对协方差矩阵 C C C进行特征值分解,得到特征值 λ 1 , λ 2 , ⋯ , λ n \lambda_1,\lambda_2,\cdots,\lambda_n λ1,λ2,⋯,λn和对应的特征向量 v 1 , v 2 , ⋯ , v n v_1,v_2,\cdots,v_n v1,v2,⋯,vn。
C v i = λ i v i , i = 1 , 2 , ⋯ , n Cv_i = \lambda_i v_i, i=1,2,\cdots,n Cvi=λivi,i=1,2,⋯,n
由于协方差矩阵 C C C是实对称矩阵,所以其特征向量 v 1 , v 2 , ⋯ , v n v_1,v_2,\cdots,v_n v1,v2,⋯,vn是正交的单位向量。
4. 4. 4. 选择主成分
根据特征值的大小,选择前 k k k个特征向量,构成投影矩阵 P = [ v 1 , v 2 , ⋯ , v k ] P = [v_1, v_2, \cdots, v_k] P=[v1,v2,⋯,vk],其中 v i v_i vi为第 i i i个特征向量。这 k k k个特征向量就是数据中最重要的 k k k个特征,也称为主成分。
5. 5. 5. 投影
将去中心化矩阵 Z Z Z投影到选定的主成分上,得到降维后的数据矩阵 Y Y Y:
Y = Z P Y = ZP Y=ZP
其中, Y ∈ R m × k Y \in R^{m \times k} Y∈Rm×k, P ∈ R n × k P \in R^{n \times k} P∈Rn×k。
代码实现
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
# 加载iris数据集
data = load_iris()
X = data.data
y = data.target
# 创建PCA对象,并设置降维后的维度为2
pca = PCA(n_components=2)
# 使用fit_transform方法进行降维
transformed_data = pca.fit_transform(X)
# 可视化降维结果
colors = ['navy', 'turquoise', 'darkorange']
# 设置线宽
lw = 2
for color, i, target_name in zip(colors, [0, 1, 2], data.target_names):
plt.scatter(transformed_data[y == i, 0], transformed_data[y == i, 1], color=color,
alpha=0.8, lw=lw,label=target_name)
plt.legend(loc='best', shadow=False, scatterpoints=1)
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('PCA of IRIS dataset')
plt.show()
上述代码首先加载了iris数据集,并将数据和标签分别存储在X和y变量中。然后,创建了一个PCA对象,并通过设置n_components参数为2,指定降维后的维度为2。接着,使用fit_transform方法对数据进行降维并得到降维后的结果transformed_data。最后,可视化降维结果,并使用不同颜色表示不同类别的数据点。运行代码后,会显示降维结果的散点图(如下图所示)。
总结
主成分分析(Principal Component Analysis,PCA)是一种常用的降维方法,可以用于减少数据的维度并提取出数据的主要特征。其基本原理是找到一个新的坐标系,将数据投影到这个坐标系上,使得投影后的数据具有最大的方差。具体步骤包括去中心化、计算协方差矩阵、进行特征值分解、选择主成分和投影。我们在实践的过程中可以使用sklearn中的PCA对象进行降维,并根据需要选择合适的降维后的维度。总之,PCA是一种简单有效的降维方法,可以在保留主要特征的情况下减少数据的维度,从而提高机器学习算法的效率。