0
votes

Problèmes de diffusion dans NUMPY

J'essaie d'adapter la PCA sur les données de train et de test.

ValueError: operands could not be broadcast together with shapes (395,219) (30,)


3 commentaires

Utilisez-vous Ipython, Jupyter Notebook ou quelque chose qui préserve l'état de la variable?


Vous écrasez vos données d'entraînement d'origine avec des valeurs transformées. C'est loin de la bonne pratique. Istead fait quelque chose comme x_trans = pca.fit_transfor (x_train) .


De cette façon, vous contournerez le problème que vous avez posté ici.


3 Réponses :


0
votes

Ce n'est pas vraiment une réponse. Mais pour vous aider à comprendre le scénario, je pose cela!

import numpy as np
from sklearn.decomposition import PCA
X = np.random.randn(2735, 219)
pca = PCA(n_components=30)
pca.fit(X)

test_values = np.random.randn(395 , 219)

pca.transform(test_values)


0 commentaires

0
votes

J'ai essayé de reproduire votre exemple, et tout fonctionne bien: xxx

Les sorties de code: xxx

Vérifiez que l'erreur apparaît. sur la ligne avec PCA. On dirait que vous faites une certaine opération avec les matrices de forme erronée.


1 commentaires

C'est parce que la ligne x_train = pca.fit_transform (x_train). Il a écrasé ses données d'entraînement originales avec les valeurs de transformation et a recyclé la PCA.



0
votes

Mon pari est qu'il s'agit d'un problème de variable préservé si vous utilisez ipython, ordinateur portable ou quelque chose comme ça. Si ce n'est pas le cas, vous pouvez ignorer cette réponse.

Considérez les cellules suivantes.

 Entrez la description de l'image ici

Quand j'exécute ces cellules, tout va bien. Cependant, si j'essaie d'exécuter une deuxième cellule à nouveau, j'ai reçu cette erreur:

ValueError: Les opérandes n'ont pas pu être diffusés avec des formes (395.219) (30,)

C'est parce que X_TRAIN est maintenant un 2735, 30 Matrix et PCA est monté sur cette matrice afin qu'il s'attend à N, 30 Matrix.

Si vous effacez vos variables ou réorganisez votre code de telle sorte qu'il ne correspond pas aux données déjà transformées, le problème peut être résolu.


1 commentaires

C'est exactement ce qui se passait!