Python中PCA如何设置使的每个点都有标签,同时带有置信椭圆
时间: 2024-02-25 19:57:40 浏览: 104
在Python中,使用PCA对数据进行降维后,可以使用matplotlib库将降维后的数据可视化展示,并且为每个数据点添加标签,同时带有置信椭圆。可以通过以下步骤实现:
1. 首先,进行PCA降维时需要将原始数据集和对应的标签一起传递给PCA模型进行训练,以便在降维后能够将标签信息保留下来。
2. 在降维后,可以将降维后的数据集和对应的标签一起传递给matplotlib库中的scatter函数,绘制二维散点图。在scatter函数中,可以设置参数c来指定每个数据点的颜色,参数s来指定每个数据点的大小,参数label来指定每个数据点的标签。
3. 然后,可以使用scipy库中的stats模块,根据降维后的数据集计算出置信椭圆的参数,并使用matplotlib库中的Ellipse函数绘制置信椭圆。在Ellipse函数中,可以设置参数edgecolor和facecolor来指定椭圆的边框颜色和填充颜色,参数alpha来指定椭圆的透明度。
例如:
```python
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
import numpy as np
from scipy.stats import chi2
from matplotlib.patches import Ellipse
# 生成样本数据
X = np.random.randn(100, 2)
y = np.random.randint(0, 2, 100)
# 进行PCA降维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 绘制散点图和置信椭圆
fig, ax = plt.subplots()
ax.scatter(X_pca[:, 0], X_pca[:, 1], c=y, s=50, alpha=0.5, label=['class0', 'class1'])
for i in range(2):
# 计算置信椭圆的参数
cov = np.cov(X_pca[y==i].T)
eig_vals, eig_vecs = np.linalg.eig(cov)
theta = np.rad2deg(np.arctan2(*eig_vecs[:,0][::-1]))
w, h = 2 * np.sqrt(chi2.ppf(0.95, 2)) * np.sqrt(eig_vals)
# 绘制置信椭圆
ellipse = Ellipse(xy=np.mean(X_pca[y==i], axis=0), width=w, height=h, angle=theta, edgecolor='black', facecolor='none')
ax.add_patch(ellipse)
plt.legend(loc='best')
plt.show()
```
上述代码中,首先生成了一个包含100个样本的二维数据集X和对应的标签y。然后使用PCA对X进行降维,得到二维的降维数据集X_pca。接着,使用matplotlib的scatter函数绘制散点图,其中参数c被设置为y,表示每个数据点的颜色由对应的标签决定,参数s被设置为50,表示每个数据点的大小为50,参数alpha被设置为0.5,表示每个数据点的透明度为0.5。然后,使用scipy库中的stats模块根据降维后的数据集计算出置信椭圆的参数,其中chi2.ppf(0.95, 2)表示置信度为95%的卡方分布的上分位数,eig_vals和eig_vecs分别表示协方差矩阵的特征值和特征向量。最后,使用matplotlib库中的Ellipse函数绘制置信椭圆,并使用add_patch函数将椭圆添加到图中。
阅读全文