Spørgsmål:
Bestem forskellige klynger af 1d-data fra databasen
Shaun
2012-10-15 19:58:50 UTC
view on stackexchange narkive permalink

Jeg har en databasetabel over dataoverførsler mellem forskellige noder. Dette er en enorm database (med næsten 40 millioner overførsler). En af attributterne er antallet af byteoverførsler (nbytes), der spænder fra 0 byte til 2 terabyte. Jeg vil gerne klynge nbytes sådan, at givet k-klynger nogle x1-overførsler tilhører k1-klynge, x2-transfere til k2 osv.

Fra den terminologi, jeg brugte, har du måske gættet, hvad jeg gik med: K -midler. Dette er 1d data, da nbytes er den eneste funktion, jeg holder af. Da jeg ledte efter forskellige metoder til dette, så jeg, at EM blev nævnt et par gange sammen med en ikke-klyngetilgang. Jeg vil gerne vide om dine synspunkter om, hvordan man skal tackle dette problem (specifikt om man skal klynge eller ikke klynge).

Tak!

Hvad er "x1 overførsler", "x2 overførsler" osv.? Er "overførselstype" en anden variabel?
x1 overførsler er bare en måde for mig at sige, at disse 500 overførsler havde overførselsstørrelse omkring en eller anden værdi (dette ville være gennemsnittet for den klynge i k-middel).
Jeg er ikke ekspert på klyngedannelse, men med så mange data og kun 1 dimension, jeg spekulerer på, om du bare kunne lave nogle [kernetæthedsdiagrammer] (http://en.wikipedia.org/wiki/Kernel_density_estimation) ved hjælp af forskellige båndbredder og se, hvor mange tilstande / toppe du finder, og om resultatet ser ud til at være nyttigt for dig.
Du spurgte, om du skulle klynge eller ej. Hvad ville være dit mål fra klyngedannelse? Vil du bruge klyngerne til et andet formål, eller er dette af teoretisk interesse?
Nogle af de andre attributter fra tabellen er brugernavn, start- og slutdatoer. Mit håb er ved at gruppere overførslerne baseret på overførselsstørrelse, så kan jeg henvise til andre attributter for en bestemt overførsel for at se, hvem der overfører hvor meget i hvilken måned af året. Hvad vi vil gøre med denne observation, ved jeg ikke endnu. Men det er sådan, hvor jeg skal hen.
Brug søgefunktionen. For eksempel: http://stats.stackexchange.com/questions/13781/clustering-1d-data
@Shaun Jeg er enig i svarene / kommentarerne.Jeg havde brug for at gøre noget lignende for nylig, så jeg byggede et histogram og indstillede antallet af skraldespande.Dette fik jobbet gjort i mit tilfælde.Kan også arbejde for dig!:-)
Fire svar:
Has QUIT--Anony-Mousse
2012-10-16 00:32:43 UTC
view on stackexchange narkive permalink

I en dimensionelle data skal du ikke bruge klyngeanalyse.

Klyngeanalyse er normalt en multivariat teknik. Eller lad mig bedre sige det omvendt: for endimensionelle data - som er ordnet fuldstændigt - er der meget bedre teknikker. Brug af k-middel og lignende teknikker her er et totalt spild, medmindre du lægger nok kræfter på at faktisk optimere dem til 1-d-sagen.

Bare for at give dig et eksempel: for k-betyder det almindeligt at bruge k tilfældige objekter som indledende frø. For en-dimensionelle data er det ret nemt at gøre det bedre ved blot at bruge de relevante kvantiler (1 / 2k, 3 / 2k, 5 / 2k osv.), Efter at have sorteret dataene en gang og derefter optimere fra dette udgangspunkt. 2D-data kan imidlertid ikke sorteres fuldstændigt. Og i et gitter vil der sandsynligvis være tomme celler.

Jeg vil heller ikke kalde det klynge. Jeg vil kalde det interval . Hvad du virkelig vil gøre er at optimere intervalgrænserne. Hvis du gør k-middel, tester den for hvert objekt, om det skal flyttes til en anden klynge. Det giver ikke mening i 1D: kun objekterne ved intervalgrænserne skal kontrolleres. Det er naturligvis meget hurtigere, da der kun er ~ 2k objekter der. Hvis de ikke allerede foretrækker andre intervaller, vil flere centrale objekter heller ikke.

Det kan være en god idé at undersøge teknikker som Jenks Natural Breaks optimering f.eks.

Eller du kan foretage en estimering af kernetæthed og se efter lokale minima for densiteten, der skal opdeles der. Det pæne er, at du ikke behøver at specificere k til dette!

Se dette svar for et eksempel, hvordan du gør dette i Python (grønne markører er klyngetilstande; rød markerer et punkt, hvor dataene er klippet; y-aksen er en log-sandsynlighed for densiteten):

KDE with Python

PS brug søgefunktionen. Her er nogle spørgsmål om 1-d dataklynger, som du gik glip af:

Kvantiler er ikke nødvendigvis enige med klynger. En 1d-distribution kan have 3 naturlige klynger, hvor to har 10% af dataene hver, og den sidste indeholder 80% af dataene. Så jeg tror, ​​det er muligt at klynge sig her, selvom jeg er enig, er det fornuftigt at optimere løbet ved at plukke frø smart osv. Eller bruge andre ideer.
Kvantilerne er sandsynligvis gode frøpoint til * optimering *, det var det, jeg henviste til. Og bare for at give et eksempel på, hvad du kan gøre i 1D, der ikke fungerer så godt i 2+ dimensioner.
Jeg er enig i, at det ville være et skud værd at bruge kvantiler som frø, men jeg ville stadig prøve nogle tilfældige initialiseringer (for eksempler som den jeg gav). Under alle omstændigheder er den bedste metode bare at se på histogrammet / densitetsplottet og manuelt vælge frø og derefter optimere dem med klyngen. Det konvergerer meget hurtigt til en god løsning.
I et lignende spørgsmål foreslog jeg også at foretage en kernefejning og se efter lokale minima som splitpunkter. Jeg ved bare ikke, om det var her på statistik eller på det vigtigste SO-sted. Lad mig slå det op og linke det.
Åh, og k-middel udfører unødvendige kontroller af 1d-data, da det ikke udnytter konveksitet. Jeg har opdateret mit svar med, hvordan man laver en meget hurtigere 1d-kmeans ved kun at se på elementer tæt på intervalgrænserne. Men det vil sandsynligvis koge ned til Jenks eller en lignende metode. Når alt kommer til alt er der millioner af algoritmer til 1d-data.
ok, du fik min stemme :) ... stadig hvis k-betyder er, hvad OP kender og er fortrolig med, er det rimeligt
Jenks * er * k-betyder i 1D.
@whuber, selvom det matematisk er, håber jeg, at han var smart nok til at * udnytte, at dataene kan bestilles *. Hvis du bruger Lloyd-metoden til at udføre k-middel på 1-d-data, er du dum, fordi du laver en masse beregninger, som du kunne springe over. Og for de fleste er k-betyder Lloyd. Og nogle mennesker er ligeglade med at undgå unødvendige genberegninger.
jlfranco
2019-12-19 04:46:13 UTC
view on stackexchange narkive permalink

En-dimensionel klyngedannelse kan udføres optimalt og effektivt, hvilket muligvis kan give dig indsigt i strukturen af dine data.

I det endimensionelle tilfælde er der metoder, der er optimale og effektive (O (kn)), og som en bonus er der endda regelmæssige klyngealgoritmer, der giver dig mulighed for automatisk at vælge antallet af klynger!Jeg anbefaler denne undersøgelse: https://cs.au.dk/~larsen/papers/1dkmeans.pdf R-implementeringer kan findes på Ckmeans.1d.dp-pakken: https://cran.r-project.org/web/packages/Ckmeans.1d.dp/index.html

Som en sidebemærkning kan 1-dimensionel gruppering bruges til kvantisering, hvor du repræsenterer dine inputdata ved hjælp af et mindre sæt værdier;dette kan hjælpe med komprimering eller for eksempel at fremskynde søgningen.

Dette rum er beregnet til at besvare dette spørgsmål 7 og ikke diskutere et andet.
Bitwise
2012-10-15 21:21:08 UTC
view on stackexchange narkive permalink

Er dit spørgsmål, om du skal klynge, eller hvilken metode du skal bruge til at klynge?

Hvad angår, om du skal klynge, afhænger det af, om du automatisk vil partitionere dine data (for eksempel hvis du vil gentage denne partition flere gange). Hvis du kun gør dette en gang, kan du bare se på histogrammet for fordelingen af ​​dine værdier og opdele det med øjet som foreslået i kommentarerne. Jeg vil alligevel anbefale at se på dataene med øjet, da det kan hjælpe dig med at bestemme, hvor mange klynger du vil have, og også om klyngen "fungerede".

Med hensyn til typen af ​​klynger skal k-middel være fint hvis der er "rigtige" klynger i dataene. Hvis du ikke ser nogen klynger i histogrammet, giver det ikke meget mening at gruppere det alligevel, da enhver opdeling af dit dataområde vil give gyldige klynger (eller i tilfælde af tilfældig start af kmeans, får du forskellige klynger hver kørsel).

Amarpreet Singh
2018-07-20 11:51:41 UTC
view on stackexchange narkive permalink

Du kan prøve:

  1. KMeans, GMM eller andre metoder ved at angive n_clusters = nr.af toppe i kernedensitetsplot.

  2. KMeans, GMM eller andre metoder ved at bestemme det optimale nr.af klynger baseret på nogle målinger.Mere info: [her] https://en.wikipedia.org/wiki/Determining_the_number_of_clusters_in_a_data_set



Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 3.0-licens, den distribueres under.
Loading...