У меня есть набор данных, состоящий из 5 функций: A, B, C, D, E. Все они являются числовыми значениями. Вместо кластеризации на основе плотности я хочу кластеризовать данные в виде дерева решений.
Подход, который я имею в виду, выглядит примерно так:
Алгоритм может делить данные на X исходных кластеров на основе признака C, то есть X кластеров могут иметь малые значения C, средний C, большие C и очень большие значения C и т. Д. Затем, под каждым из узлов X кластера, алгоритм дополнительно делит данные в кластеры Y основаны на функции A. Алгоритм продолжается до тех пор, пока не будут использованы все функции.
Алгоритм, который я описал выше, похож на алгоритм дерева решений. Но он мне нужен для неконтролируемой кластеризации, а не для контролируемой классификации.
Мои вопросы следующие:
- Такие алгоритмы уже существуют? Какое правильное название для такого алгоритма
- Существует ли пакет / библиотека R / python, в котором есть реализация алгоритмов такого рода?
источник
But I need it for unsupervised clustering, instead of supervised classification
Одна только эта ключевая фраза слишком коротка и не дает четкого объяснения того, что вы хотите. Выше вы описали то, что мне кажется деревом решений. Можете ли вы сейчас дать аналогичный отрывок о желаемом алгоритме?CHAID
, к примеру, дерево. Вы должны выбрать зависимую переменную. Пусть это будет A. Алгоритм выбирает среди B, C, D, E переменную, наиболее коррелированную с A, и binns эту переменную (скажем, это, предиктор, быть D) на две или более категории «оптимально» - так, чтобы корреляция (между категорированной переменной D и переменной A максимально. Скажем, осталось 3 группы, D1, D2, D3. Далее, та же самая процедура повторяется внутри каждой категории (группы) D отдельно, и лучший предиктор среди B, C , E ищется под биннингом и т. Д. Что именно вам здесь не подходит?Ответы:
Вы можете рассмотреть следующий подход:
Это позволит вам попробовать разные алгоритмы кластеризации, но вы получите аппроксимацию дерева решений для каждого из них.
источник
Первая статья, которая приходит на ум, это: кластеризация посредством построения дерева решений https://pdfs.semanticscholar.org/8996/148e8f0b34308e2d22f78ff89bf1f038d1d6.pdf
Как уже упоминалось, «иерархическая» (сверху вниз) и «иерархическая агломерация» (снизу вверх) являются хорошо известными методами, разработанными с использованием деревьев для кластеризации. Сципи имеет это.
Если вы согласны с пользовательским кодом, потому что я не знаю ни одной библиотеки, я могу порекомендовать два метода. Имейте в виду, что они не являются технически кластеризованными из-за механики, на которую они полагаются. Вы могли бы назвать это псевдокластеризацией.
1) Под надзором: это несколько похоже на статью (стоит прочитать). Создайте единую модель дерева решений, чтобы узнать какую-то цель (вы решаете, что имеет смысл). Цель может быть случайно сгенерированным столбцом (требуется повторение и оценка того, какая итерация была лучшей, см. Ниже). Определите каждый полный путь дерева как «кластер», поскольку точки, проходящие через этот ряд ветвей, технически схожи с целью. Это хорошо работает только для некоторых проблем, но эффективно в больших масштабах. Вы в конечном итоге с K кластеров (см. Ниже).
2) Полу-контролируемый (своего рода неконтролируемый, но механически контролируемый), используя # 1: вы можете попробовать построить деревья, чтобы предсказать столбцы в шаблоне «оставь один на один». то есть, если схема [A, B, C], создайте 3 модели [A, B] -> C, [A, C] -> B, [B, C] -> A. Вы получаете кластеры KN (см. Ниже). N = Len (схема). Если некоторые из этих функций не интересны или слишком несбалансированы (в случае категорий), не используйте их в качестве целей.
Сводка: модель будет выбирать функции по порядку на основе информации или чистоты, а кластеры будут основаны на нескольких функциях, а не на всех. В этих кластерах нет понятия расстояния, но вы наверняка могли бы разработать концепцию, основанную на центрах.
Плюсы: легко понять и объяснить, быстрое обучение и умозаключения, хорошо работает с несколькими сильными функциями, работает с категориями. Если ваши функции по сути разнородны и у вас много функций, вам не нужно тратить столько времени на решение, которое использовать в функции расстояния.
Минусы: не стандартные, должны быть написаны, наивный уклон, коллинеарность с целью приводит к плохим результатам, если 1000 одинаково важных функций не будут работать хорошо (KMeans с евклидовым расстоянием здесь лучше).
Сколько кластеров вы получаете? Вы должны, абсолютно должны ограничить модель DT, чтобы не расти слишком сильно. Например, установите минимальное количество выборок на лист, максимальное количество листовых узлов (предпочтительно) или максимальную глубину. При желании установите ограничения чистоты или энтропии. Вы должны проверить, сколько кластеров это вам дало, и оценить, лучше ли этот метод, чем реальная кластеризация.
Подходили ли вам методы и параметры? Что было лучше? Чтобы выяснить это, необходимо выполнить оценку кластера: показатели производительности для оценки обучения без учителя
источник
То, что вы ищете, это алгоритм разделяющей кластеризации.
Наиболее распространенные алгоритмы являются агломерационными, которые группируют данные восходящим образом - каждое наблюдение начинается с того, что его собственный кластер и кластеры объединяются. Разделение кластеров сверху вниз - наблюдения начинаются в одном кластере, который постепенно разделяется.
Желание выглядеть как дерево решений ограничивает выбор, так как большинство алгоритмов работают на расстояниях внутри всего пространства данных, а не разделяют одну переменную за раз.
DIANA - единственный алгоритм разделения кластеризации, который я знаю, и я думаю, что он структурирован как дерево решений. Я был бы удивлен, если бы там не было других.
Вы можете использовать стандартный алгоритм дерева решений, если вы измените правило разделения на метрику, которая не учитывает определенную зависимую переменную, а скорее использует метрику качества кластера.
источник
Рассмотрим одну идею: предположим, у вас есть k особенностей и n баллов. Вы можете построить случайные деревья, используя (k-1) функцию и 1 функцию в качестве зависимой переменной. Y. Вы можете выбрать высоту h, после которой у вас будут точки данных в корнях. Вы можете принять участие в голосовании разных деревьев. Просто мысль.
источник