Извините за странный вопрос, но дело в том, что я использую kmeans, используя библиотеку Yael.

У меня есть около 9 000 000 векторов 128 измерений, и я собираюсь получить 1 000 000 центроидов. Он работает на 24-ядерном процессоре и работает уже много часов. Я впервые запускаю kmeans с таким огромным объемом данных, и я хочу знать, когда он закончится, а не ждать, пока он закончится, и знать позже.

Итак, вопрос в том, можно ли приблизительно определить, когда закончится kmean?

2
Karl 30 Дек 2012 в 18:49
Извините, теперь я понял ваш вопрос. Я удалил свой ответ за это. нет никакого способа узнать, когда он закончится, даже близко к реальному времени. потому что здесь много факторов, и вы никогда не узнаете их все :) но я могу сказать, что это займет много времени, так что поднимите настроение и оставьте это :)
 – 
mamdouh alramadan
30 Дек 2012 в 21:20

1 ответ

Лучший ответ

Вы уверены, что

А) алгоритм подходит для вашей задачи? k-means основан на множестве предположений, в частности, что ваши кластеры имеют одинаковый размер

Б) что ваши параметры имеют смысл? Есть ли какое-либо использование «кластеризации» в «1000000»? Имеет ли это смысл? Сколько из этих кластеров в конечном итоге будут содержать всего 0 или 1 наблюдение?

Наивная реализация k-средних (а 99% наивны) будет использовать O(n*k*i), где n - количество наблюдений, k - количество кластеров, а i - это количество необходимых итераций до сходимости. Итак, очевидно он плохо масштабируется до 1000000 кластеров. Но еще хуже: k-means в худшем случае будет проверять O(k^n) присваивания. Обычно намного меньше, но очевидно, что это число сильно зависит от количества кластеров. Таким образом, чем больше кластеров, тем больше итераций вам обычно потребуется до сходимости!

2
Has QUIT--Anony-Mousse 31 Дек 2012 в 01:55