ошибка памяти sklearn kneighbours python

Я работаю на Windows 7 8 ГБ ОЗУ.

Это векторизатор, который я использую для векторизации столбца произвольного текста в моем наборе обучающих данных объемом 52 МБ.

vec = CountVectorizer(analyzer='word',stop_words='english',decode_error='ignore',binary=True)

Я хочу рассчитать 5 ближайших соседей с этим набором данных для тестового набора 18 МБ.

nbrs = NearestNeighbors(n_neighbors=5).fit(vec.transform(data['clean_sum']))
vectors = vec.transform(data_test['clean_sum'])
distances,indices = nbrs.kneighbors(vectors)

Это трассировка стека -

Traceback (most recent call last):
  File "cr_nearness.py", line 224, in <module>
    distances,indices = nbrs.kneighbors(vectors)
  File "C:\Anaconda2\lib\site-packages\sklearn\neighbors\base.py", line 371,
kneighbors
    n_jobs=n_jobs, squared=True)
  File "C:\Anaconda2\lib\site-packages\sklearn\metrics\pairwise.py", line 12
in pairwise_distances
    return _parallel_pairwise(X, Y, func, n_jobs, **kwds)
  File "C:\Anaconda2\lib\site-packages\sklearn\metrics\pairwise.py", line 10
in _parallel_pairwise
    return func(X, Y, **kwds)
  File "C:\Anaconda2\lib\site-packages\sklearn\metrics\pairwise.py", line 23
n euclidean_distances
    distances = safe_sparse_dot(X, Y.T, dense_output=True)
  File "C:\Anaconda2\lib\site-packages\sklearn\utils\extmath.py", line 181,
afe_sparse_dot
    ret = ret.toarray()
  File "C:\Anaconda2\lib\site-packages\scipy\sparse\compressed.py", line 940
 toarray
    return self.tocoo(copy=False).toarray(order=order, out=out)
  File "C:\Anaconda2\lib\site-packages\scipy\sparse\coo.py", line 250, in to
y
    B = self._process_toarray_args(order, out)
  File "C:\Anaconda2\lib\site-packages\scipy\sparse\base.py", line 817, in _
ess_toarray_args
    return np.zeros(self.shape, dtype=self.dtype, order=order)
MemoryError

Любые идеи?


person Vivek Kalyanarangan    schedule 13.06.2016    source источник
comment
Вы используете 32-битный Python или 64-битный Python? Переход на 64-разрядную версию может решить эту проблему.   -  person probitaille    schedule 28.07.2017
comment
На самом деле я использую 64-битную версию...   -  person Vivek Kalyanarangan    schedule 29.07.2017
comment
Хм... если вы уменьшите количество соседей (n_neighbors), у вас будет та же проблема? На самом деле я делаю что-то подобное, но с гораздо большим количеством данных и с несколькими n_neighbors в цикле (например, от 1 до 9). У меня возникла ошибка памяти при использовании 32-разрядной версии Python, и я перешел на 64-разрядную версию Anaconda, и это решило мою проблему.   -  person probitaille    schedule 02.08.2017


Ответы (1)


Используйте KNN с KD TREE

модель = KNeighborsClassifier (n_neighbors = 5, алгоритм = 'kd_tree'). Подходит (X_train, Y_train)

модель по умолчанию: алгоритм='грубая'. brute false занимают слишком много памяти. Я думаю, для вашей модели это должно выглядеть так

nbrs = Ближайшие соседи (n_neighbors = 5, алгоритм = 'kd_tree'). Подходит (vec.transform (данные ['clean_sum']))

person AboAli Almusawi    schedule 22.02.2018
comment
Документация по ближайшим соседям утверждает, что грубая сила всегда будет использоваться, если вход представляет собой разреженную матрицу. CountVectorizer по умолчанию возвращает разреженное значение. - person acattle; 09.03.2018