Визначте різні кластери 1d даних із бази даних


24

У мене є база даних даних про передачу даних між різними вузлами. Це величезна база даних (майже 40 мільйонів передач). Одним з атрибутів є кількість переданих байтів (нбайт), яка становить від 0 байт до 2 тера байт. Я б хотів кластеризувати nbytes таким чином, що за даними кластерів k деякі передачі x1 належать кластеру k1, x2 передавачі - k2 і т.д.

З термінології, яку я використав, ви могли здогадатися, з чим я йду: K-означає. Це 1d дані, оскільки нібайти - це єдина особливість, яка мене хвилює. Коли я шукав для цього різні методи, я побачив, що ЕМ згадувалося кілька разів разом із некластерним підходом. Мені хотілося б дізнатися про ваші погляди на те, як підійти до цієї проблеми (зокрема, кластеризувати чи ні).

Спасибі!


Що таке "передачі x1", "x2 передачі" тощо? Чи "тип передачі" є другою змінною?
Пітер Флом - Відновіть Моніку

x1 передача - це лише спосіб сказати, що ці 500 передач мали розмір передачі близько деякого значення (це було б середнім значенням для цього кластеру в k-значенні).
Шаун

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

1
Ви запитували, кластеризувати чи ні. Яка була б ваша мета з кластеризації? Чи використовуєте ви кластери з якоюсь іншою метою, чи це теоретично цікавить?
Пітер Флом - Відновіть Моніку

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

Відповіді:


43

В одновимірних даних не використовуйте кластерний аналіз.

Кластерний аналіз зазвичай є багатоваріантною методикою. Або дозвольте краще сказати навпаки: для одновимірних даних - які повністю упорядковані - є набагато кращі методи. Використання k-засобів та подібних методів тут є загальним відходом, якщо ви не докладете достатньо зусиль, щоб фактично оптимізувати їх для 1-денного випадку.

Просто для прикладу: для k-значить звичайно використовувати k випадкові об'єкти як початкові насіння. Для одновимірних даних зробити це досить просто, просто використовуючи відповідні квантили (1 / 2k, 3 / 2k, 5 / 2k тощо), після сортування даних один раз , а потім оптимізацію з цієї вихідної точки. Однак 2D дані не можуть бути відсортовані повністю. І в сітці, ймовірно, будуть порожні комірки.

Я також не назвав би це кластером. Я б назвав це інтервалом . Що ви дійсно хочете зробити, це оптимізувати межі інтервалу. Якщо ви робите k-означає, він перевірятиме для кожного об'єкта, чи слід його перенести на інший кластер. Це не має сенсу в 1D: потрібно перевіряти лише об'єкти на інтервальних межах. Це, очевидно, набагато швидше, оскільки там є лише ~ 2k об'єктів. Якщо вони вже не віддають перевагу іншим інтервалам, більше центральних об'єктів також не буде.

Ви можете розглянути такі методи, як , наприклад, оптимізація природних розривів Jenks , наприклад.

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

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


Квантили не обов'язково погоджуються з кластерами. Розподіл 1d може мати 3 природних кластера, де два містять 10% даних кожен, а останній містить 80% даних. Тому я думаю, що тут можна скупчитись, хоча я погоджуюся, що має сенс оптимізувати пробіг, спритно збираючи насіння тощо тощо або використовуючи інші ідеї.
Побіт

Кванти, ймовірно, є хорошими насінними точками для оптимізації , саме про це я і мав на увазі. І просто навести приклад того, що ви можете зробити в 1D, що не так добре працює в 2+ вимірах.
Аноні-Мус

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

3
Дженкс є k-означає в 1D.
whuber

1
@whuber, навіть якщо це математично, я сподіваюся, що він був досить розумним, щоб використовувати дані, які можна замовити . Якщо ви використовуєте підхід Ллойда для того, щоб робити k-засоби на 1-й даних, ви нерозумні, тому що робите багато обчислень, які могли пропустити. І для більшості людей k-означає Ллойд. А дехто дбає про те, щоб уникнути зайвих обчислень.
Аноні-Мус

1

Ваше питання, чи варто кластеризувати або який метод ви повинні використовувати для кластеру?

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

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


0

Ви можете спробувати:

  1. KMeans, GMM чи інші методи, вказавши n_clusters = ні. піків на графіку щільності ядра.

  2. KMeans, GMM або інші методи шляхом визначення оптимального немає. кластерів на основі деяких показників. Більше інформації: [тут] https://en.wikipedia.org/wiki/Determining_the_number_of_clusters_in_a_data_set

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