K-засоби кластеризації для змішаних числових та категоричних даних


133

Мій набір даних містить ряд числових атрибутів та один категоричний.

Скажіть NumericAttr1, NumericAttr2, ..., NumericAttrN, CategoricalAttr,

де CategoricalAttrприймає один з трьох можливих значень: CategoricalAttrValue1, CategoricalAttrValue2або CategoricalAttrValue3.

Я використовую реалізацію алгоритму кластеризації k-означає за замовчуванням для Octave https://blog.west.uni-koblenz.de/2012-07-14/a-working-k-means-code-for-octave/ . Він працює лише з числовими даними.

Отже, моє запитання: чи правильно розділити атрибут категорії CategoricalAttrна три числові (двійкові) змінні, наприклад IsCategoricalAttrValue1, IsCategoricalAttrValue2, IsCategoricalAttrValue3?


7
Так, використання кодування 1-з-n також є дійсним.
Шон Оуен

1
Можливо, такий підхід був би корисним: zeszyty-naukowe.wwsi.edu.pl/zeszyty/zeszyt12/…

Чи маєте ви якесь уявлення про кластеризацію категорій та числових даних "TIME SERIES"?
Лейла Юсефі

Відповіді:


122

Стандартний алгоритм k-засобів з різних причин безпосередньо не застосовується до категоричних даних. Вибірковий простір для категоричних даних дискретний і не має природного походження. Функція дистанції Евкліда на такому просторі насправді не має сенсу. Як хтось сказав, "Факт, що змія не має ні коліс, ні ніг, не дозволяє нам нічого говорити про відносну цінність коліс і ніг". ( звідси )

Існує різновид k-засобів, відомих як k-режими, введені в цій роботі Джексу Хуанг, які підходять для категоричних даних. Зауважте, що отримані вами рішення чутливі до початкових умов, наприклад, про які йдеться тут (PDF).

