有如下一组四维数据(每一行为一个样本,每一列为一个维度),完成三个任务 1.推导PCA变换:求解变换矩阵 2.编程体验PCA变换 3.给出保留1-3个主成分的可视化效果 [[0 1 1 1] [2 2 2 2] [3 0 3 3] [1 4 2 4] [4 3 2 5]]
时间: 2024-10-10 20:05:40 浏览: 21
3月24日直播《一节课掌握机器学习经典算法-支持向量机》.pdf
首先,PCA(Principal Component Analysis,主成分分析)是一种常用的数据降维技术,通过线性变换将原始高维数据转换到新的坐标系中,新坐标系的方向由数据的主要变化趋势(方差最大的方向)确定。
1. 推导PCA变换矩阵:PCA的目标是找到一个正交的新坐标系(即旋转后的坐标轴),使得新数据在每个方向上都有最大的方差。对于给定的样本集,可以按照以下步骤计算:
- 计算样本均值,然后对每个样本减去均值,得到中心化数据。
- 计算协方差矩阵。
- 对协方差矩阵做特征值分解,得到特征值和对应的单位特征向量(即旋转后的坐标轴)。
- 特征值按大小排序,选择前k个(这里k=1-3),对应的特征向量就是PCA变换矩阵的列。
2. 编程体验PCA变换:在Python中,我们可以使用sklearn库来实现PCA。示例代码如下:
```python
from sklearn.decomposition import PCA
import numpy as np
data = np.array([[0, 1, 1, 1], [2, 2, 2, 2], [3, 0, 3, 3], [1, 4, 2, 4], [4, 3, 2, 5]])
data_centered = data - data.mean(axis=0) # 中心化数据
pca = PCA(n_components=3) # 保留3个主成分
transformed_data = pca.fit_transform(data_centered)
# 变换矩阵就是PCA对象的.components_属性
rotation_matrix = pca.components_
```
3. 可视化效果:使用matplotlib或seaborn库,我们可以将投影到前3个主成分后的数据点绘制出来。由于我们这里是二维空间的可视化,需要选择一个主成分作为y轴,另一个作为x轴,比如取前两个主成分:
```python
import matplotlib.pyplot as plt
plt.scatter(transformed_data[:, 0], transformed_data[:, 1])
for i in range(len(data)):
plt.text(transformed_data[i, 0], transformed_data[i, 1], f"Sample {i+1}")
plt.xlabel("First Principal Component")
plt.ylabel("Second Principal Component")
plt.title("PCA Visualization with 1-3 Components")
plt.show()
```
阅读全文