我有一个我读过的数据集,并将其标准化为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()
这导致一个图表中有大量数据混杂在一起并最终将多个矢量(红线)绘制为点。我不确定我在这里做错了什么。有什么想法吗?