Чи існує алгоритм, що нагадує дерево рішень для непідконтрольного кластеризації?


20

У мене набір даних складається з 5 функцій: A, B, C, D, E. Всі вони є числовими значеннями. Замість того, щоб робити кластеризацію на основі щільності, я хочу зробити це кластеризувати дані у формі дерева, що нагадує рішення.

Я маю на увазі такий підхід:

Алгоритм може розділити дані на X початкові кластери на основі функції C, тобто X кластери можуть мати малі значення C, середні C, великі C і дуже великі значення C і т.д. Далі, під кожним із вузлів X кластера, алгоритм далі розділяється дані в кластери Y на основі функції А. Алгоритм продовжується до тих пір, поки не будуть використані всі функції.

Алгоритм, який я описав вище, схожий на алгоритм дерева рішень. Але він мені потрібен для непідконтрольної кластеризації, а не для контрольованої класифікації.

Мої запитання такі:

  1. Чи такі алгоритми вже є? Яка правильна назва такого алгоритму
  2. Чи існує пакет / бібліотека R / python, який має реалізацію подібних алгоритмів?

3
But I need it for unsupervised clustering, instead of supervised classificationСама ця ключова фраза є занадто короткою і не розширює чітко те, що ви хочете. Вище ви описали те, що мені здається деревом рішень. Чи можете ви зараз дати подібний уривок про потрібне альго?
ttnphns

1
@ttnphns Привіт, як відомо, дерево рішень - це метод, що контролюється. Ви позначаєте кожен вектор функції як Class1 або Class2. Алгоритм визначає поріг для кожної функції на основі відомих міток. Однак я зіткнувся з проблемою кластеризації. Я не знаю правильних міток кожного векторного елемента. Я хочу знайти алгоритм, який автоматично визначає поріг для кожної функції, щоб побудувати дерево. Таким чином, в результаті кластеризацію можна легко інтерпретувати як, наприклад, Кластер 1: Високий A-Низький B- Середній C- Високий D - Низький E, Кластер 2 як низький A - Високий B- Середній C- Середній D - Низький E.
nan

Не зовсім добре тебе розумію. Візьмемо CHAID, наприклад, дерево. Ви повинні вибрати залежну змінну. Нехай це А. Алгоритм вибирає серед B, C, D, E змінну, найбільш корельовану з A, і binns, що змінна (скажімо, вона, предиктор, D) на дві або більше категорій "оптимально" - так що кореляція (між категоризованою змінною D і змінною A максимізовано. Скажімо, вона залишила 3 ​​групи, D1, D2, D3. Далі та сама процедура повторюється всередині кожної категорії (групи) D окремо, і найкращий предиктор серед B, C , E шукається під бінінгу. І т. Д. Що саме вас тут не влаштовує?
ttnphns

2
@ttnphns Я щойно знайшов цей документ, я думаю, що вони зробили те, що я маю на увазі. ftp.cse.buffalo.edu/users/azhang/disc/disc01/cd1/out/papers / ...
нан

1
@nan Ви знайшли якусь реалізацію таких дерев? Вони не містять жодного посилання на код у статті
Аллео

Відповіді:


12

Ви можете розглянути наступний підхід:

  • Використовуйте будь-який алгоритм кластеризації, який відповідає вашим даним
  • Припустимо, що отриманий кластер - це класи
  • Тренуйте дерево рішень на кластерах

Це дозволить спробувати різні алгоритми кластеризації, але ви отримаєте наближення дерева рішень для кожного з них.


1
погоджуєтесь, що це "доречно", але, звичайно, потрібно завжди мати на увазі, що створення мітки з алгоритму кластеризації не є "фактичною" особливістю спостереження. Залежно від якості та типу кластеризації, введений ухил буде існувати в більшій чи меншій мірі.
NiuBiBang

Чи можете ви вказати мені на документ, в якому обговорюється ця стратегія?
nCessity

2

Перший документ, який спадає на думку, такий: Кластеризація через конструювання дерева рішень https://pdfs.semanticscholar.org/8996/148e8f0b34308e2d22f78ff89bf1f038d1d6.pdf

Як уже згадувалося, "ієрархічна" (зверху вниз) та "ієрархічна агломерація" (знизу вгору) - це обидва відомі методи, розроблені за допомогою дерев для кластеризації. У Scipy це є.

Якщо ви не в порядку зі спеціальним кодом, оскільки я не знаю жодної бібліотеки, я можу порекомендувати дві методики. Попереджуйте, що вони технічно не згруповані через механіку, на яку вони покладаються. Ви можете назвати цю псевдогрупування.

1) Контрольований: Це дещо схоже на документ (варто прочитати). Побудуйте єдину модель дерева рішень, щоб дізнатися якусь ціль (ви вирішите, що має сенс). Ціль може бути стовпцем, що генерується випадковим чином (потрібно повторити та оцінити, яка ітерація найкраща, див. Нижче). Визначте кожен повний шлях дерева як "скупчення", оскільки точки, що потрапляють через цю серію гілок, технічно схожі за цільовим. Це добре працює лише з деякими проблемами, але ефективно у великих масштабах. Ви закінчуєте K кластерів (див. Нижче).

