Orange Canvas 3.3.6 - "MemoryError" при запуске виджета кластеризации k-средних
У меня проблемы с запуском виджета кластеризации k-средних в Orange 3.3.6. Я пытаюсь запустить его на наборе данных с 46k строк, но я получаю ошибку памяти, и виджет падает. Если я урежу его до 12030 строк, он будет работать. Очевидно, я хочу, чтобы он работал на всем наборе данных.
Я попытался установить новейшую версию оранжевого, обрезав все лишние столбцы в моем файле данных, за исключением тех немногих, которые мне действительно нужны, нормализуя мои данные и установив в нем 5 десятичных знаков.
Я использую Windows 8.1 Pro 64 бит, и 8 ГБ оперативной памяти. Я действительно чувствую, что Orange должен справиться с большим количеством данных, чем это.
Я запустил тот же набор данных из 46 тыс. Строк по алгоритму сцепления k-средних в программном обеспечении ioGas(по рефлексам), и он прошел через несколько секунд.
Могу ли я попытаться заставить Orange работать лучше?
Это сообщение об ошибке, которое выдает графический интерфейс Orange Canvas.
MemoryError Traceback (most recent call last):
File "C:\Python34\lib\site-packages\Orange\widgets\gui.py", line 2228, in <lambda>
b.button = btn = button(b, master, label, callback=lambda: do_commit())
File "C:\Python34\lib\site-packages\Orange\widgets\gui.py", line 2199, in do_commit
commit()
File "C:\Python34\lib\site-packages\Orange\widgets\unsupervised\owkmeans.py", line 250, in run
self.cluster()
File "C:\Python34\lib\site-packages\Orange\widgets\unsupervised\owkmeans.py", line 239, in cluster
max_iter=self.max_iterations)(self.data)
File "C:\Python34\lib\site-packages\Orange\projection\base.py", line 28, in __call__
clf = self.fit(data.X, data.Y)
File "C:\Python34\lib\site-packages\Orange\clustering\kmeans.py", line 25, in fit
proj.silhouette = silhouette_score(X, proj.labels_)
File "C:\Python34\lib\site-packages\sklearn\metrics\cluster\unsupervised.py", line 95, in silhouette_score
return np.mean(silhouette_samples(X, labels, metric=metric, **kwds))
File "C:\Python34\lib\site-packages\sklearn\metrics\cluster\unsupervised.py", line 158, in silhouette_samples
distances = pairwise_distances(X, metric=metric, **kwds)
File "C:\Python34\lib\site-packages\sklearn\metrics\pairwise.py", line 1207, in pairwise_distances
return _parallel_pairwise(X, Y, func, n_jobs, **kwds)
File "C:\Python34\lib\site-packages\sklearn\metrics\pairwise.py", line 1054, in _parallel_pairwise
return func(X, Y, **kwds)
File "C:\Python34\lib\site-packages\sklearn\metrics\pairwise.py", line 231, in euclidean_distances
distances = safe_sparse_dot(X, Y.T, dense_output=True)
File "C:\Python34\lib\site-packages\sklearn\utils\extmath.py", line 184, in safe_sparse_dot
return fast_dot(a, b)
MemoryError
2 ответа
Проблема не в k-средних, а в Силуэт.
Силуэт вычисляет попарные расстояния и, следовательно, требует O(n^2) памяти. Так что вам просто не хватает памяти.
Возможно, вы захотите попробовать запустить 64-битный Python. Я предлагаю Anaconda, которая поставляется с 64-битным Python, и тогда вы можете просто:
conda install -c anaconda orange3=3.3.6