Pengelompokan di R
dengan ggdendro dan cluster
Apa itu pengelompokan?
Analisis klaster terlihat untuk menetapkan pengamatan ke kategori tanpa pengetahuan sebelumnya. Ini berbeda dibandingkan dengan klasifikasi , yang berupaya menetapkan pengamatan ke kategori yang ditentukan sebelumnya menggunakan pemodelan prediktif dari data pelatihan.
Clustering adalah metode pembelajaran tanpa pengawasan dalam pembelajaran mesin dan penambangan data, dan berguna untuk mengeksplorasi dan memahami data yang kompleks, serta menemukan pola yang bermakna dalam data.
Dalam artikel ini
Saya ingin menjelajahi beberapa data yang berkaitan dengan penjualan barang-barang rumah tangga dasar , dan melihat apakah ada hubungan dalam data tersebut. Saya akan menggunakan hierarki dan juga k berarti pengelompokan.
Saya akan menjelaskan beberapa ide dasar yang berkaitan dengan clustering , dan contoh clustering hirarkis, k berarti clustering, dan bagaimana menemukan jumlah cluster yang optimal untuk clustering k-means.
Matriks jarak
Data dipartisi menjadi beberapa kelompok berdasarkan kemiripan antar objek dalam satu kelompok yang sama dan ketidaksamaan antar objek dalam kelompok yang berbeda dengan tujuan clustering adalah untuk menemukan struktur atau pola pada data tersebut.
Matriks jarak biasanya digunakan untuk memediasi cluster yang berbeda.
Jarak mengkuantifikasi perbedaan antara objek dalam ruang berdimensi tinggi, dan pilihan ukuran jarak akan memengaruhi hasil pengelompokan.
Ukuran jarak umum meliputi:
- Jarak Euclidean: Ini adalah ukuran jarak yang paling umum digunakan dan didefinisikan sebagai jarak garis lurus antara dua titik dalam ruang multidimensi. Ini adalah generalisasi dari teorema Pythagoras .
- Jarak Manhattan: Ukuran jarak ini juga dikenal sebagai jarak blok kota dan didefinisikan sebagai jumlah perbedaan absolut antara koordinat dua titik.
Pengelompokan Hirarki
Analisis cluster dalam statistik adalah metode untuk mendeteksi pengelompokan dalam data tanpa definisi grup yang telah ditentukan sebelumnya.
Untuk menggunakan pengelompokan hierarkis, kita perlu mendefinisikan ketidaksamaan antar kluster.
Kita bisa gunakan:
Keterkaitan tunggal
Disebut juga sebagai tetangga terdekat atau jarak minimum, yang didefinisikan sebagai jarak terpendek antara dua titik dalam dua cluster. Ditentukan oleh pasangan titik terdekat antara dua cluster.
Tautan lengkap
Ini adalah metode dimana jarak antara dua cluster didefinisikan sebagai jarak maksimum antara dua titik dalam dua cluster. Jarak antara dua klaster ditentukan oleh pasangan titik terjauh antara kedua klaster.
Perbedaan rata-rata
Juga dikenal sebagai hubungan rata-rata , dan untuk menghitung ketidaksamaan rata-rata antara dua klaster, kami mengambil rata-rata jarak berpasangan antara semua pasangan titik dalam dua klaster.
pengelompokan k-means
K-means clustering mempartisi dataset menjadi k cluster, dan bertujuan untuk menemukan cluster optimal yang meminimalkan jumlah kuadrat jarak antara titik data dan pusat cluster yang ditetapkan.
Pengelompokan K-means dapat digunakan untuk berbagai aplikasi:
- segmentasi gambar
- segmentasi pelanggan
- deteksi kejahatan
- pengoptimalan pemasaran dan lainnya…
pengaturan saya
library(tidyverse)
library(knitr)
knitr::opts_chunk$set(message = FALSE)
knitr::opts_chunk$set( fig.retina=2,fig.dpi = 96)
knitr::opts_chunk$set(comment="", fig.align="center", tidy=TRUE , cache=TRUE)
library(broom)
library(ggdendro)
library(cluster)
library(patchwork)
data <- read.csv("C:/Data/household_goods.csv")
skimr::skim(data)
- Anda tidak perlu memuat pustaka, cukup jalankan skimr::skim(“set data Anda”)
data %>% head(n=8)
df <- data %>% select(c(UnitsSold,UnitPrice,UnitCost)) %>% arrange()
df |> head(n=8)
data %>% ggplot() +
geom_point(mapping = aes(x= as.factor(ItemType) ,
y = UnitsSold , col = ItemType)) +
labs(title = "Items of basic necessity" ,
color = "items" , x = "Item" , y = "Units Sold") +
theme(axis.text.x = element_text( color="darkgrey",
size=12, angle=90),
axis.text.y = element_text( color="darkgrey",
size=12)) +
theme(text = element_text(face="bold",size = 12))
Perhatikan bahwa saya telah membuat persegi panjang cluster, dan menentukan cluster 1,6 dan 13. Ada 13 cluster karena spesifikasi k = 13
H <- hclust(dist(df))
plot(H)
rect.hclust(H, k=3, border="red")
rect.hclust(H, k=13, border="blue",
which = c(1,6, 13))
Saya akan membuat contoh cluster hierarkis dengan perbedaan berbeda:
hc <- df %>%
dist() %>%
hclust()
hc1 <- df %>%
dist() %>%
hclust(method='single')
hc2 <- df %>%
dist() %>%
hclust(method='average')
hc3 <- df %>%
dist() %>%
hclust(method='complete')
hc4 <- df %>%
dist() %>%
hclust(method='centroid')
p1<-ggdendrogram(hc, segments = TRUE,
rotate = FALSE) +
labs(title = "Dendrogram")+
theme_dendro()
p2<-ggdendrogram(hc1, segments = TRUE,
rotate = FALSE) +
labs(title = "Single Linkage Dendrogram")+
theme_dendro()
p3<-ggdendrogram(hc2, segments = TRUE,
rotate = FALSE) +
labs(title = "Average Linkage Dendrogram")+
theme_dendro()
p4<-ggdendrogram(hc3, segments = TRUE,
rotate = FALSE) +
labs(title = "Complete Linkage Dendrogram")+
theme_dendro()
p5<-ggdendrogram(hc4, segments = TRUE,
rotate = FALSE) +
labs(title = "Centroid Linkage Dendrogram")+
theme_dendro()
p1 + p2 + p3 + p4 +p5 + plot_layout(ncol = 2, heights = 3) # use patchwork
Perhatikan perbedaan struktur tergantung pada perbedaan yang digunakan.
Ada juga perbedaan dalam hal ukuran jarak yang dipilih:
dist <-dist(df,"euclidean")
clust.complete<-hclust(dist,method="complete")
p1<-ggdendrogram(clust.complete,labels = FALSE) +
labs(title = "Complete Linkage Dendrogram with euclidean distance")
dist1 <-dist(df,"manhattan")
clust.complete1<-hclust(dist1,method="complete")
p2<-ggdendrogram(clust.complete1,labels = FALSE) +
labs(title = "Complete Linkage Dendrogram with manhattan distance")
p1 + p2 + plot_layout(ncol = 2, heights = 1)
Pengelompokan K-means
Disini saya mengambil data di df , dan membuat 5 pusat cluster
clc <- kmeans(x = df, centers = 5)
df$cluster <- as.character(clc$cluster)
head(df)
clc$centers
- Versi dasar R dari plot
plot(df[c("UnitCost", "UnitsSold")], col = clc$cluster,
main = "K means clustering with data split into 5 clusters")
points(clc$centers[,c("UnitCost", "UnitsSold")],
col = "darkorange", pch = 16, cex = 1.5)
grid()
ggplot() +
geom_point(data = df,
mapping = aes(x = UnitPrice,
y = UnitsSold,
colour = cluster)) +
geom_point(mapping = aes(x = clc$centers[,'UnitPrice']
, y = clc$centers[,'UnitsSold']),color = "red", size = 4)+
theme_light() +
labs(title = "K means clustering with data split into 5 clusters")
km <- tibble(k = 1:10) %>%
mutate(
model = map(k, ~ kmeans(df, centers = ., nstart = 20)),
tidied = map(model, glance)
) %>%
unnest(tidied)
km
ggplot(km) +
geom_line(aes(x=k, y=tot.withinss))
cl <- kmeans(x = df, centers = 3)
df$cluster <- as.character(cl$cluster)
ggplot() +
geom_point(data = df,
mapping = aes(x = UnitPrice,
y = UnitsSold,
colour = cluster)) +
geom_point(mapping = aes(x = cl$centers[,'UnitPrice'] ,
y = cl$centers[,'UnitsSold'] ),color = "red", size = 4) +
labs(title = "K means clustering with 3 clusters")
Dari grafik di atas, kita dapat melihat bahwa kesamaan dan ketidaksamaan antara objek dalam kelompok data menyebabkan partisi atau cluster data yang berbeda.
Jarak merupakan bagian yang sangat besar dalam menentukan keanggotaan kelompok atau tidak.
Seperti yang ditunjukkan di atas, mencari jumlah jarak kuadrat, digunakan untuk mencari jumlah cluster yang optimal untuk k-means.
Jarak, kesamaan, dan perbedaan menentukan pengelompokan titik data.
Saya harap Anda menikmati dan menemukan artikel saya bermanfaat!
Ikuti saya untuk artikel lainnya tentang R, Julia, Python, dan statistik terapan!
Jika Anda ingin tahu lebih banyak tentang pemipaan ( %>% atau |> ) data Anda, lihat artikel saya di bawah ini:
Perpipaan dengan R
![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