2) Напівпіднагляд (вид непідконтрольного, але механічного нагляду), використовуючи №1: ви можете спробувати створити дерева для прогнозування стовпців у шаблоні виходу. тобто якщо схемою є [A, B, C], побудуйте 3 моделі [A, B] -> C, [A, C] -> B, [B, C] -> A. Ви отримуєте кластери KN (див. Нижче). N = len (схема). Якщо деякі з цих функцій не цікаві або занадто незбалансовані (у випадку категорій), не використовуйте їх як цілі.

Резюме: Модель буде вибирати функції в порядку, заснованому на інформації або чистоті, а кластери будуть базуватися лише на кількох функціях, а не на всіх. Немає поняття відстані в цих кластерах, але ви, безумовно, могли розробити його на основі центрів.

Плюси: легко зрозуміти і пояснити, швидке навчання і умовивід, добре працює з мало сильними особливостями, працює з категоріями. Якщо ваші функції за своєю суттю неоднорідні і у вас багато функцій, вам не доведеться витрачати стільки часу, вирішуючи, яку використовувати в функції дистанції.

Мінуси: не стандартні, повинні бути написані, наївна упередженість, колінеарність з цільовими призводить до поганих результатів, тому що 1000 однаково важливих функцій не спрацюють добре (KMeans з евклідовою дистанцією тут краще).

Скільки кластерів ви отримуєте? Потрібно, абсолютно потрібно обмежити модель DT, щоб не надто зростати. напр., встановити мінімальні зразки на аркуш, максимальні вузли листів (бажано) або максимальну глибину Необов’язково встановлюйте обмеження чистоти чи ентропії. Ви повинні перевірити, скільки кластерів вам дав, і оцінити, чи цей метод кращий, ніж реальний кластер.

Чи добре працювали методи і параметри для вас? Що було найкраще? Щоб дізнатися це, потрібно зробити кластерну оцінку: Показники ефективності для оцінювання непідвладного навчання


2

Що ви шукаєте, це алгоритм розподілу кластерів.

Найбільш поширені алгоритми є агломераційними, які кластеризують дані знизу вгору - кожне спостереження починається як власний кластер, і кластери об'єднуються. Ділиться кластеризація зверху вниз - спостереження починаються в одному кластері, який поступово ділиться.

Прагнення виглядати як дерево рішень обмежує вибір, оскільки більшість алгоритмів працюють на відстані в повному просторі даних, а не розділяють одну змінну за часом.

DIANA - це єдиний я відомий алгоритм кластеризації, і я думаю, що він структурований як дерево рішень. Я був би вражений, якби інших людей там немає.

Ви можете використовувати стандартний алгоритм дерева рішень, якщо ви модифікуєте правило розбиття на метрику, яка не враховує визначену залежну змінну, а скоріше використовує метрику корисності кластера.


0

Однією з ідей, які слід розглянути, є припущення, що у вас є k функції та n балів. Ви можете побудувати випадкові дерева за допомогою функції (k-1) та 1 функції як залежної змінної. Y. Ви можете вибрати висоту h, після якої у вас з'являться точки даних у коренях. Ви можете взяти на голосування різновид різних дерев. Просто думка.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.