У статті Хуанга (зв'язаний вище) також є розділ про "k-прототипи", який застосовується до даних із поєднанням категоричних та числових ознак. Він використовує міру відстані, яка змішує відстань Хеммінга за категоричними ознаками та евклідову відстань для числових ознак.

Пошук в Google "домішкою категорійних даних k" означає "ще декілька останніх статей про різні алгоритми кластеризації, подібні k-засобам, з поєднанням категоричних та числових даних. (Я ще не читав їх, тому не можу коментувати їх достоїнства.)


Власне, те, що ви пропонуєте (перетворення категоричних атрибутів у бінарні значення, а потім виконання k-значень, як якщо б це були числові значення) - це інший підхід, який був апробований раніше (передбачення k-режимів). (Див. Раламбондраїни, Х. 1995. Концептуальна версія алгоритму k-означає. Листи розпізнавання шаблонів, 16: 1147–1157.) Але я вважаю, що підхід k-режимів є кращим з причин, зазначених вище.


10
Якщо масштаб ваших числових ознак відповідає тому ж діапазону, що і бінаризовані категоричні ознаки, то схожість косинусів, як правило, дає дуже подібні результати, ніж підхід Хеммінга вище. У мене немає надійного способу перевірити, що це працює у всіх випадках, тому коли я змішував дані котів і чисел, я завжди перевіряю кластеризацію на вибірці за допомогою простого косинусного методу, про який я згадував, і складнішого поєднання з Хеммінг. Якщо різниця незначна, я віддаю перевагу більш простий метод.
cwharland

1
Це звучить як розумний підхід, @cwharland. Надалі я також зазначу, що одна з переваг, яку Хуанг надає для підходу k-mode над режимом Раламбондраїни, - що вам не потрібно вводити окрему функцію для кожного значення вашої категоріальної змінної - насправді це не має значення в Випадок ОП, коли він має лише одну категоричну змінну з трьома значеннями. Краще піти з найпростішим підходом, який працює.
Тім Гудман

3
Хороша відповідь. Потенційно корисно: я реалізував k-режими та k-прототипи Хуанга (та деякі варіанти) в Python: github.com/nicodv/kmodes
Def_Os

2
Я не рекомендую перетворювати категоричні атрибути в числові значення. Уявіть, у вас є два назви міста: NY та LA. Якщо застосувати число NY 3 та LA № 8, відстань дорівнює 5, але це 5 нічого не бачить із різницею між NY та LA.
adesantos

@adesantos Так, це проблема у представленні декількох категорій з однією числовою ознакою та використанням евклідової відстані. Використання дистанції Хеммінга - це один підхід; у цьому випадку відстань дорівнює 1 для кожної ознаки, яка відрізняється (а не різниця між числовими значеннями, присвоєними категоріям). Зробити кожну категорію своєю особливістю - це інший підхід (наприклад, 0 або 1 для "це NY", і 0 або 1 для "це LA").
Тім Гудман

24

На мою думку, існують рішення для вирішення категоричних даних при кластеризації. R поставляється з певним відстанню для категоричних даних. Ця відстань називається Говер ( http://www.rdocumentation.org/packages/StatMatch/versions/1.2.0/topics/gower.dist ), і вона працює досить добре.


2
Це такий підхід, який я використовую для змішаного набору даних - розділення медоїдів, застосованих до матриці відстані Гоувер (див. R-bloggers.com/clustering-mixed-data-types-in-r ). Проблема полягає в тому, що для обчислення матриці відстані потрібно багато пам’яті, пропорційне O (n ^ 2), отже, для наборів даних, більших за 10 або 20 000 записів, я переглядаю варіанти на кластеризації k-значень, які потребують меншої пам’яті та можуть обробляти неоднозначні дані.
RobertF

@RobertF тут же. На жаль, можливий розмір даних занадто низький для більшості проблем.
скарбничка

20

(Окрім відмінної відповіді Тіма Гудмена)

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

  1. Алгоритм кластеризації може обирати будь-яку оцінку метрики / схожості. Евклідовий - найпопулярніший. Але будь-який інший показник може бути використаний, який масштабує відповідно до розподілу даних у кожному вимірі / атрибуті, наприклад метрику Mahalanobis. Ілюструючи відстань точок даних від центру на основі використовуваної метрики відстані.

  2. Що стосується змішаної (числової та категоричної) кластеризації, хороший документ, який може допомогти, це: INCONCO: Інтерпретоване кластеризація числових та категоричних об'єктів.

  3. Поза k-означає: Оскільки звичайний k-означає ванілі вже виключений як відповідний підхід до цієї проблеми, я зважуся на ідею думати про кластеризацію як проблему, що відповідає моделі. Різні заходи, такі як інформаційно-теоретична метрика: дивергенція Куллбека-Лійблера добре спрацьовує при спробі конвергенції параметричної моделі до розподілу даних. (Звичайно, параметричні методи кластеризації, такі як GMM, повільніше, ніж Kmeans, тому є недоліки)

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

Також ознайомтесь: ROCK: Надійна алгоритм кластеризації для категоричних атрибутів


17

Це питання здається справді щодо представництва, а не стільки щодо кластеризації.

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

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

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


Я згоден з вашою відповіддю. HotEncoding дуже корисний.
Праміт

4

Ви також можете спробувати алгоритм кластеризації Expectation Maximization. Він може працювати над категоріальними даними і надасть вам статистичну ймовірність того, яке категоричне значення (або значення) кластер найімовірніше прийме.


2
Чи можете ви бути більш конкретними? EM посилається на алгоритм оптимізації, який може бути використаний для кластеризації. Є багато способів зробити це, і не очевидно, що ви маєте на увазі.
байєр

@bayer, я думаю, що згадана тут кластеризація - це модель гауссової суміші. GMM зазвичай використовує ЕМ.
goh

1
Я не думаю, що це він має на увазі, оскільки GMM не передбачає категоричних змінних.
байєр

3

Це залежить від вашої категоричної змінної. Для порядкових змінних, скажімо, як погані, середні та добрі, є сенс просто використовувати одну змінну і мати значення 0,1,2, а відстані мають сенс тут (Avarage ближче до поганого та хорошого). Однак якщо немає порядку, в ідеалі слід використовувати одне гаряче кодування, як згадувалося вище.


3

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

1) Алгоритми на основі розподілу: k-прототипи, Squeezer
2) ієрархічні алгоритми: ROCK, агломераційний одинарний, середній і повний зв'язок
3) алгоритми на основі щільності: HIERDENC, MULIC, CLIQUE
4) алгоритми на основі моделей: кластеризація SVM, Self -організація карт

