У меня есть большая (650K строк * 62 столбцов) матрица двоичных данных (только 0-1 записей). Матрица в основном скудная: около 8% заполнено.
Я хотел бы разбить его на 5 групп, скажем, с именами от 1 до 5. Я пробовал иерархическую кластеризацию, и она не смогла обработать размер. Я также использовал алгоритм кластеризации k-средних на основе расстояния Хэмминга, учитывая 650-битные векторы длиной 62 КБ. Я не получил правильных результатов ни с одним из них.
Пожалуйста помоги.
clustering
dataset
k-means
binary-data
Unbounded26
источник
источник
Ответы:
Вы задаете неправильный вопрос.
Вместо того, чтобы спрашивать «какой алгоритм», вы должны спрашивать «что такое значимая категория / кластер в вашем приложении».
Я не удивлен, что вышеприведенные алгоритмы не сработали - они рассчитаны на очень разные варианты использования. k-means не работает с произвольными другими расстояниями. Не используйте это с расстоянием Хэмминга. Есть причина, по которой он называется k- means , его имеет смысл использовать только тогда, когда среднее арифметическое имеет смысл (чего нельзя сказать о двоичных данных).
Вы можете вместо этого попробовать k-режимы, IIRC - это вариант, который на самом деле предназначен для использования с категориальными данными, а двоичные данные несколько категоричны (но разреженность может вас убить).
Но прежде всего, вы удалили дубликаты, чтобы упростить ваши данные, и удалили, например, уникальные / пустые столбцы?
Возможно, APRIORI или подобные подходы также более значимы для вашей проблемы.
В любом случае, сначала выясните, что вам нужно, а затем, какой алгоритм может решить эту проблему. Работайте на основе данных , а не пробуя случайные алгоритмы.
источник
Может быть, я немного опоздал с ответом, но, возможно, это будет полезно для некоторых тел в будущем.
Адаптивная теория резонанса является хорошим алгоритмом для задач бинарной классификации. Проверьте об ART 1. Более подробную информацию вы можете увидеть в бесплатной книге « Дизайн нейронной сети» в главе 19.
В этой сети сочетаются отличная биологическая идея и хорошая математическая реализация. Также этот алгоритм прост в реализации, и в этой книге вы также можете найти пошаговые инструкции по созданию этого классификатора.
источник
Классическим алгоритмом кластеризации двоичных данных является модель Бернулли. Модель может быть подобрана с использованием байесовских методов и может быть подобрана также с использованием EM (ожидание максимизации). Вы можете найти примеры кода Python по всему GitHub, хотя первый более мощный, но и более сложный. У меня есть реализация C # модели на GitHub (использует Infer.NET, который имеет ограничительную лицензию!).
Модель довольно проста. Сначала выберите кластер, которому принадлежит точка данных. Затем независимо отоберите столько Бернулли, сколько у вас есть измерений в наборе данных. Обратите внимание, что это подразумевает условную независимость двоичных значений для данного кластера!
В байесовских условиях приоритетами над кластером является распределение Дирихле. Это то место, куда нужно ставить приоритеты, если вы считаете, что некоторые кластеры больше других. Для каждого кластера вы должны указать предыдущий, бета-дистрибутив, для каждого дистрибутива Бернулли. Как правило, это предварительное бета-версия (1,1) или униформа. Наконец, не забывайте случайным образом инициализировать назначения кластера при получении данных. Это нарушит симметрию, и сэмплер не застрянет.
В байесовской среде есть несколько интересных особенностей модели BMM:
Онлайн кластеризация (данные могут поступать в виде потока)
Модель может быть использована для определения недостающих размеров
Первый очень удобен, когда набор данных очень большой и не помещается в ОЗУ машины. Второй может быть использован во всех видах задач вменения отсутствующих данных, например. вменение отсутствующей половины двоичного изображения MNIST.
источник