Python中PCA如何设置使的每个点都有标签值,同时带有置信椭圆,两者都有颜色
时间: 2024-02-25 18:58:15 浏览: 157
要在Python中使用PCA对数据进行降维,并在降维后的数据上绘制带有标签和椭圆的散点图,可以按照以下步骤进行:
1. 使用sklearn库中的PCA模型对数据进行降维,得到降维后的数据点坐标。
2. 将降维后的数据点坐标和对应的标签存储在一个DataFrame中。
3. 对每个标签,计算其对应数据点的协方差矩阵,并求出置信椭圆的长轴、短轴和旋转角度。
4. 使用matplotlib库中的scatter函数绘制散点图,其中每个点的颜色根据其标签值确定,每个点的大小根据置信椭圆的长短轴比例确定,每个点的形状根据标签值和椭圆的旋转角度确定。
5. (可选)在散点图中添加图例、坐标轴标签等元素,使图像更加清晰明了。
下面是一份示例代码,其中假设数据已经被分成了3个类别(标签为0, 1, 2):
```python
import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
# 假设原始数据存储在一个二维数组X中,每行代表一个数据点,每列代表一个特征
# 假设标签已经存储在一个一维数组label中,其中每个元素表示对应数据点的类别
# 使用PCA对数据进行降维,得到降维后的数据点坐标(假设降到2维)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 将降维后的数据点坐标和对应的标签存储在一个DataFrame中
df = pd.DataFrame({'x': X_pca[:, 0], 'y': X_pca[:, 1], 'label': label})
# 对每个标签,计算其对应数据点的协方差矩阵,并求出置信椭圆的长轴、短轴和旋转角度
ellipses = {}
for label_value in set(label):
data = X_pca[label == label_value, :]
cov_matrix = np.cov(data.T)
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)
major_axis = 3 * np.sqrt(eigenvalues[0])
minor_axis = 3 * np.sqrt(eigenvalues[1])
angle = np.arctan2(eigenvectors[1, 0], eigenvectors[0, 0]) * 180 / np.pi
ellipses[label_value] = (major_axis, minor_axis, angle)
# 使用scatter函数绘制散点图
fig, ax = plt.subplots()
for label_value, group in df.groupby('label'):
major_axis, minor_axis, angle = ellipses[label_value]
ax.scatter(group['x'], group['y'], s=major_axis/minor_axis, c=label_value,
marker=Ellipse((0, 0), major_axis, minor_axis, angle), alpha=0.7)
# 添加图例和坐标轴标签
ax.legend(set(label))
ax.set_xlabel('PCA Component 1')
ax.set_ylabel('PCA Component 2')
# 显示图像
plt.show()
```
上述代码中,`ellipses`字典存储了每个标签对应的置信椭圆信息,`marker`参数用于指定每个点的形状,`alpha`参数用于调整点的透明度。你可以根据需要修改这些参数以达到自己的效果。
阅读全文