AttributeError: 'numpy.ndarray' objet n'a pas d'attribut "toarray'

Je suis l'extraction de caractéristiques d'un corpus de textes, et je suis en utilisant un td-fidf vectorizer et tronquée de la décomposition en valeurs singulières de scikit-learn pour y parvenir. Cependant, puisque l'algorithme que je veux essayer nécessite des matrices denses et les vectorizer retourne matrices creuses j'ai besoin de convertir ces matrices de réseaux denses. Mais, à chaque fois que j'essaie de convertir ces tableaux, j'obtiens une erreur me disant que mon tableau numpy objet n'a pas d'attribut "toarray". Ce que je fais mal?

La fonction:

def feature_extraction(train,train_test,test_set):
    vectorizer = TfidfVectorizer(min_df = 3,strip_accents = "unicode",analyzer = "word",token_pattern = r'\w{1,}',ngram_range = (1,2))        

    print("fitting Vectorizer")
    vectorizer.fit(train)

    print("transforming text")
    train = vectorizer.transform(train)
    train_test = vectorizer.transform(train_test)
    test_set = vectorizer.transform(test_set)

    print("Dimensionality reduction")
    svd = TruncatedSVD(n_components = 100)
    svd.fit(train)
    train = svd.transform(train)
    train_test = svd.transform(train_test)
    test_set = svd.transform(test_set)

    print("convert to dense array")
    train = train.toarray()
    test_set = test_set.toarray()
    train_test = train_test.toarray()

    print(train.shape)
    return train,train_test,test_set

traceback:

Traceback (most recent call last):
  File "C:\Users\Anonymous\workspace\final_submission\src\linearSVM.py", line 24, in <module>
    x_train,x_test,test_set = feature_extraction(x_train,x_test,test_set)
  File "C:\Users\Anonymous\workspace\final_submission\src\Preprocessing.py", line 57, in feature_extraction
    train = train.toarray()
AttributeError: 'numpy.ndarray' object has no attribute 'toarray'

Mise à jour:
Willy a souligné que mon hypothèse de la matrice étant éparses peut être faux. J'ai donc essayé de nourrir mes données sur mon algorithme de réduction de dimensionnalité et elle a effectivement travaillé, sans aucune conversion, cependant lorsque je l'ai exclu de réduction de dimensionnalité, qui m'a donné environ 53k fonctionnalités que j'obtiens l'erreur suivante:

    Traceback (most recent call last):
  File "C:\Users\Anonymous\workspace\final_submission\src\linearSVM.py", line 28, in <module>
    result = bayesian_ridge(x_train,x_test,y_train,y_test,test_set)
  File "C:\Users\Anonymous\workspace\final_submission\src\Algorithms.py", line 84, in bayesian_ridge
    algo = algo.fit(x_train,y_train[:,i])
  File "C:\Python27\lib\site-packages\sklearn\linear_model\bayes.py", line 136, in fit
    dtype=np.float)
  File "C:\Python27\lib\site-packages\sklearn\utils\validation.py", line 220, in check_arrays
    raise TypeError('A sparse matrix was passed, but dense '
TypeError: A sparse matrix was passed, but dense data is required. Use X.toarray() to convert to a dense numpy array.

Quelqu'un peut-il m'expliquer cela?

Update2

Comme demandé, je vais vous donner tout le code impliqués. Depuis, elle est diffusée sur les différents fichiers que je vais poster dans les étapes. Pour plus de clarté, je vais laisser tout le module importations.

C'est comment je prétraiter mon code:

def regexp(data):
    for row in range(len(data)):
        data[row] = re.sub(r'[\W_]+'," ",data[row])
        return data

def clean_the_text(data):
    alist = []
    data = nltk.word_tokenize(data)
    for j in data:
        j = j.lower()
        alist.append(j.rstrip('\n'))
    alist = " ".join(alist)
    return alist
def loop_data(data):
    for i in range(len(data)):
        data[i] = clean_the_text(data[i])
    return data  


if __name__ == "__main__":
    print("loading train")
    train_text = porter_stemmer(loop_data(regexp(list(np.array(p.read_csv(os.path.join(dir,"train.csv")))[:,1]))))
    print("loading test_set")
    test_set = porter_stemmer(loop_data(regexp(list(np.array(p.read_csv(os.path.join(dir,"test.csv")))[:,1]))))

Après la séparation de mes train_set dans un x_train et un x_test pour cross_validation je transforme mes données à l'aide de la feature_extraction fonction ci-dessus.

x_train,x_test,test_set = feature_extraction(x_train,x_test,test_set)

Enfin je les nourris dans mon algorithme

def bayesian_ridge(x_train,x_test,y_train,y_test,test_set):
    algo = linear_model.BayesianRidge()
    algo = algo.fit(x_train,y_train)
    pred = algo.predict(x_test)
    error = pred - y_test
    result.append(algo.predict(test_set))
    print("Bayes_error: ",cross_val(error))
    return result
Si train est déjà un ndarray, votre hypothèse quant à elle de retour d'une matrice creuse est incorrect.
Vous avez peut-être raison, permettez-moi de vérifier.
Il a vérifié. Allons ajouter une modification à ma question maintenant.
vous devez inclure tous le code, pas seulement aux messages. ndarray est dense, par définition, les matrices creuses sont représentés dans différents objets, il est donc plutôt une erreur dans votre code (que vous n'avez pas à les joindre)
Ok, je vais ajouter tout le code impliqués.

OriginalL'auteur Learner | 2013-11-22