Уведомления

Группа в Telegram: @pythonsu

#1 Май 6, 2019 21:14:51

profanyat
Зарегистрирован: 2019-05-06
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка памяти

Возникает ошибка памяти в коде программы байесовского классификатора:

 from sklearn.datasets import fetch_20newsgroups
from pprint import pprint
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import ComplementNB
from sklearn import metrics
import numpy as np
newsgroups_train = fetch_20newsgroups(subset = 'train', remove = ('headers', 'footers', 'quotes'))
newsgroups_test = fetch_20newsgroups(subset = 'test')
print("Число наблюдений в обучающей выборке\n", 
         newsgroups_train.filenames.shape)
print("Число наблюдений в тестовой выборке\n", 
         newsgroups_test.filenames.shape)
print("Список новостных рубрик\n")
pprint(list(newsgroups_train.target_names))
# Приведение данных к document-term матрице
vectorizer = CountVectorizer()
sparse_train = vectorizer.fit_transform(newsgroups_train.data)
sparse_test = vectorizer.transform(newsgroups_test.data)
dense_train = sparse_train.toarray()
dense_test = sparse_test.toarray()
# Размерность данных (в dense и sparse совпадает)
print("Размерность обучающей выборки\n", sparse_train.shape)
print("Размерность тестовой выборки\n", sparse_test.shape)
# Обучение модели и тестирование
clf = ComplementNB(alpha=1)
clf.fit(sparse_train, newsgroups_train.target)
pred = clf.predict(sparse_test)
# Точность классификации
print("Точность классификации – доля верно классифицированных объектов из тестовой выборки \n")
metrics.accuracy_score(newsgroups_test.target, pred, normalize=True)
# Теперь для dense матрицы
clf = ComplementNB(alpha=1)
clf.fit(dense_train, newsgroups_train.target)
pred = clf.predict(dense_test)
# Точность классификации
print("Точность классификации – доля верно классифицированных объектов из тестовой выборки \n")
metrics.accuracy_score(newsgroups_test.target, pred, normalize=True)

 MemoryError                               Traceback (most recent call last)
<ipython-input-6-df2d53e43d0f> in <module>
     24 sparse_test = vectorizer.transform(newsgroups_test.data)
     25 
---> 26 dense_train = sparse_train.toarray()
     27 dense_test = sparse_test.toarray()
     28 
C:\ProgramData\Anaconda3\lib\site-packages\scipy\sparse\compressed.py in toarray(self, order, out)
    945         if out is None and order is None:
    946             order = self._swap('cf')[0]
--> 947         out = self._process_toarray_args(order, out)
    948         if not (out.flags.c_contiguous or out.flags.f_contiguous):
    949             raise ValueError('Output array must be C or F contiguous')
C:\ProgramData\Anaconda3\lib\site-packages\scipy\sparse\base.py in _process_toarray_args(self, order, out)
   1182             return out
   1183         else:
-> 1184             return np.zeros(self.shape, dtype=self.dtype, order=order)
   1185 
   1186 
MemoryError: 
Знаю, что нужно составлять массив по частям, но не знаю, как.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version