机器学习入门--主成分分析原理与实践
PCA(Principal Component Analysis)是一种常用的降维方法,其基本原理是通过找到数据投影后具有最大方差的新坐标系来实现降维。具体步骤包括:去中心化数据、计算协方差矩阵、特征值分解、选择主成分和投影。数学推导部分给出了每个步骤的详细公式和解释。代码实现部分展示了如何使用Python中的sklearn库进行PCA降维,并通过可视化结果展示了降维效果。
主成分分析
主成分分析(Principal Component Analysis,简称PCA)是一种常用的降维技术和数据分析方法。它通过线性变换将原始高维数据映射到低维空间,从而提取出数据中最重要的特征。
主成分分析的基本原理与数学推导
基本原理
PCA的主要思想是找到一个新的坐标系,将数据投影到这个坐标系上,使得投影后的数据具有最大的方差。这意味着在新的坐标系下,数据的信息尽可能地集中在少数几个维度上,而其他维度的方差较小,可以被忽略。
具体步骤如下:
- 对原始数据进行去中心化,使得数据的均值为0。
- 计算数据的协方差矩阵。
- 对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。
- 根据特征值的大小,选择前k个特征向量作为主成分,其中k是降维后的维度。
- 将原始数据投影到选定的主成分上,得到降维后的数据。
数学推导
设原始数据矩阵为X∈Rm×nX \in R^{m \times n}X∈Rm×n,其中mmm为样本数,nnn为特征数。我们的目标是将数据降低到kkk维。
1.1.1. 去中心化
对原始数据矩阵XXX进行去中心化,即将每个特征减去其均值,得到去中心化矩阵ZZZ:
Z=X−1m∑i=1mXi Z = X - \frac{1}{m} \sum_{i=1}^{m} X_i Z=X−m1i=1∑mXi
其中,XiX_iXi表示第iii个样本。
2.2.2. 协方差矩阵
计算去中心化矩阵ZZZ的协方差矩阵CCC,其中:
C=1mZTZ C = \frac{1}{m} Z^T Z C=m1ZTZ
协方差矩阵CCC的各个元素为:
C1,1=1m∑i=1m(zi,1−zˉ1)2C1,2=1m∑i=1m(zi,1−zˉ1)(zi,2−zˉ2)⋯Ci,j=1m∑i=1m(zi,i−zˉi)(zi,j−zˉj)⋯Cn,n=1m∑i=1m(zi,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
其中,zi,jz_{i,j}zi,j表示去中心化矩阵ZZZ中第iii个样本的第jjj个特征,zˉj\bar z_jzˉj是所有样本的第jjj个特征的均值。
3.3.3. 特征值分解
对协方差矩阵CCC进行特征值分解,得到特征值λ1,λ2,⋯ ,λn\lambda_1,\lambda_2,\cdots,\lambda_nλ1,λ2,⋯,λn和对应的特征向量v1,v2,⋯ ,vnv_1,v_2,\cdots,v_nv1,v2,⋯,vn。
Cvi=λivi,i=1,2,⋯ ,n Cv_i = \lambda_i v_i, i=1,2,\cdots,n Cvi=λivi,i=1,2,⋯,n
由于协方差矩阵CCC是实对称矩阵,所以其特征向量v1,v2,⋯ ,vnv_1,v_2,\cdots,v_nv1,v2,⋯,vn是正交的单位向量。
4.4.4. 选择主成分
根据特征值的大小,选择前kkk个特征向量,构成投影矩阵P=[v1,v2,⋯ ,vk]P = [v_1, v_2, \cdots, v_k]P=[v1,v2,⋯,vk],其中viv_ivi为第iii个特征向量。这kkk个特征向量就是数据中最重要的kkk个特征,也称为主成分。
5.5.5. 投影
将去中心化矩阵ZZZ投影到选定的主成分上,得到降维后的数据矩阵YYY:
Y=ZP Y = ZP Y=ZP
其中,Y∈Rm×kY \in R^{m \times k}Y∈Rm×k,P∈Rn×kP \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是一种简单有效的降维方法,可以在保留主要特征的情况下减少数据的维度,从而提高机器学习算法的效率。

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)