Великі дані кластера в R та чи є вибірка релевантною?


13

Я новачок у науці даних і маю проблему з пошуку кластерів у наборі даних із 200 000 рядків та 50 стовпців у Р.

Оскільки дані мають як числові, так і номінальні змінні, такі методи, як K-засоби, які використовують евклідову міру відстані, не здаються відповідним вибором. Тому я звертаюся до PAM, agnes та hclust, який приймає матрицю відстані як вхідний.

Метод Дейзі може працювати на даних змішаного типу, але матриця відстані є занадто великою: 200 000 разів 200 000 набагато більше, ніж 2 ^ 31-1 (межа довжини вектора до R 3.0.0.)

Новий R 3.0.0, випущений вчора, підтримує довгі вектори довжиною більше 2 ^ 31-1. Але подвійна матриця 200 000 на 200 000 вимагає безперервної оперативної пам’яті більше 16 Гбіт, що неможливо на моїй машині.

Я читав про паралельні обчислення та пакет bigmemory, і не впевнений, чи допоможуть вони: якщо я використовую Дейзі, вона створить велику матрицю, яка ніяк не може вміститись у пам'яті.

Я також читав про публікацію про вибірку: Чи є вибірка релевантною під час «великих даних»?

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

Чи можете ви, будь ласка, дати мені якусь пропозицію? Дякую!

Про мою машину:

R версія 3.0.0 (2013-04-03)

Платформа: x86_64-w64-mingw32 / x64 (64-розрядна)

ОС: Windows 7 64bit

ОЗУ: 16,0 Гб


Єдиний метод кластеризації, який я знаю, який призначений для великих даних (наприклад, мільйони випадків) і який може приймати номінальні змінні поряд з числовими - це кластер TwoStep, знайдений у SPSS.
ttnphns

Відповіді:


4

Як ви вже помітили, будь-який метод, який вимагає матриці на повну відстань, не буде працювати. Пам'ять - це одне, але інше - це час виконання. Типові реалізації ієрархічної кластеризації знаходяться в (я знаю, що ELKI має SLINK, який є алгоритмом для односхилового кластеризації). Це просто не масштабується до великих наборів даних.O ( n 2 )O(n3)O(n2)

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

Натомість слід розглянути методи, які можуть використовувати індексні структури для прискорення. З хорошим індексом такі алгоритми кластеризації можуть працювати в що набагато краще для великих наборів даних.O(nlogn)

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

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


Тут не допоможе ОП, але у випадку, якщо хтось інший прийде, хто має "проміжні" номери вибірки: також існує швидкий кластер для R (див. Math.stanford.edu/~muellner/fastcluster.html ).
cbeleites незадоволений SX

Привіт, Аноні-Мус, чи не могли б ви вказати мені на деякі алгоритми, що використовують прискорення структури індексу? Дуже дякую!

Наприклад, DBSCAN можна добре прискорити за допомогою індексів, які підтримують запити діапазону epsilon. Можливо, мається на увазі і кластерна зміна. ОПТИКА, яку також можна прискорити таким чином, можна розглядати як більш досконалу версію кластеризації зв'язків (можна назвати її "ієрархічна кластеризація зв'язків щільності")
Має QUIT - Anonymous-Mousse

2

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

http://en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Clustering/CLARA


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

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

0

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


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