很多人在遇到高维数据的时候都会头疼,不知道怎么把他们更好地画出来,要么就是选取几列来作图,但如何选择也成了一个问题。
PCA在降低维度的同时,使得数据变成更容易被画出来的低维数据。现在以sklearn中的iris数据为例。
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
pca = PCA(n_components=2)
X, y =load_iris(return_X_y=True)
X_pca = pca.fit_transform(X)
plt.plot(X_pca[y==0,0], X_pca[y==0,1],'bo',label='Setosa')
plt.plot(X_pca[y==1,0], X_pca[y==1,1],'g^',label='Versicoulor')
plt.plot(X_pca[y==2,0], X_pca[y==2,1],'r*',label='Viriginica')
plt.legend(loc=0)
图像如下:
当然,也可以绘制成三维图形,只需把n_components改成3
pca = PCA(n_components=3)
X, y =load_iris(return_X_y=True)
X_pca = pca.fit_transform(X)
from mpl_toolkits.mplot3d import Axes3D
fig=plt.figure(figsize=(10,10))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X_pca[y==0,0], X_pca[y==0,1],X_pca[y==0,2],c='b',label='Setosa')
ax.scatter(X_pca[y==1,0], X_pca[y==1,1],X_pca[y==1,2],c='g',label='Versicoulor')
ax.scatter(X_pca[y==2,0], X_pca[y==2,1],X_pca[y==2,2],c='r',label='Viriginica')
plt.legend(loc=0)