Возникает ошибка памяти в коде программы байесовского классификатора:
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:
Знаю, что нужно составлять массив по частям, но не знаю, как.