Хобрук: Ваш путь к мастерству в программировании

У меня есть 2 000 000 точек в 100-мерном пространстве. Как я могу сгруппировать их в K (например, 1000) кластеров?

Проблема возникает следующим образом. У меня есть M изображений и я извлекаю N признаков для каждого изображения, а размерность каждого признака равна L. Таким образом, у меня есть M*N признаков (2 000 000 для моего случая), и каждый признак имеет размерность L (100 для моего случая). Мне нужно сгруппировать эти функции M * N в K кластеров. Как мне это сделать? Спасибо.


Ответы:


1

Вы хотите получить 1000 кластеров изображений, объектов или пар (изображение, объект)?
В любом случае, похоже, что вам придется сократить объем данных и использовать более простые методы.

Одним из возможных вариантов является двухпроходный K-кластер:
а) разделить 2 миллиона точек данных на 32 кластера,
б) разделить каждый из них еще на 32.
Если это сработает, в результате получится 32^2. = 1024 кластера может быть достаточно для вашей цели.

Тогда вам действительно нужно 100 координат? Можете ли вы угадать 20 самых важных из них или просто попробовать случайные подмножества из 20?

Там огромная литература: гугл +image "dimension reduction" выдает ~70000 просмотров.

30.11.2010
  • спасибо за ваше предложение. Я просто сделал это, как вы предложили, с помощью двухпроходного K-кластера. Спектакль очень хороший. 17.12.2010
  • Хорошо; примерно сколько пробежал? (А как насчет нажатия «принять»?) 18.12.2010
  • Может ли кто-нибудь предоставить какую-либо документацию или материалы для чтения для двухпроходного K-кластера? Я не получаю именно то, что мне нужно 11.06.2020
  • @Mansi, en.wikipedia.org/wiki/K-means_clustering описывает базовую итерацию , который вы также можете многоуровневый, как в моем старом ответе. Что вы пробовали? Можете ли вы описать проблему: сколько точек, в каком измерении, какое K, изображения? У вас есть минимальный пример? 11.06.2020

  • 2

    Вы отметили вопрос "k-means". Почему нельзя использовать k-средства? Это вопрос эффективности? (лично я использовал только k-средние в 2 измерениях) Или это вопрос того, как кодировать алгоритм k-средних?

    Являются ли ваши значения дискретными (например, категории) или непрерывными (например, значение координат)? Если последнее, то k-means должно быть хорошо в моем понимании. Для кластеризации дискретных значений потребуется другой алгоритм — возможно, иерархическая кластеризация?

    11.11.2010
  • Спасибо за винвад. Часто не хватает памяти, если я использовал k-means. Я даже не могу загрузить данные в память (функции в текстовом файле около 1,5 ГБ). Мой компьютер с 2G RAM. Я использовал матлаб для этой задачи. Когда я загружаю 37,5% данных функций, Matlab сказал мне, что не хватает памяти. 11.11.2010
  • Так что это вопрос размера/эффективности. Можно ли разделить ваши данные на три или четыре раздела, которые могут обрабатываться отдельными фрагментами? 11.11.2010
  • Да, это выбор для разделения данных на несколько разделов. Я разделил их на 20 разделов, потому что матрица расстояний потребовала бы много памяти. Другая проблема заключается в том, как эффективно объединить кластеры из этих 20 разделов? Также неясно, насколько этот метод разделения повлияет на производительность кластеризации. 11.11.2010

  • 3

    Алгоритмы EM-tree и K-tree в проекте LMW-tree могут объединять такие большие и больше. Наш последний результат — объединение 733 миллионов веб-страниц в 600 000 кластеров. Существует также потоковый вариант EM-дерева, в котором набор данных передается с диска для каждой итерации.

    17.05.2015

    4

    Хороший трюк при кластеризации миллионов точек состоит в том, чтобы сэмплировать их, сгруппировать выборку, а затем добавить оставшиеся точки к существующей выборке.

    05.07.2018
    Новые материалы

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

    Что в лицо
    Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

    Почему шаблоны проектирования и почему нет?
    Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..

    Создание дизайна обуви с помощью машинного обучения
    Обувь. Что подождать? Я думал, что речь пойдет о машинном обучении! Ну это так. Если бы вы пошли на Amazon, сколько обуви вы бы нашли? Наверное, много, не так ли? Но много ли в них..