Який алгоритм я повинен використовувати для кластеризації величезного бінарного набору даних у декілька категорій?


11

У мене є велика (650 К рядків * 62 стовпчики) матриця двійкових даних (лише 0-1 записи). Матриця переважно розріджена: заповнено близько 8%.

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

Будь ласка, допоможіть.


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

Чи є якісь підстави припускати, що дані, природно, поділяються на п'ять груп, принаймні в якійсь мірі? Вас дійсно цікавить кластеризація рядків, або вас також цікавлять відносини між 62 ознаками, закодованими у бітових векторах? Якщо останні, то інші методи більше підходять.
мікан

Відповіді:


4

Ви ставите неправильне запитання.

Замість того, щоб запитувати "який алгоритм", ви повинні запитувати "що є змістовною категорією / кластером у вашій програмі".

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

Ви можете замість цього спробувати k-режими, IIRC. Це варіант, який насправді призначений для використання з категоріальними даними, а двійкові дані дещо категоричні (але розрідження все одно може вбити вас).

Перш за все, ви видалили дублікати, щоб спростити свої дані, і видалили унікальні / порожні стовпці, наприклад?

Можливо, APRIORI або подібні підходи також мають більш важливе значення для вашої проблеми.

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


Чи можете ви пояснити, чому "Не використовувати з дистанцією Хеммінга"? Це може мати сенс, адже він доступний в Matlab. Я не проти відкрити нове запитання, якщо це має сенс.
Dror Atariah

Через середину. Середнє арифметичне є безглуздим із забиттям відстані чи двійкових даних. Використовуйте натомість режим або медоїд .
Мав QUIT - Anonymous-Mousse

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

k-означає називається k- означає, що він використовує середнє. В іншому випадку це називається k-медоїдами, k-режимами тощо. Середнє значення добре для L2 - сума відхилень у квадраті.
Мав QUIT - Anonymous-Mousse

Отже, matlab використовує k- засоби разом із метрикою забивання; це не має особливого сенсу.
Dror Atariah

3

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

Адаптивна теорія резонансу - хороший алгоритм для задач бінарної класифікації. Перевірте про ART 1. Більше інформації ви можете побачити у безкоштовній книзі дизайну нейронних мереж у розділі 19.

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


2

Класичним алгоритмом кластеризації бінарних даних є модель суміші Бернуллі. Модель може бути придатною за допомогою байєсівських методів, а також може бути придатною також за допомогою EM (Expectation Maximization). Ви можете знайти зразок пітонного коду в усьому GitHub, коли перший є більш потужним, але й складнішим. У мене є реалізація моделі C # на GitHub (використовує Infer.NET, який має обмежувальну ліцензію!).

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

У налаштуваннях Баєса першочергові кластерні завдання - це розподіл Діріхле. Це місце, щоб поставити пріори, якщо ви вважаєте, що деякі кластери більше, ніж інші. Для кожного кластера необхідно вказати попередній, бета-розподіл, для кожного дистрибутива Бернуллі. Зазвичай це попереднє значення є бета (1,1) або рівномірним. Нарешті, не забудьте випадково ініціалізувати призначення кластерів при наданні даних. Це порушить симетрію, і пробовідбірник не застрягне.

Є кілька цікавих особливостей моделі BMM в байєсівських умовах:

  1. Інтернет-кластеризація (дані можуть надходити як потік)

  2. Модель може використовуватися для висновку про відсутні розміри

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

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