Na tym blogu dowiesz się, czym jest grupowanie K-średnich i jak można je wdrożyć na danych kryminalnych zebranych w różnych stanach USA. Dane obejmują przestępstwa popełnione, takie jak: napaść, morderstwo i gwałt w aresztach na 100 000 mieszkańców w każdym z 50 stanów USA w 1973 r. Wraz z analizą danych dowiesz się również o:
- Znalezienie optymalnej liczby klastrów.
- Minimalizacja zniekształceń
- Tworzenie i analiza krzywej łokcia.
- Zrozumienie mechanizmu działania algorytmu k-średnich.
Zacznijmy od analizy. Dane wyglądają następująco:

Kliknij obraz, aby pobrać ten zestaw danych
Potrzebujesz tego zbioru danych? Kliknij powyższy obrazek, aby go pobrać.
Najpierw przygotujmy dane do analizy. Aby to zrobić, powinniśmy usunąć wszelkie wartości NA, które mogą być obecne w danych i przekształcić dane w macierz.
> crime0 crime str (crime) num [1:50, 1: 4] 13,2 10 8,1 8,8 9 7,9 3,3 5,9 15,4 17,4 ... - attr (*, 'dimnames') = Lista 2 .. $: chr [1 : 50] „Alabama” „Alaska” „Arizona” „Arkansas” ... .. $: chr [1: 4] „Murder” „Assault” „UrbanPop” „Rape”
Przyjmijmy, że liczba klastrów wynosi 5. Funkcja Kmeans () pobiera dane wejściowe i liczbę klastrów, w których dane mają być skupione. Składnia jest następująca: kmeans (dane, k) gdzie k to liczba centrów klastrów.
> cl class (cl) [1] 'kmeans'
Analiza klastrowania:
> str (cl) Lista 9 $ klastrów: o nazwie int [1:50] 5 3 3 5 3 5 4 5 3 5 ... ..- attr (*, 'names') = chr [1:50] ' Alabama '' Alaska '' Arizona '' Arkansas '... $ centra: num [1: 5, 1: 4] 2,95 6,11 12,14 5,59 11,3 ... ..- attr (*,' dimnames ') = Lista 2 .. .. $: chr [1: 5] '1' '2' '3' '4' ... .. $: chr [1: 4] 'Morderstwo' 'Napad' 'UrbanPop' 'Gwałt '$ totss: num 355808 $ withinss: num [1: 5] 4548 2286 16272 1480 3653 $ tot.withinss: num 28240 $ między: num 327568 $ rozmiar: int [1: 5] 10 9 14 10 7 $ iter: int 3 $ ifault: int 0 - attr (*, 'class') = chr 'kmeans'
Funkcja str () podaje strukturę kmeans, która obejmuje różne parametry, takie jak ins, między, itp., Analizując, które można znaleźć w wydajności kmeans.
betweenss: między sumą kwadratów, tj. podobieństwo wewnątrz klastra
withinss: W ramach sumy kwadratów, tj. podobieństwa między klastrami
totwithinss: Suma wszystkich inin wszystkich klastrów, tj. całkowite podobieństwo wewnątrz klastra
Dobre skupienie będzie miało niższą wartość inns i wyższą wartość między skupiskami, która zależy od liczby początkowo wybranych klastrów „k”. Zobaczmy, jak możemy znaleźć optymalną wartość „k”.
Znajdowanie optymalnej wartości „k”
Optymalna wartość „k” to wartość, która daje nam zbieżny zbiór skupień z minimalnym zniekształceniem. Większe zniekształcenie, gorsze będą utworzone klastry.
Zniekształcenie:
Zniekształcenie można obliczyć jako „winy” z każdego z klastrów. Mniejsza wartość „inins” danego klastra, będzie gęstsza, a tym samym minimalne zniekształcenia.
kmeans.wss.k<- function(crime, k){ km = kmeans(crime, k) return (km$tot.withinss) }
Ta funkcja pobiera dane i wartość k i zwraca dla niej „km $ totwithinss”. „Km $ totwithinss” to całkowita suma kwadratów wewnątrz klastra, obejmująca zatem winy wszystkich 5 utworzonych klastrów, tj.suma (withinss)
. Im wyższa wartość „km $ totwithinss”, tym większe będzie zniekształcenie.
Dla k = 5, withinss wynosi 24417,02
> kmeans.wss.k (przestępstwo, 5) [1] 24417.02
Zwiększmy wartość k z 5 do 10 i obserwujmy różnicę.
> kmeans.wss.k (przestępstwo, 10) [1] 11083.04
Można zauważyć, że wraz ze wzrostem wartości K zniekształcenie maleje.
Możemy pobrać różne wartości „km $ totwithinss” i wykreślić je na wykresie, aby znaleźć zależność między zniekształceniem a wartością k. Następująca funkcja robi to za nas:
> kmeans.dis maxk = 10> dis = kmeans.dis (crime, maxk)> plot (1: maxk, dis, type = 'b', xlab = 'Number of Clusters', + ylab = 'Distortion', + col = „niebieski”)
Ta Da !!! Mamy więc ze sobą słynną krzywiznę łokciową.
Krzywa łokcia:
jak używać atomu w Pythonie
To jest wykres między „k”, liczbą skupień i „totwithinss” (lub zniekształceniem) dla każdej wartości k. Możesz zobaczyć, że gdy liczba klastrów jest mniejsza, następuje stopniowy spadek zniekształceń, ale w miarę zwiększania wartości k tempo zmniejszania się wartości zniekształceń staje się stałe.
Ta wartość k, powyżej której współczynnik zniekształceń staje się stała, jest wartością optymalną. Tutaj k = 4.
Zastosujmy trochę animacji, aby zrozumieć, w jaki sposób R dał nam wyniki grupowe.
> biblioteka (animacja)> cl<- kmeans.ani(crime, 4)
Algorytm grupowania Kmeans:
Rozumiemy algorytm, na którym działa grupowanie k-średnich:
Krok 1. Jeżeli k = 4, wybieramy 4 losowe punkty i zakładamy, że są to centra skupień dla tworzonych klastrów.
Krok 2. Pobieramy losowy punkt danych z kosmosu i określamy jego odległość od wszystkich centrów 4 klastrów. Jeśli punkt danych znajduje się najbliżej zielonego środka klastra, jest pokolorowany na zielono i podobnie wszystkie punkty są podzielone na 4 klastry.
Krok 3. Teraz obliczamy środek ciężkości wszystkich zielonych punktów i przypisujemy ten punkt jako środek klastra dla tego klastra.
Podobnie obliczamy centroidy dla wszystkich 4 kolorowych (zgrupowanych) punktów i przypisujemy nowe centroidy jako środki skupień.
Krok 4. Krok-2 i krok-3 są uruchamiane iteracyjnie, chyba że centra skupień zbiegają się w jakimś punkcie i już się nie poruszają.
W ten sposób docieramy do skupionych centrów skupień.
Można zauważyć, że dane są podzielone na 4 skupienia. Centra klastrów to:
> cl $ center Morderstwo Napad UrbanPop Gwałt Teksas 4.740741 104.8519 62.96296 16,10 Luizjana 10.907143 219.9286 71.71429 25,95 Karolina Południowa 13.375000 284.5000 46,25000 25.05 Nowy Meksyk 11.040000 298.0000 77.60000 32,68
Klaster-4 z „Nowym Meksykiem” jako centrum klastra ma ogromny wskaźnik przestępczości, również z największą populacją.
Kontynuacja klastra-3 i klastra-2.
jak przekonwertować liczbę dziesiętną na dwójkową w Pythonie
Każdy stan ma przypisany klaster, w zależności od tego, który możemy teraz przewidzieć jego ranking przestępczości. Wynik wygląda następująco:
Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy, a my skontaktujemy się z Tobą.
Powiązane posty: