2016-06-13 2 views
2

Я работаю над операционными системами Windows 7 8gb.sklearn kneighbours memory error python

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

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

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

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 

Любые идеи?

+0

Вы используете 32-битный Python или 64-битный Python? Перемещение на 64-разрядный может решить эту проблему. – probitaille

+1

Я использую 64 бит на самом деле ... –

+0

Hum ... если вы опускаете число соседей (n_neighbors), у вас такая же проблема? Я на самом деле делаю что-то подобное, но с большим количеством данных и с несколькими n_neighbors в цикле (например, с 1 по 9). Я получил ошибку памяти, используя 32-битный Python, и я перешел на 64-разрядный Anaconda, и это решило мою проблему. – probitaille

ответ

0

Использование КНН с KD ВАЛ

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

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

nbrs = NearestNeighbors (N_NEIGHBORS = 5, алгоритм = 'kd_tree'). Подгонке (vec.transform (данные [ 'clean_sum']))

+0

[Документация NearestNeighbors] (http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.NearestNeighbors.html#sklearn.neighbors.NearestNeighbors.kneighbors) указывает, что грубая сила всегда будет использоваться, если вход является разреженной матрицей. По умолчанию функция CountVectorizer возвращает разреженные значения. – acattle