Мы использовали Kmeans для кластеризации наших логов. Типичный набор данных имеет 10 миль. образцы с 100k + функциями.
Чтобы найти оптимальное k - мы запускаем несколько Kmeans параллельно и выбираем тот, у которого лучший силуэт. В 90% случаев мы получаем k от 2 до 100. В настоящее время мы используем scmeit-learn Kmeans. Для такого набора данных кластеризация занимает около 24 часов на экземпляре ec2 с 32 ядрами и 244 ОЗУ.
В настоящее время я занимаюсь поиском более быстрого решения.
Что я уже тестировал:
Kmeans + Среднее смещение Комбинация - немного лучше (для k = 1024 -> ~ 13h)но все еще медленный.
Библиотека Kmcuda - не поддерживает разреженное представление матрицы. Для представления этого набора данных в виде плотной матрицы в памяти потребуется ~ 3 ТБ ОЗУ.
Tensorflow ( tf.contrib.factorization.python.ops.KmeansClustering () ) - только сегодня начал расследование, но либо я делаю что-то не так, либо не знаю, как его приготовитьВ моем первом тесте с 20 тысячами образцов и 500 функциями кластеризация на одном графическом процессоре медленнее, чем на одном потоке на процессоре.
Facebook FAISS - нет поддержки разреженныхпредставление.
Далее в моем списке PySpark MlLib Kmeans. Но имеет ли это смысл на 1 узле?
Будет ли обучение для моего варианта использования быстрее на нескольких графических процессорах? Например, TensorFlow с 8 Tesla V-100?
Есть ли какая-нибудь магическая библиотека, о которой я не слышал?
Или просто масштабировать вертикально?