PCA二维图 波谱样式 代码
时间: 2023-06-15 20:03:09 浏览: 127
以下是用Python中的NumPy和Matplotlib库实现PCA二维图波谱样式的代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 构造数据
x = np.linspace(-5, 5, 100)
y1 = np.sin(x)
y2 = np.cos(x)
data = np.vstack((y1, y2)).T
# 进行PCA降维
cov_mat = np.cov(data.T) # 协方差矩阵
eig_vals, eig_vecs = np.linalg.eig(cov_mat) # 特征值和特征向量
sorted_indices = np.argsort(eig_vals)[::-1] # 排序后的索引
topk_eig_vecs = eig_vecs[:, sorted_indices[:2]] # 取前两个特征向量
new_data = np.dot(data, topk_eig_vecs) # 降维后的数据
# 绘制二维图
plt.figure(figsize=(8, 6))
plt.scatter(new_data[:, 0], new_data[:, 1], c=x, cmap='jet')
plt.colorbar()
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.title('PCA 2D plot with spectral style')
plt.show()
```
代码解释:
1. 首先构造一个包含两个正弦波和余弦波的数据集;
2. 使用`np.cov`函数计算数据集的协方差矩阵;
3. 使用`np.linalg.eig`函数计算协方差矩阵的特征值和特征向量,并对特征值进行排序;
4. 取排序后的前两个特征向量,将数据集投影到这两个特征向量上得到降维后的数据;
5. 使用`plt.scatter`函数绘制二维散点图,其中颜色映射为原始数据的$x$值,使得图形具有波谱样式。
注意:该代码中的数据集是人为构造的,实际应用时需要根据具体情况进行调整。
阅读全文