Określ różne klastry danych 1d z bazy danych

24

Mam tabelę bazy danych przesyłania danych między różnymi węzłami. To ogromna baza danych (z prawie 40 milionami transferów). Jednym z atrybutów jest liczba transferów bajtów (nbajtów) w zakresie od 0 bajtów do 2 tera bajtów. Chciałbym zgrupować nbytes w taki sposób, aby dane k klastrów zawierały niektóre transfery x1 należące do klastra k1, transfery x2 do k2 itd.

Z terminologii, której użyłem, mogłeś odgadnąć, o co mi chodziło: K-znaczy. To dane 1d, ponieważ nbytes to jedyna funkcja, na której mi zależy. Kiedy szukałem różnych metod do tego, zobaczyłem EM kilka razy wspomniane wraz z podejściem bezklastrowym. Chciałbym wiedzieć o twoich poglądach na temat tego, jak podejść do tego problemu (w szczególności, czy skupić się na klastrowaniu czy nie).

Dzięki!

Shaun
źródło
Co to są „transfery x1”, „transfery x2” itp.? Czy „typ transferu” jest drugą zmienną?
Peter Flom - Przywróć Monikę
Transfery x1 to dla mnie tylko sposób na stwierdzenie, że te 500 transferów miało wielkość transferu wokół pewnej wartości (byłby to średni dla tego klastra w k-średnich).
Shaun
5
Nie jestem ekspertem w dziedzinie klastrowania, ale z tak dużą ilością danych i tylko 1 wymiarem, zastanawiam się, czy możesz po prostu stworzyć wykresy gęstości jądra przy użyciu różnych szerokości pasma i zobaczyć, ile trybów / pików znajdziesz i czy wynik wydaje się podobny przydałby ci się.
gung - Przywróć Monikę
1
Zapytałeś, czy chcesz klastrować, czy nie. Jaki byłby twój cel z klastrowania? Czy użyłbyś klastrów do innych celów, czy może to mieć teoretyczne znaczenie?
Peter Flom - Przywróć Monikę
Niektóre inne atrybuty z tabeli to nazwa użytkownika, data początkowa i końcowa. Mam nadzieję, że poprzez grupowanie przelewów w oparciu o wielkość przelewu, będę mógł odwołać się do innych atrybutów konkretnego przelewu, aby zobaczyć, kto przesyła kwotę w jakim miesiącu. Co zrobimy z tą obserwacją, jeszcze nie wiem. Ale do tego właśnie zmierzam.
Shaun

Odpowiedzi:

43

W danych jednowymiarowych nie używaj analizy skupień.

Analiza skupień jest zwykle techniką wielowymiarową. Albo pozwólcie, że lepiej to odwrócę: w przypadku danych jednowymiarowych - które są całkowicie uporządkowane - istnieją znacznie lepsze techniki. Używanie k-średnich i podobnych technik jest tutaj całkowitym marnotrawstwem, chyba że włożycie wystarczająco dużo wysiłku, aby faktycznie zoptymalizować je dla przypadku 1-d.

Podam przykład: dla k-oznacza często używa się k losowych obiektów jako początkowych nasion. W przypadku danych jednowymiarowych dość łatwo jest to zrobić lepiej, stosując odpowiednie kwantyle (1 / 2k, 3 / 2k, 5 / 2k itp.), Po jednokrotnym posortowaniu danych , a następnie optymalizacji od tego punktu początkowego. Jednak danych 2D nie można całkowicie posortować. A w siatce prawdopodobnie będą puste komórki.

Nie nazwałbym tego też klastrami. Nazwałbym to interwałem . To, co naprawdę chcesz zrobić, to zoptymalizować granice interwałów. Jeśli użyjesz k-średnich, przetestuje dla każdego obiektu, czy powinien zostać przeniesiony do innego klastra. To nie ma sensu w 1D: należy sprawdzać tylko obiekty na granicy przedziałów. To oczywiście jest znacznie szybsze, ponieważ jest tam tylko ~ 2k obiektów. Jeśli nie wolą już innych interwałów, więcej centralnych obiektów też nie będzie.

Możesz przyjrzeć się takim technikom, jak na przykład optymalizacja Jenks Natural Breaks .

Możesz też dokonać oszacowania gęstości jądra i poszukać lokalnych minimów gęstości do podziału. Zaletą jest to, że nie musisz w tym celu określać k!

PS skorzystaj z funkcji wyszukiwania. Oto kilka pytań dotyczących klastra danych 1-d, które przegapiłeś:

Anony-Mus
źródło
Kwantyle niekoniecznie zgadzają się z klastrami. Rozkład 1d może mieć 3 klastry naturalne, z których dwa przechowują po 10% danych, a ostatni zawiera 80% danych. Myślę więc, że można tutaj skupić się, chociaż zgadzam się, że rozsądnie jest zoptymalizować przebieg poprzez inteligentne zbieranie nasion itp. Lub wykorzystanie innych pomysłów.
Bitowe
Kwantyle są prawdopodobnie dobrymi punktami początkowymi do optymalizacji , do tego właśnie miałem na myśli. I żeby dać przykład tego, co możesz zrobić w 1D, co nie działa tak dobrze w 2+ wymiarach.
Anony-Mousse
Zgadzam się, że warto byłoby użyć kwantyli jako nasion, ale nadal spróbowałbym losowych inicjalizacji (na przykład takich, jakie podałem). W każdym razie najlepszą metodą byłoby po prostu spojrzeć na wykres histogramu / gęstości i ręcznie wybrać nasiona, a następnie zoptymalizować je za pomocą grupowania. To bardzo szybko zbiegnie się w dobre rozwiązanie.
Bitowy
3
Jenks ma k-średnich w 1D.
whuber
1
@ whuber, nawet jeśli jest to matematyczne, mam nadzieję, że był wystarczająco inteligentny, by wykorzystać dane, które można zamówić . Jeśli używasz metody Lloyda do robienia średnich k na danych 1-d, jesteś głupi, ponieważ wykonujesz wiele obliczeń, które możesz pominąć. A dla większości ludzi k-oznacza to Lloyd. A niektórym ludziom zależy na unikaniu niepotrzebnych ponownych obliczeń.
Anony-Mus
1

Czy Twoje pytanie dotyczy klastrowania lub jakiej metody należy użyć do klastrowania?

To, czy powinieneś klastrować, zależy od tego, czy chcesz automatycznie podzielić dane na partycje (na przykład, czy chcesz kilkakrotnie powtórzyć partycjonowanie). Jeśli robisz to tylko raz, możesz po prostu spojrzeć na histogram rozkładu swoich wartości i podzielić go na oko, jak zaproponowano w komentarzach. W każdym razie zaleciłbym spojrzenie na dane, ponieważ mogłoby to pomóc określić, ile klastrów chcesz, a także czy klaster „zadziałał”.

Jeśli chodzi o rodzaj klastrowania, k-średnich powinno być w porządku, jeśli w danych znajdują się „prawdziwe” klastry. Jeśli nie widzisz żadnych klastrów na histogramie, to i tak nie ma większego sensu tworzenie klastrów, ponieważ każde podzielenie zakresu danych da prawidłowe klastry (lub w przypadku losowej inicjacji kmeans, otrzymasz różne klastry każdy bieg).

Bitowe
źródło