Pranav Waila
Pranav Waila

Reputation: 385

Value error while generating indexes using PCA in scikit-learn

Using the following function i am trying to generate index from the data:

Function:

import numpy as np
from sklearn.decomposition import PCA   

def pca_index(data,components=1,indx=1):
    corrs = np.asarray(data.cov())
    pca   = PCA(n_components = components).fit(corrs)
    trns = pca.transform(data)
    index=np.dot(trns[0:indx],pca.explained_variance_ratio_[0:indx])
    return index

Index: generation from principal components

index = pca_index(data=mydata,components=3,indx=2)

Following error is being generated when i am calling the function:

Traceback (most recent call last):

File "<ipython-input-411-35115ef28e61>", line 1, in <module>
index = pca_index(data=mydata,components=3,indx=2)

File "<ipython-input-410-49c0174a047a>", line 15, in pca_index
index=np.dot(trns[0:indx],pca.explained_variance_ratio_[0:indx])

ValueError: shapes (2,3) and (2,) not aligned: 3 (dim 1) != 2 (dim 0)

Can anyone help with the error.

According to my understanding there is some error at the following point when i am passing the subscript indices as variable (indx):

trns[0:indx],pca.explained_variance_ratio_[0:**indx**]

Upvotes: 0

Views: 519

Answers (1)

Roman Kh
Roman Kh

Reputation: 2735

In np.dot you are trying to multiply a matrix having dimensions (2,3) with a matrix having dimensions (2,), i.e. a vector.

However, you can only multiply NxM to MxP, e.g. (3,2) to (2,1) or (2,3) to (3,1).

In your example the second matrix have dimensions of (2,) which, in numpy terms, is similar but not the same as (2,1). You can reshape a vector into a matrix with vector.reshape([2,1])

You might also transpose you first matrix, thus converting its dimensions from (2,3) to (3,2).

However, make sure that you multiply appropriate matrices as the result will differ from you might expect.

Upvotes: 1

Related Questions