2014-09-05 4 views
1

В настоящее время я пытаюсь выполнить кластеризацию k-средних из mlpack, масштабируемой библиотеки обучения компьютера.mlpack: ошибка из памяти

Но когда я выполняю bin/kmeans в командной строке, я всегда получаю сообщение об ошибке.

error: arma::memory::acquire(): out of memory 

terminate called after throwing an instance of 'std::bad_alloc' 
    what(): std::bad_alloc 

Размер входного файла - 7,4 ГБ.

Есть ли у вас какие-либо предложения? Вы знаете альтернативные инструменты, которые могут быть применимы к большому набору данных?

+1

Выложить деньги за дополнительную оперативную память? –

+0

Ну, сообщение «из памяти» означает, что вы, ну, вне памяти, и это не странно для такого ввода. Чтобы завершить то, что вы делаете, вам придется изменить алгоритм, например. вы можете загружать данные в память по частям. – grzkv

ответ

1

Здесь нет простого решения для точного ответа. Проблема в том, что Armadillo (базовая матричная библиотека) не может выделить достаточно места для ваших входных данных.

По большей части mlpack более консервативен с оперативной памятью, чем другие инструменты, такие как MATLAB или R, но похоже, что ваш набор данных достаточно велик, чтобы ваши возможности (не доставляя систему с большей оперативной памятью, как предполагал Керрек) были ограничены ,

Многие стратегии ускорения k-средств включают в себя выборку входного набора данных и выполнение k-средних на подмножестве входных точек. Поскольку k-средство очень чувствительно к начальным центроидам, которые ему даны, эта стратегия выборки часто используется для выбора начальных центроидов. См. Bradley and Fayyad, 1998: ftp://www.ece.lsu.edu/pub/aravena/ee7000FDI/Presentations/Clustering-Pallavi/Ref4_k-means.pdf

В вашем случае, может быть, это проще и достаточно точно, чтобы просто запустить k-средство для подмножества ваших данных, которые могут быть загружены в ОЗУ, и взять их в качестве ваших центроидов кластера. Если k достаточно мало и количество точек в вашем наборе данных велико (то есть количество кластеров намного меньше количества точек), тогда это должен быть разумный подход и, конечно, более простой подход, чем изменение mlpack, чтобы быть более консервативным с ОЗУ или писать собственную программу, чтобы использовать mmap() или что-то еще, и дешевле, чем покупать новую RAM.

Смежные вопросы