Якщо ви хочете дізнатися більше про ці алгоритми, рукопис «Огляд алгоритмів кластеризації», написаний Руй Сю, пропонує всебічне вступ до кластерного аналізу.


2

Мета K-Means - зменшити дисперсію всередині кластера, і оскільки він обчислює центроїди як середню точку кластера, для правильного сходження необхідно використовувати відстань Евкліда . Тому, якщо ви хочете абсолютно використовувати K-Means, вам потрібно переконатися, що ваші дані добре працюють з ним.

Представництво

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

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

Якщо категоричне значення не є «рівновіддаленим» і його можна замовити, ви також можете надати категоріям числове значення. Наприклад, дитина, підліток, дорослий потенційно можуть бути представлені як 0, 1 і 2. Це має сенс, оскільки підліток «ближче» до того, щоб бути дитиною, ніж дорослий.

К-медоїди

Більш загальний підхід до K-Means - це K-Medoids. K-Medoids працює аналогічно K-Means, але головна відмінність полягає в тому, що центроїд для кожного кластера визначається як точка, що зменшує суму кластери відстаней у межах кластера. Застосування цього дозволяє використовувати будь-яку міру відстані, яку ви хочете, і, отже, ви можете створити власну власну міру, яка враховує, які категорії мають бути близькими чи ні.


1

Якщо ми розглянемо сценарій, коли категоріальна змінна не може бути гарячо закодована, так як категоріальна змінна має 200+ категорій.

У таких випадках ви можете використовувати пакет clustMixType

Він може обробляти змішані дані (числові та категоричні), вам просто потрібно вводити дані, він автоматично відокремлює категоричні та числові дані.

Якщо ви знайдете будь-які проблеми, як-от якесь числове значення, є категоричним, ви можете в цьому полі покласти asfactor () / навпаки as.numeric (), і перетворити їх у коефіцієнт і подати в ці нові дані в алгоритм.

Обчисліть лямбда, щоб ви могли подавати дані як вхід під час кластеризації.

ми навіть можемо отримати WSS (в межах суми квадратів), графік (ліктьова діаграма), щоб знайти оптимальну кількість кластерів.

Сподіваюся, що ця відповідь допоможе вам отримати більш значущі результати.


1

Багато з вищесказаного вказували на те, що k-засоби можуть бути реалізовані на змінних, категоричних і безперервних, що неправильно, і результати потрібно брати з дрібкою солі.

Як згадував вище @Tim вище, не має сенсу обчислювати евклідову відстань між точками, які не мають ні шкали, ні порядку. Коли ви однозначно кодуєте категоріальні змінні, ви генеруєте розріджену матрицю 0 і 1. Оскільки діапазон значень є фіксованим і між 0 і 1 їх потрібно нормалізувати так само, як і постійні змінні. Зазвичай Z-бали використовуються для пошуку відстані між точками. Що все-таки не зовсім правильно. Я поясню це на прикладі. Оскільки категорії взаємно виключають, відстань між двома точками відносно категоріальних змінних приймає будь-яке з двох значень, високе або низьке, тобто обидва точки належать одній і тій же категорії, або вони не є. Завдяки цим надзвичайним значенням, алгоритм в кінцевому підсумку дає більше ваги над безперервними змінними при впливі на формування кластера. Це можна перевірити за допомогою простої перевірки, побачивши, які змінні впливають, і ви здивуєтеся, побачивши, що більшість з них будуть категоричними змінними. (Способи пошуку найбільш впливових змінних [1])

