Я пытаюсь проверить платформу k-средних Прадо для кластеризации торговых стратегий, основанную на матрице корреляции доходности, найденной в его статье , с использованием R для большого числа стратегий, скажем, 1000.
Он пытается найти оптимальное k и оптимальную инициализацию для k-средних, используя два for
цикла по всем возможным k и ряду инициализаций, то есть k переходит от 2 к N-1 , где N - количество стратегий.
Проблема в том, что запуск k-означает, что много раз, особенно с таким количеством кластеров, не хватает памяти, и мой компьютер не использует ни один экземпляр AWS m3.medium, который я могу использовать. (4 ГБ ОЗУ и то и другое, хотя в AWS меньше фоновых процессов, потребляющих ОЗУ).
Итак, довольно пожалуйста, есть идеи, как справиться с этой проблемой памяти? Или, по крайней мере, как оценить объем памяти, необходимый в зависимости от количества используемых стратегий?
Я попробовал пакет biganalytics
и его функцию bigkmeans
, но этого оказалось недостаточно.
Я также знаю, что экземпляры RAM AWS выше, но я хотел бы убедиться, что мой код является оптимальным перед переключением на такой экземпляр.
Я также пытался ограничить количество используемых кластеров, что подтвердило, что это основная проблема, занимающая память, но я бы не хотел придерживаться такого решения (ни в сочетании с лучшим экземпляром AWS).
Наибольшее количество стратегий, правильно выполненных в AWS, составило около 500.
Основная часть кода для оптимизации памяти выглядит следующим образом:
D <- nrow(dist)
seq.inits <- rep(1:nr.inits,D-2)
seq.centers <- rep(2:(D-1),each = nr.inits)
KM <- mapply(function(x,y){
set.seed(x+333)
kmeans(dist, y)
},seq.inits,seq.centers)
dist
- это матрица корреляции-расстояния стратегий "возврата" (т. Е. Число столбцов равно числу строк среди других свойств), а nr.inits
- это число инициализаций. Оба являются входными переменными. После этого лучшая кластеризация определяется с использованием оценки силуэта и, возможно, может быть повторной кластеризацией.
Мне известно о том, что матрица расстояний не подходит для ввода k-средних, а также я знаю о проблемах интеллектуального анализа данных, поэтому, пожалуйста, не обращайтесь к ним.
Мои вопросы, как указано выше:
возможно ли уменьшить использование памяти, чтобы я мог запустить 1000 стратегий на экземпляре m3.medium AWS?
возможно ли, по крайней мере, оценить использование памяти на основе используемых числовых стратегий? (Если я попробую 2:(N-1)
кластеров.)
На самом деле, второй вопрос, желательно после оптимизации, для меня важнее. Поскольку я хотел бы попробовать даже гораздо большее количество стратегий, чем «просто» 1000.
Спасибо за ваши ответы заранее!