Scipy hstack résultats dans “TypeError: aucune prise en charge pour la conversion de types: (dtype('float64'), dtype('O'))”
Je suis en train de lancer hstack à se joindre à une colonne de valeurs entières à une liste de colonnes créées par TF-IDF (donc je peux éventuellement utiliser l'ensemble de ces colonnes/fonctionnalités dans un classificateur).
Je suis en train de lire dans la colonne à l'aide de pandas, de la vérification de tout NA des valeurs et de leur conversion à la plus grande valeur dans le dataframe comme suit :
OtherColumn = p.read_csv('file.csv', delimiter=";", na_values=['?'])[["OtherColumn"]]
OtherColumn = OtherColumn.fillna(OtherColumn.max())
OtherColumn = OtherColumn.convert_objects(convert_numeric=True)
Puis, j'ai lu dans ma colonne de texte et d'exécuter TF-IDF pour créer des charges de fonctionnalités :
X = list(np.array(p.read_csv('file.csv', delimiter=";"))[:,2])
tfv = TfidfVectorizer(min_df=3, max_features=None, strip_accents='unicode',
analyzer='word',token_pattern=r'\w{1,}',ngram_range=(1, 2), use_idf=1,smooth_idf=1,sublinear_tf=1)
tfv.fit(X)
Enfin, je veux me joindre à eux tous ensemble, et c'est là notre erreur et impossible d'exécuter le programme, et aussi je suis pas si je suis en utilisant le StandardScaler de façon appropriée ici :
X = sp.sparse.hstack((X, OtherColumn.values)) #error here
sc = preprocessing.StandardScaler().fit(X)
X = sc.transform(X)
X_test = sc.transform(X_test)
Message d'erreur complet:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-13-79d1e70bc1bc> in <module>()
---> 47 X = sp.sparse.hstack((X, OtherColumn.values))
48 sc = preprocessing.StandardScaler().fit(X)
49 X = sc.transform(X)
C:\Users\Simon\Anaconda\lib\site-packages\scipy\sparse\construct.pyc in hstack(blocks, format, dtype)
421
422 """
--> 423 return bmat([blocks], format=format, dtype=dtype)
424
425
C:\Users\Simon\Anaconda\lib\site-packages\scipy\sparse\construct.pyc in bmat(blocks, format, dtype)
537 nnz = sum([A.nnz for A in blocks[block_mask]])
538 if dtype is None:
--> 539 dtype = upcast(*tuple([A.dtype for A in blocks[block_mask]]))
540
541 row_offsets = np.concatenate(([0], np.cumsum(brow_lengths)))
C:\Users\Simon\Anaconda\lib\site-packages\scipy\sparse\sputils.pyc in upcast(*args)
58 return t
59
---> 60 raise TypeError('no supported conversion for types: %r' % (args,))
61
62
TypeError: no supported conversion for types: (dtype('float64'), dtype('O'))
OriginalL'auteur Simon Kiely | 2014-03-08
Vous devez vous connecter pour publier un commentaire.
Tel que discuté dans Numpy hstack - "ValueError: tous les tableaux doivent avoir le même nombre de dimensions" -, mais ils ne vous beaucoup ont besoin de convertir explicitement les entrées de
sparse.hstack
. Lesparse
code n'est pas aussi robuste que la basenumpy
code.Si
X
est un tableau fragmenté avecdtype=float
, etA
est dense, avec desdtype=object
, plusieurs options sont possibles.A.astype(float)
de travailler siA
contient quelquesNaN
. Voir http://pandas.pydata.org/pandas-docs/stable/gotchas.html concernant NaN. SiA
est objet pour une autre raison (par exemple, en lambeaux listes), alors nous aurons à revenir sur la question.Une autre possibilité est d'utiliser les Pandas du
concat
. http://pandas.pydata.org/pandas-docs/stable/merging.html. Je suppose que les Pandas a payé plus d'attention à ces questions que lesparse
codeurs.OriginalL'auteur hpaulj