【机器学习】主成分分析法求数据前n个主成分
一、摘要
本文详细讲解了主成分分析法的原理及应用,包括如何通过梯度上升法求出一组数据的前n个主成分。介绍了主成分分析法如何从一个坐标系转换到另一个坐标系,通过逐步去除数据在已有主成分上的分量,求出新的主成分。具体涉及二维数据到高维数据的处理,以及如何通过编程实现主成分分析。最后,阐述了主成分分析法在降维方面的应用,并强调了该方法在数据处理和分析中的重要性。
二、主成分分析法的概述
- 主成分分析法用于求出一组数据的第一主成分,即一个坐标轴方向,使得样本点在该轴上的方差最大。
- 第一主成分将样本点映射到该轴上,保留了样本点之间的最大方差。
- 对于N维数据,主成分分析法会重新排列n个轴,使得第一个轴保持最大的方差,第二个轴次之,依此类推。
三、求下一个主成分的方法
- 求出第一主成分后,可以通过将数据在第一主成分上的分量去掉,然后求出下一个主成分。
- 通过将样本点减去其在第一主成分上的投影,得到新的数据样本。
- 在新数据样本上重新求第一主成分,即可得到原来的数据的第二个主成分。
- 具体公式如下所示:

解释该图片的含义:


这是主成分分析中 “剔除第一主成分分量” 的操作示意图,核心逻辑如下:- 主成分方向:向量 w 代表第一个主成分(方差最大的方向),是数据分布最显著的特征方向。
- 投影计算:

- 剔除主成分:

四、编程实现主成分分析法
-
加载库和虚拟测试数据,对原始数据进行预处理。
- 导入库:
import numpy as np import matplotlib.pyplot as plt - 生成模拟数据:
创建一个形状为 (100, 2) 的空数组 X,表示 100 个二维数据点。X = np.empty((100, 2)) X[:,0] = np.random.uniform(0., 100., size=100) X[:,1] = 0.75 * X[:,0] + 3. + np.random.normal(0, 10., size=100)
X[:,0]:第一列数据服从 [0, 100) 的均匀分布,模拟第一个特征。
X[:,1]:第二列数据基于第一列的线性关系(0.75 * X[:,0] + 3),并添加均值为 0、标准差为 10 的正态分布噪声,模拟第二个特征与第一个特征的相关性。 - 定义去均值函数并处理数据:
demean 函数:通过减去每列的均值(np.mean(X, axis=0)),对数据进行中心化(去均值),这是主成分分析(PCA)的预处理步骤,确保数据围绕原点分布,便于后续计算主成分。def demean(X): return X - np.mean(X, axis=0) X = demean(X)
X = demean(X):对生成的原始数据 X 应用去均值处理。 - 可视化数据:
plt.scatter
- 导入库:


2629

被折叠的 条评论
为什么被折叠?