Приклад: Розгляньте категоричну змінну країну. Тепер, як нам відомо, відстань (несхожість) між спостереженнями різних країн є рівними (припускаючи, що немає інших подібностей, як сусідні країни чи країни одного континенту). Але всупереч цьому, якщо обчислити відстані між спостереженнями після нормалізації одних гарячих закодованих значень, вони будуть невідповідними (хоча різниця незначна) разом з тим, що вони приймають високі або низькі значення.

Зрештою, найкращим варіантом, доступним для python, є k-прототипи, які можуть обробляти як категоричні, так і постійні змінні.

[1]: Пошук найбільш впливових змінних у формуванні кластерів: https://stackoverflow.com/a/53081779/8224401


0

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

Ви можете використовувати пакет R VarSelLCM (доступний на CRAN), який моделює в межах кожного кластера безперервні змінні за розподілами Гаусса та порядкові / двійкові змінні. Подбайте про збереження своїх даних у кадрі data.frame, де постійні змінні є "числовими", а категоричні змінні - "фактором".

Підручник доступний за адресою: http://varsellcm.r-forge.r-project.org/

Крім того, відсутніми значеннями можна керувати моделлю.


0

Я зіткнувся з цією самою проблемою і спробував обробити її навколо (не знаючи, що існують k-прототипи) багата література, з якою я стикався, виникла з ідеї взагалі не вимірювати змінні з однаковою метрикою відстані. Крім того, можуть існувати різні джерела інформації, що може означати різні структури або "погляди" даних. Це природна проблема, коли ви стикаєтесь із соціальними відносинами, такими як на твіттері / веб-сайтах тощо.

Одне з можливих рішень - окремо звертатись до кожного набору змінних (тобто числових та категоричних). Легко зрозуміти, що вимірює відстань у цифровій шкалі. Категоричні дані самі по собі можна зрозуміти так само легко: Розглянемо наявність бінарних векторів спостереження: Таблиця дій на 0/1 між двома векторами спостереження містить багато інформації про одночасність між цими двома спостереженнями. Існує багата література про різні спеціалізовані заходи подібності бінарних векторів - більшість починається з таблиці надзвичайних ситуацій.

Враховуючи обидві матриці відстані / подібності, обидві описують однакові спостереження, можна витягти графік на кожному з них (Multi-View-Graph-Clustering) або витягнути один графік з кількома ребрами - кожен вузол (спостереження) з такою кількістю ребер до інший вузол, оскільки є інформаційні матриці (Multi-Edge-Clustering). Кожному краю присвоюється вага відповідної міри подібності / відстані. Почніть тут: Перелік алгоритмів кластерного кластеризації Github та їхніх робіт. Оскільки в одному спостереженні є безліч наборів інформації, вони повинні бути переплетені за допомогою, наприклад, нащадків спектрального аналізу або пов'язаної матричної факторизації. Спектральний аналіз є методом за замовчуванням для пошуку сильно пов'язаних або сильно зважених частин одиничних графіків. Маючи спектральне вбудовування переплетених даних, будь-який алгоритм кластеризації числових даних може легко працювати. За замовчуванням література - це kmeans з точки зору простоти, але куди більш досконала - і це не такі обмежувальні алгоритми, які в даному контексті можуть бути взаємозамінними.

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

З точки зору масштабованості, враховуючи, що існують переважно дві проблеми:

  1. Наближення проблеми власності (де також існує багата література алгоритмів)
  2. Оцінка матриці відстані (суто комбінаторна проблема, яка швидко зростає - я ще не знайшов ефективного способу її вирішення)

Повеселіться!


0

Можливо, ви захочете ознайомитися з автоматичною інженерною функцією: http://www.orges-leka.de/automatic_feature_engineering.html . Метод заснований на Bourgain Embedding і може бути використаний для отримання числових ознак із змішаних категоричних та числових кадрів даних або для будь-якого набору даних, який підтримує відстані між двома точками даних. Перетворивши дані лише на числові ознаки, можна використовувати кластеризацію K-засобів безпосередньо

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