K-Means untuk analisis data kejahatan
Clustering adalah teknik eksplorasi data yang digunakan untuk menemukan grup atau pola dalam himpunan data. Ada dua strategi pengelompokan standar: metode partisi dan pengelompokan hierarkis.Algoritma partisi yang paling terkenal dan umum digunakan termasuk: K-means clustering (MacQueen, 1967), di mana, setiap cluster diwakili oleh pusat atau sarana titik data milik cluster.
Ada beberapa pendekatan yang digunakan dalam mengembangkan metode clustering. Dua pendekatan utama adalah clustering dengan pendekatan partisi dan clustering dengan pendekatan hirarki. Clustering dengan pendekatan partisi atau sering disebut dengan partition-based clustering mengelompokkan data dengan memilah-milah data yang dianalisa ke dalam cluster-cluster yang ada. Clustering dengan pendekatan hirarki atau sering disebut dengan hierarchical clustering mengelompokkan data dengan membuat suatu hirarki berupa dendogram dimana data yang mirip akan ditempatkan pada hirarki yang berdekatan dan yang tidak pada hirarki yang berjauhan. Di samping kedua pendekatan tersebut, ada juga clustering dengan pendekatan automatic mapping (Self-Organising Map/SOM).
K-means merupakan salah satu pengelompokan data nonhierarki (sekatan) yang berusaha mempartisi data yang ada ke dalam bentuk dua atau lebih kelompok. Tujuan pengelompokan data ini adalah meminimalkan fungsi objektif yang diset dalam proses pengelompokan, yang berusaha meminimalkan variasi di dalam suatu kelompok dan memaksimalkan variasi antarkelompok.
Metode K-Means berusaha mengelompokkan data yang ada ke dalam beberapa kelompok, dimana data dalam satu kelompok mempunyai karakteristik yang sama satu sama lainnya dan mempunyai karakteristik yang berbeda dengan data yang ada di dalam kelompok yang lain.
Menyiapkan data.
Statistika dasar sebelum menerapkan K-Means.
Komputasikan k-means.
Visualisasikan.
Untuk penerapan k-means menggunakan R, disini menggunakan dataset yang sudah tersedia di R yaitu mtcars dataset.
data("mtcars")
mtcars <- na.omit(mtcars)
head(mtcars)
Perhatikan bahwa variabel memiliki cara dan varians yang berbeda besar. Karena kita tidak ingin algoritma k-means bergantung pada unit variabel arbitrer, kita akan menskalakan data menggunakan skala fungsi R(), sebelum kita dapat menerapkan K-means.
desc_stats <- data.frame(
Min = apply(mtcars, 2, min), # minimum
Med = apply(mtcars, 2, median), # median
Mean = apply(mtcars, 2, mean), # mean
SD = apply(mtcars, 2, sd), # Standard deviation
Max = apply(mtcars, 2, max) # Maximum
)
desc_stats <- round(desc_stats, 1)
head(desc_stats)
df <- scale(mtcars)
head(df)
## mpg cyl disp hp drat
## Mazda RX4 0.1508848 -0.1049878 -0.57061982 -0.5350928 0.5675137
## Mazda RX4 Wag 0.1508848 -0.1049878 -0.57061982 -0.5350928 0.5675137
## Datsun 710 0.4495434 -1.2248578 -0.99018209 -0.7830405 0.4739996
## Hornet 4 Drive 0.2172534 -0.1049878 0.22009369 -0.5350928 -0.9661175
## Hornet Sportabout -0.2307345 1.0148821 1.04308123 0.4129422 -0.8351978
## Valiant -0.3302874 -0.1049878 -0.04616698 -0.6080186 -1.5646078
## wt qsec vs am gear
## Mazda RX4 -0.610399567 -0.7771651 -0.8680278 1.1899014 0.4235542
## Mazda RX4 Wag -0.349785269 -0.4637808 -0.8680278 1.1899014 0.4235542
## Datsun 710 -0.917004624 0.4260068 1.1160357 1.1899014 0.4235542
## Hornet 4 Drive -0.002299538 0.8904872 1.1160357 -0.8141431 -0.9318192
## Hornet Sportabout 0.227654255 -0.4637808 -0.8680278 -0.8141431 -0.9318192
## Valiant 0.248094592 1.3269868 1.1160357 -0.8141431 -0.9318192
## carb
## Mazda RX4 0.7352031
## Mazda RX4 Wag 0.7352031
## Datsun 710 -1.1221521
## Hornet 4 Drive -1.1221521
## Hornet Sportabout -0.5030337
## Valiant -1.1221521
Pengelompokan K-means adalah jenis pembelajaran tanpa pengawasan, yang digunakan ketika Anda memiliki data yang tidak berlabel (yaitu, data tanpa kategori atau grup yang ditentukan). Tujuan dari algoritma ini adalah untuk menemukan kelompok dalam data, dengan jumlah kelompok yang diwakili oleh variabel K.
set.seed(123)
km.res <- kmeans(scale(mtcars), 4, nstart = 25)
km.res
## K-means clustering with 4 clusters of sizes 7, 5, 8, 12
##
## Cluster means:
## mpg cyl disp hp drat wt
## 1 0.1082193 -0.5849321 -0.44867013 -0.6496905 -0.04967936 -0.02346989
## 2 -0.2639188 0.3429602 -0.05907659 0.7600688 0.44781564 -0.22101115
## 3 1.3247791 -1.2248578 -1.10626771 -0.9453003 1.09820619 -1.20086981
## 4 -0.8363478 1.0148821 1.02385129 0.6924910 -0.88974768 0.90635862
## qsec vs am gear carb
## 1 1.1854841 1.1160357 -0.8141431 -0.1573201 -0.4145882
## 2 -1.2494801 -0.8680278 1.1899014 1.2367782 1.4781451
## 3 0.3364684 0.8680278 1.1899014 0.7623975 -0.8125929
## 4 -0.3952280 -0.8680278 -0.8141431 -0.9318192 0.1676779
##
## Clustering vector:
## Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive
## 2 2 3 1
## Hornet Sportabout Valiant Duster 360 Merc 240D
## 4 1 4 1
## Merc 230 Merc 280 Merc 280C Merc 450SE
## 1 1 1 4
## Merc 450SL Merc 450SLC Cadillac Fleetwood Lincoln Continental
## 4 4 4 4
## Chrysler Imperial Fiat 128 Honda Civic Toyota Corolla
## 4 3 3 3
## Toyota Corona Dodge Challenger AMC Javelin Camaro Z28
## 1 4 4 4
## Pontiac Firebird Fiat X1-9 Porsche 914-2 Lotus Europa
## 4 3 3 3
## Ford Pantera L Ferrari Dino Maserati Bora Volvo 142E
## 2 2 2 3
##
## Within cluster sum of squares by cluster:
## [1] 21.28798 23.40276 19.04480 23.08349
## (between_SS / total_SS = 74.5 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
# It’s possible to compute the mean of each of the variables in the clusters:
aggregate(mtcars, by=list(cluster=km.res$cluster), mean)
Pengamatan diwakili oleh titik-titik dalam plot, menggunakan komponen utama jika ncol(data) > 2. Elips digambar di sekitar setiap cluster.
library("factoextra")
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
fviz_cluster(km.res, data = df,
palette = c("#2E9FDF","#00AFBB", "#FC4E07", "#E7B800"),
ggtheme = theme_minimal(),
main = "Partitioning Clustering Plot"
)
Gambar di bawah ini menunjukkan plot siluet pengelompokan k-means dan memperkenalkan fungsi siluet.yang di maksud dengan fungsi siluet adalah Analisis siluet dapat digunakan untuk mempelajari jarak pemisahan antara cluster yang dihasilkan dan dapat dianggap sebagai metode yang lebih baik dibandingkan dengan metode Elbow. Analisis siluet juga memiliki keuntungan tambahan untuk menemukan pencilan jika ada dalam sebuah cluster.
library(cluster)
library(HSAUR)
## Loading required package: tools
## Warning: package 'HSAUR' was built under R version 3.3.3
## Loading required package: tools
data(pottery)
km <- kmeans(pottery,3)
dissE <- daisy(pottery)
dE2 <- dissE^2
sk2 <- silhouette(km$cl, dE2)
plot(sk2)