Я извлекаю функции из текстового тела, и я использую векторный указатель td-fidf и усеченную декомпозицию особых значений из scikit-learn, чтобы достичь этого , Однако, поскольку алгоритм, который я хочу попробовать, требует плотных матриц, и векторный анализатор возвращает разреженные матрицы. Мне нужно преобразовать эти матрицы в плотные массивы. Но всякий раз, когда я пытаюсь преобразовать эти массивы, я получаю сообщение об ошибке, указывающее, что у моего объекта массива numpy нет атрибута «toarray». Что я делаю не так?AttributeError: объект 'numpy.ndarray' не имеет атрибута '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'
Update: Вилли указал, что мое предположение матрицы, скудно может быть неправильным. Так что я пытался кормить свои данные для моего алгоритма с уменьшением размерности и он фактически работал без какого-либо преобразования, однако, когда я исключил снижение размерности, который дал мне около 53k функции я получаю следующее сообщение об ошибке:
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.
Может кто-то объяснить это ?
Update2
В соответствии с просьбой, я дам весь код участие. Поскольку он разбросан по разным файлам, я просто отправлю его поэтапно. Для ясности я оставлю все модули.
Это, как я препроцессировать мой код:
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]))))
После разделения мой train_set в x_train и x_test для cross_validation я трансформировать свои данные с помощью функции feature_extraction выше.
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
Если 'train' уже является ndarray, то ваше предположение о его возврате разреженной матрицы неверно. – willy
Возможно, вы правы, позвольте мне проверить это. – Learner
Проверено. Теперь вы можете добавить редактирование на мой вопрос. – Learner