Python 属性错误:';numpy.ndarray和#x27;对象没有属性';toarray';

Python 属性错误:';numpy.ndarray和#x27;对象没有属性';toarray';,python,numpy,machine-learning,scikit-learn,Python,Numpy,Machine Learning,Scikit Learn,我正在从文本语料库中提取特征,我正在使用td fidf矢量器和scikit learn中的截断奇异值分解来实现这一点。但是,由于我要尝试的算法需要密集矩阵,并且矢量器返回稀疏矩阵,因此我需要将这些矩阵转换为密集数组。但是,每当我尝试转换这些数组时,我都会得到一个错误,告诉我numpy数组对象没有atribute“toarray”。我做错了什么 功能: def feature_extraction(train,train_test,test_set): vectorizer = Tfidf

我正在从文本语料库中提取特征,我正在使用td fidf矢量器和scikit learn中的截断奇异值分解来实现这一点。但是,由于我要尝试的算法需要密集矩阵,并且矢量器返回稀疏矩阵,因此我需要将这些矩阵转换为密集数组。但是,每当我尝试转换这些数组时,我都会得到一个错误,告诉我numpy数组对象没有atribute“toarray”。我做错了什么

功能:

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 (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'
回溯:

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 (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'
在将我的序列集拆分为x序列和x测试以进行交叉验证后,我使用上面的特征提取功能转换数据

x_train,x_test,test_set = feature_extraction(x_train,x_test,test_set)
最后,我将它们输入到我的算法中

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

TruncatedSVD.transform
返回数组,而不是稀疏矩阵。事实上,在当前版本的scikit learn中,只有向量器返回稀疏矩阵。

如果
train
已经是一个数组,那么您关于它返回稀疏矩阵的假设是不正确的。您可能是对的,让我检查一下。检查过了。现在要为我的问题添加编辑。您应该包括所有代码,而不仅仅是消息
ndarray
根据定义是稠密的,稀疏矩阵在不同的对象中表示,因此您的代码中有一个错误(您没有附加该错误)。好的,我将添加所有涉及的代码。@Learner:该方法的示例中有。