Я хочу сделать кластеризацию k-средних на множестве 10-мерных точек. Подвох: 10 ^ 10 баллов .
Я ищу только центр и размер самых больших кластеров (скажем, от 10 до 100 кластеров); Меня не волнует, в каком кластере заканчивается каждая точка. Использование k-средних определенно не важно; Я просто ищу подобный эффект, любой приблизительный k-средних или связанный алгоритм был бы хорош (минибат-SGD означает, ...). Поскольку GMM в некотором смысле является той же проблемой, что и k-means, выполнение GMM для данных того же размера также интересно.
В этом масштабе субсэмплирование данных, вероятно, существенно не меняет результат: шансы найти те же самые топ-10 кластеров с использованием 1/10000-й выборки данных очень хороши. Но даже тогда это проблема из 10 ^ 6 баллов, которая находится на грани проходимости.
источник
Ответы:
К-среднее основано на средних .
Он моделирует кластеры, используя средства, и, таким образом, улучшение путем добавления большего количества данных является незначительным. Погрешность средней оценки уменьшается с 1 / sqrt (n); поэтому добавление большего количества данных окупается все меньше и меньше ...
Стратегии для таких больших данных всегда вращаются вокруг выборки:
Если вы хотите сублинейное время выполнения, вы должны сделать выборку!
Фактически, Mini-Batch-Kmeans и т. Д. Делают именно это: многократно выбирают данные из набора данных.
Однако выборка (в частности, несмещенная выборка) также не является бесплатной ... обычно вам придется считывать данные линейно для выборки, поскольку вы не получаете произвольный доступ к отдельным записям.
Я бы пошел с алгоритмом MacQueen. Это онлайн; по умолчанию он выполняет однократную передачу ваших данных (хотя это популярное повторение). Распространение нелегко, но я полагаю, вы можете позволить линейно читать ваши данные, скажем, 10 раз с SSD?
источник
В качестве дополнительного комментария отметим, что использование K-средних для 10D-данных может оказаться в никуда, в соответствии с проклятием размерности. Конечно, это немного различается в зависимости от характера данных, но как только я попытался определить порог, при котором K-Means начинает вести себя странно в отношении размерности, я получил что-то вроде 7D. После 7 измерений он начал пропускать правильные кластеры (мои данные были сгенерированы вручную в соответствии с 4 хорошо разделенными гауссовыми распределениями, и я использовал функцию kmeans MATLAB для моего небольшого эксперимента).
источник