Извините за странный вопрос, но дело в том, что я использую kmeans, используя библиотеку Yael.
У меня есть около 9 000 000 векторов 128 измерений, и я собираюсь получить 1 000 000 центроидов. Он работает на 24-ядерном процессоре и работает уже много часов. Я впервые запускаю kmeans с таким огромным объемом данных, и я хочу знать, когда он закончится, а не ждать, пока он закончится, и знать позже.
Итак, вопрос в том, можно ли приблизительно определить, когда закончится kmean?
1 ответ
Вы уверены, что
А) алгоритм подходит для вашей задачи? k-means основан на множестве предположений, в частности, что ваши кластеры имеют одинаковый размер
Б) что ваши параметры имеют смысл? Есть ли какое-либо использование «кластеризации» в «1000000»? Имеет ли это смысл? Сколько из этих кластеров в конечном итоге будут содержать всего 0 или 1 наблюдение?
Наивная реализация k-средних (а 99% наивны) будет использовать O(n*k*i)
, где n
- количество наблюдений, k
- количество кластеров, а i
- это количество необходимых итераций до сходимости. Итак, очевидно он плохо масштабируется до 1000000 кластеров. Но еще хуже: k-means в худшем случае будет проверять O(k^n)
присваивания. Обычно намного меньше, но очевидно, что это число сильно зависит от количества кластеров. Таким образом, чем больше кластеров, тем больше итераций вам обычно потребуется до сходимости!
Похожие вопросы
Новые вопросы
performance
По вопросам, касающимся измерения или улучшения кода и эффективности приложений.