我有一个我已经读入并规范化的数据集叫做normX
。我使用以下块设置PCA:
pca = PCA(n_components=None)
pca.fit_transform(normX)
pca.copy = True
pca.whiten = False
pca.iterated_power = 'auto'
pca.svd_solver = 'auto'
pca.random_state = None
# Calculate loading matrix
loadM = pca.components_.T * np.sqrt(pca.explained_variance_)
# Extracting loading vectors
loadV1 = loadM[:,0]
loadV2 = loadM[:,1]
loadV3 = loadM[:,2]
我现在尝试将原始数据转换成主成分空间,然后在loadV1-loadV2
、loadV1-loadV3
和loadV2-loadV3
空间中绘制转换后的数据,这样我就可以讨论绘图的结果。我的第一步代码loadV1-loadV2
如下所示,但它只会导致单个绘图上的数据混乱:
xvec= pca.components_[0]
yvec = pca.components_[1]
loadV1-loadV2 = np.dot(loadV1,loadV2)
xs = pca.transform(normX)[:,0]
ys = pca.transform(normX)[:,1]
for i in range(len(xvec)):
plt.arrow(0, 0, xvec[i]*max(xs), yvec[i]*max(ys), color='r', width=0.0005, head_width=0.0025)
plt.text(xvec[i]*max(xs)*1.2, yvec[i]*max(ys)*1.2, loadV1-loadV2, color='r')
for i in range(len(xs)):
plt.plot(xs[i], ys[i], 'bo')
plt.text(xs[i]*1.2, ys[i]*1.2, loadV1-loadV2, color='b')
plt.show()
这将导致一个包含大量数据的绘图混乱在一起,并最终将多个向量(红线)绘制为点。我不知道我做错了什么。有什么想法吗?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