2017-04-03 2 views
1

J'ai un pd.DataFrame avec des variables explicatives: X et une autre trame avec des variables cibles y.python LDA scikit apprendre jette ValueError

type(X) 
Out[1]: pandas.core.frame.DataFrame 

X_num.shape 
Out[2]: (1213, 3298) 

et

type(y) 

Out[3]: pandas.core.frame.DataFrame 

y.shape 
Out[4]: (1213, 8) 

et je veux calculer un LDA en utilisant une seule colonne de y:

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA 
lda = LDA(n_components=2) 
    for col in y: 
     X_t = lda.fit(X.copy(), y[col].copy()) 

y a un nom de colonne

y[col].name 
Out[5]: u'myvarname' 

mais je toujours obtenir l'erreur

ValueError: Unknown label type: (array([ 0.001, 0.003 ... 

J'ai essayé aussi

X_t = lda.fit(X.copy(), y[col].values.copy()) 

et a obtenu la même erreur.

Selon l'ajustement de l'aide exige que Y

Y : array-like of response, shape = [n_samples, n_targets] 
Target vectors, where n_samples in the number of samples 
and n_targets is the number of response variables. 

quelqu'un une idée ce que je fait de mal?

Répondre

1

L'analyse discriminante linéaire est une technique de catégorisation. Selon votre erreur, vos Y valeurs impliquent une sorte de tableau de valeurs à virgule flottante:

array([ 0.001, 0.003 ... 

Et sklearn ne sait pas comment interpréter cela comme des étiquettes de catégorie. Êtes-vous sûr vous devriez utiliser LDA et pas une sorte de régression?

+0

génial, la conversion en chaîne l'a fait. Les valeurs y sont des catégories mais enregistrées comme des flottants, donc la classification est le bon outil. – horseshoe