> # install.packages("cluster")
> # install.packages("factoextra")
> # install.packages("fpc")
> # install.packages("psych")
> # install.packages("readxl")Klasifikasi dan pengelompokan data merupakan langkah penting dalam analisis data untuk memahami struktur di dalamnya. Salah satu metode yang sering digunakan dalam pengelompokan adalah clustering, yaitu teknik yang bertujuan untuk mengelompokkan data ke dalam kelompok-kelompok berdasarkan tingkat kemiripan antara data tersebut tanpa memanfaatkan informasi label (unsupervised learning). Dataset Zoo dari UCI Machine Learning Repository menjadi contoh yang sangat relevan untuk studi clustering karena dataset ini mencakup berbagai karakteristik hewan yang heterogen.
Hewan dalam dataset Zoo didefinisikan oleh 16 atribut yang mencakup sifat-sifat biologis dan morfologis, seperti keberadaan bulu, kemampuan bertelur, dan jumlah kaki. Dengan menggunakan data ini, peneliti dapat memahami bagaimana hewan-hewan tersebut secara alami terkelompok berdasarkan karakteristik yang dimiliki. Pentingnya Analisis Clustering pada Dataset Zoo sebagai berikut:
Klasifikasi Tak Terkendali Dalam situasi di mana label kelompok tidak diketahui, clustering dapat membantu dalam memahami struktur data. Misalnya, pengelompokan hewan berdasarkan karakteristik fisik dan perilaku dapat mengungkap pola biologis yang tidak eksplisit atau mengidentifikasi kelompok baru yang belum didefinisikan sebelumnya.
Penanganan Data Campuran Dataset Zoo mengandung variabel kategorik (misalnya, keberadaan bulu) dan numerik (jumlah kaki). Clustering dataset ini memberikan tantangan unik untuk memilih metode jarak yang sesuai, seperti jarak Gower yang dapat menangani data campuran. Hal ini membuat analisis menjadi lebih menarik untuk eksplorasi metodologi.
Identifikasi Anomali Dataset ini juga menyediakan peluang untuk mendeteksi anomali atau outlier, yaitu hewan yang tidak sesuai dengan kelompok biologis mereka. Sebagai contoh, platypus mungkin masuk dalam kelompok mamalia tetapi memiliki sifat bertelur yang menyerupai reptil.
Aplikasi dalam Taksonomi Biologi Clustering pada dataset Zoo tidak hanya memiliki nilai dalam analisis data, tetapi juga dapat memberikan wawasan untuk aplikasi dalam bidang taksonomi biologi, khususnya dalam mengelompokkan spesies berdasarkan ciri-ciri morfologis mereka.
Algoritma cluster hierarki dimulai dengan memperlakukan objek sebagi cluster tunggal. Selanjutnya cluster tunggal digabungkan secara berurutan hingga semua cluster tergabung menjadi satu cluster besar yang berisi semua objek. Hasil akhir dari algoritma hierarki clustering adalah representasi objek berbasis pohon, yang disebut dengan dendogram.
Pada Hierarki clustering, kedekatan cluster ditentukan dengan
menggunakan linkage. Terdapat delapan macam linkage, yaitu
single, complete, average,
mcquitty, median, centroid,
ward.D dan ward.D2. Selain itu, mengukur
kemiripan suatu objek dengan objek lainnya didasarkan pada ukuran jarak,
sekamin dekat jarak dua objek, semakin mirip kedua objek tersbut.
Terdapat lima macam metode pengukuran jarak, yaitu
euclidean, maximum, manhattan,
canberra dan binary.
K-medoids clustering merupakan salah satu algoritma
clustering non-hierarki, sering dikenal sebagai
Partitioning Around Medoids (PAM), adalah metode klastering
yang membagi data ke dalam kelompok berdasarkan kesamaan. Algoritma ini
mirip dengan K-means clustering, tetapi lebih tahan
terhadap outlier dan data ekstrim.
K-medoids menggunakan medoid, yaitu titik aktual dalam
data yang mewakili pusat cluster, daripada centroid yang dihitung
sebagai rata-rata. Algoritma K-medoids cocok untuk data
dengan outlier atau data campuran (numerik dan kategorik).
Data yang dipakai adalah data tentang karakteristik hewan dengan 101 hewan dengan 16 variabel yaitu hair, feathers, eggs, milk, airborne, aquatic, predator, toothed, backbone, breathes, venomous, fins, legs, tail, domestic, catsize. Data yang digunakan berasal dari website UCI Machine Learning Repository dengan website sebagai berikut https://archive.ics.uci.edu/dataset/111/zoo.
Tujuan dari penelitian ini adalah untuk mengelompokkan hewan-hewan yang memiliki kemiripan satu sama lain berdasarkan karakteristik 16 variabel. Pengelompokkan hewan dilakukan karena satu family hewan dalam set data memiliki beberapa spesies, namun spesies yang berbeda dari family hewan tersebut memiliki kemiripan dengan family hewan berbeda pula, sehingga ingin diketahui apakah spesies hewan memiliki kemiripan dengan family-nya sendiri atau cenderung lebih mirip dengan family hewan lain.
Sebelum melakukan analisis lebih lanjut alangkah baiknya melakukan identifikasi data yang akan digunakan. Data Pre-Processing dilakukan untuk mendeteksi ada tidaknya duplikasi data dan pengecekan tipe data.
Data pada kasus hewan di Kebun Binatang memiliki 101 objek hewan dan 16 variabel yang akan di identifikasi. Cuplikan data dapat dilihat sebagai berikut.
> library(readxl)
>
> data <- read_xlsx("D:/Document/Semestet 5 stat 22/Analisis Multivariat 1/Praktikum/Zoo.xlsx")
> data <- as.data.frame(data)
> num <- data[,-1]
> rownames(num) <- data$name
> head(num)
hair feathers eggs milk airborne aquatic predator toothed backbone
aardvark 1 0 0 1 0 0 1 1 1
antelope 1 0 0 1 0 0 0 1 1
bass 0 0 1 0 0 1 1 1 1
bear 1 0 0 1 0 0 1 1 1
boar 1 0 0 1 0 0 1 1 1
buffalo 1 0 0 1 0 0 0 1 1
breathes venomous fins legs tail domestic catsize
aardvark 1 0 0 4 0 0 1
antelope 1 0 0 4 1 0 1
bass 0 0 1 0 1 0 0
bear 1 0 0 4 0 0 1
boar 1 0 0 4 1 0 1
buffalo 1 0 0 4 1 0 1> str(num)
'data.frame': 101 obs. of 16 variables:
$ hair : num 1 1 0 1 1 1 1 0 0 1 ...
$ feathers: num 0 0 0 0 0 0 0 0 0 0 ...
$ eggs : num 0 0 1 0 0 0 0 1 1 0 ...
$ milk : num 1 1 0 1 1 1 1 0 0 1 ...
$ airborne: num 0 0 0 0 0 0 0 0 0 0 ...
$ aquatic : num 0 0 1 0 0 0 0 1 1 0 ...
$ predator: num 1 0 1 1 1 0 0 0 1 0 ...
$ toothed : num 1 1 1 1 1 1 1 1 1 1 ...
$ backbone: num 1 1 1 1 1 1 1 1 1 1 ...
$ breathes: num 1 1 0 1 1 1 1 0 0 1 ...
$ venomous: num 0 0 0 0 0 0 0 0 0 0 ...
$ fins : num 0 0 1 0 0 0 0 1 1 0 ...
$ legs : num 4 4 0 4 4 4 4 0 0 4 ...
$ tail : num 0 1 1 0 1 1 1 1 1 0 ...
$ domestic: num 0 0 0 0 0 0 1 1 0 1 ...
$ catsize : num 1 1 0 1 1 1 1 0 0 0 ...Data yang telah dimasukkan ke dalam analisis masih bertipe numerik yang seharusnya bertipe kategorik dengan beberapa faktor sesuai variabel masing-masing. Perlu dilakukan pengubahan tipe data yang sebelumnya menjadi numerik menjadi kategorik atau faktor. Selain itu objek pada data tidak terdapat duplikasi.
Pengubahan data menjadi kategorik dengan langkah-langkah berikut.
> data1 <- lapply(data[,2:17], as.factor)
> data1 <- as.data.frame(data1)
> zoo <- data1
> rownames(zoo) <- data[,1]
> head(zoo)
hair feathers eggs milk airborne aquatic predator toothed backbone
aardvark 1 0 0 1 0 0 1 1 1
antelope 1 0 0 1 0 0 0 1 1
bass 0 0 1 0 0 1 1 1 1
bear 1 0 0 1 0 0 1 1 1
boar 1 0 0 1 0 0 1 1 1
buffalo 1 0 0 1 0 0 0 1 1
breathes venomous fins legs tail domestic catsize
aardvark 1 0 0 4 0 0 1
antelope 1 0 0 4 1 0 1
bass 0 0 1 0 1 0 0
bear 1 0 0 4 0 0 1
boar 1 0 0 4 1 0 1
buffalo 1 0 0 4 1 0 1> str(zoo)
'data.frame': 101 obs. of 16 variables:
$ hair : Factor w/ 2 levels "0","1": 2 2 1 2 2 2 2 1 1 2 ...
$ feathers: Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
$ eggs : Factor w/ 2 levels "0","1": 1 1 2 1 1 1 1 2 2 1 ...
$ milk : Factor w/ 2 levels "0","1": 2 2 1 2 2 2 2 1 1 2 ...
$ airborne: Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
$ aquatic : Factor w/ 2 levels "0","1": 1 1 2 1 1 1 1 2 2 1 ...
$ predator: Factor w/ 2 levels "0","1": 2 1 2 2 2 1 1 1 2 1 ...
$ toothed : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ backbone: Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ breathes: Factor w/ 2 levels "0","1": 2 2 1 2 2 2 2 1 1 2 ...
$ venomous: Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
$ fins : Factor w/ 2 levels "0","1": 1 1 2 1 1 1 1 2 2 1 ...
$ legs : Factor w/ 6 levels "0","2","4","5",..: 3 3 1 3 3 3 3 1 1 3 ...
$ tail : Factor w/ 2 levels "0","1": 1 2 2 1 2 2 2 2 2 1 ...
$ domestic: Factor w/ 2 levels "0","1": 1 1 1 1 1 1 2 2 1 2 ...
$ catsize : Factor w/ 2 levels "0","1": 2 2 1 2 2 2 2 1 1 1 ...Tipe data yang sebelumnya numerik telah menjadi kategorik/faktor sehingga dapat dilakukan analisis cluster lebih lanjut.
Analisis cluster hierarki membutuhkan metode jarak dan linkage yang paling optimal menggunakan korelasi cophenetic untuk mendapatkan hasil clustering yang akurat dan tidak menghasilkan cluster yang salah. Jarak dan linkage yang diuji sesuai pada pendahuluan.
> distance_methods <- c("euclidean", "maximum", "manhattan", "canberra", "binary")
> linkage_methods <- c("single", "complete", "average", "mcquitty", "median", "centroid", "ward.D", "ward.D2")
>
> results <- data.frame(Distance_Method = character(),
+ Linkage_Method = character(),
+ Cophenetic_Correlation = numeric(),
+ stringsAsFactors = FALSE)
>
> for (dist_method in distance_methods) {
+ distance_matrix <- dist(zoo, method = dist_method)
+
+ for (linkage_method in linkage_methods) {
+ hc <- hclust(distance_matrix, method = linkage_method)
+ cophenetic_distance <- cophenetic(hc)
+ cophenetic_corr <- cor(distance_matrix, cophenetic_distance)
+ results <- rbind(results, data.frame(Distance_Method = dist_method,
+ Linkage_Method = linkage_method,
+ Cophenetic_Correlation = cophenetic_corr))
+ }
+ }> print(results)
Distance_Method Linkage_Method Cophenetic_Correlation
1 euclidean single 0.7410175
2 euclidean complete 0.7663244
3 euclidean average 0.8193769
4 euclidean mcquitty 0.7823524
5 euclidean median 0.6857606
6 euclidean centroid 0.7762508
7 euclidean ward.D 0.7180992
8 euclidean ward.D2 0.7513552
9 maximum single 0.6472185
10 maximum complete 0.7050395
11 maximum average 0.7732706
12 maximum mcquitty 0.7144341
13 maximum median 0.7122594
14 maximum centroid 0.7615694
15 maximum ward.D 0.6982353
16 maximum ward.D2 0.7117873
17 manhattan single 0.7091566
18 manhattan complete 0.8342922
19 manhattan average 0.8585698
20 manhattan mcquitty 0.8302854
21 manhattan median 0.7747890
22 manhattan centroid 0.8211640
23 manhattan ward.D 0.7051478
24 manhattan ward.D2 0.8125133
25 canberra single 0.8672513
26 canberra complete 0.8296589
27 canberra average 0.9119552
28 canberra mcquitty 0.9005372
29 canberra median 0.8469013
30 canberra centroid 0.8464793
31 canberra ward.D 0.6673702
32 canberra ward.D2 0.7842208
33 binary single 0.8469545
34 binary complete 0.8576614
35 binary average 0.8869092
36 binary mcquitty 0.8940948
37 binary median 0.7969418
38 binary centroid 0.8509330
39 binary ward.D 0.6597916
40 binary ward.D2 0.7701666Pengujian metode jarak dan linkage menghasilkan kombinasi sebanyak 40 unit. Pemilihan metode jarak dan linkage paling optimal menggunakan nilai korelasi cophenetic yang paling tinggi.
> best_result <- results[which.max(results$Cophenetic_Correlation), ]
> best_result
Distance_Method Linkage_Method Cophenetic_Correlation
27 canberra average 0.9119552Hasil pengujian korelasi cophenetic mendapatkan metode jarak canberra dengan average linkage yang akan digunakan pada analisis cluster hierarki untuk mendapatkan hasil yang paling akurat dan optimal.
Pemilihan banyaknya cluster yang dibentuk dapat memberikan hasil yang lebih akurat dan mengurangi kesalahan dalam penempatan hewan kedalam cluster berdasarkan kemiripan karakteristik hewan. Penentuan banyaknya cluster yang terbentuk menggunakan indeks silhouette. Indeks silhoutte terbesar dari nilai k tertentu akan dipilih sebagai banyaknya cluster yang akan terbentuk.
> library(factoextra)
> library(cluster)
> library(kableExtra)
>
> silhouette_list <- list()
> for (k in 2:10) {
+ ahczoo <- hcut(zoo,
+ k = k,
+ hc_method = "average",
+ hc_metric = "canberra",
+ scale = FALSE)
+ silhouette_list[[as.character(k)]] <- ahczoo$silinfo$avg.width
+ }
>
> silhouettezoo <- data.frame(k = 2:10, Silhoutte = unlist(silhouette_list))
> silhouettezoo
k Silhoutte
2 2 0.3363370
3 3 0.3256418
4 4 0.2857180
5 5 0.4421314
6 6 0.5397649
7 7 0.5470787
8 8 0.5421396
9 9 0.5444201
10 10 0.5385863Telah terbentuk indeks silhouette dengan nilai k dari 2 hingga 10, kemudian dipilih indeks yang memiliki nilai terbesar.
Telah ditentukan bahwa pembagian cluster yang paling optimal dengan mengelompokkan objek hewan menjadi 7 cluster/kelompok.
Analisis cluster hierarki dapat dibentuk dengan metode jarak
canberra, metode average linkage, dan membagi menjadi 7 cluster
menggunakan fungsi hcut, kemudian dapat divisualisasikan
dengan dendogram.
> cluster_hierarki <- hcut(zoo,
+ k=7,
+ hc_method = "average",
+ hc_metric = "canberra",
+ scale = F)
> fviz_dend(cluster_hierarki,
+ rect = TRUE,
+ cex = 0.8,
+ lwd = 0.8)
Dendogram yang terbentuk membagi menjadi 7 cluster dengan rincian
cluster ke-i sebagai berikut:
Didapatkan hasil bahwa adanya indikasi bahwa cluster 1 merupakan pencilan, sehingga dilakukan algoritma clustering yang tahan terhadap adanya pencilan atau outlier.
Cluster non-hierarki memperhatikan metode K-MEANS untuk
komputasi sederhana dan cepat dengan mendefinisikan centroid secara
random menjadi rata-rata point dari cluster tersebut, namun metode
K-MEANS tidak tahan terhadap outlier. Alternatif metode
lain saat mendapati outlier dalam data dapat menggunakan algoritma
K-MEDOIDS yang tahan terhadap adanya pencilan dalam
data.
Pendeteksian outlier digunakan untuk mengetahui metode yang lebih
tepat untuk digunakan dalam analisis cluster non-hierarki. Pendeteksian
menggunakan metode jarak gower dengan pembagian cluster sebanyak 7
sesuai dengan banyaknya pembagian pada cluster hierarki. Pembuktian
banyaknya cliuster terbentuk dapat dilihat pada 3.2.2.
> library(cluster)
> library(factoextra)
> gower_dist <- daisy(zoo,
+ metric = "gower")
> pam_clusters <- pam(gower_dist,
+ k = 7)
> silhouette_info <- silhouette(pam_clusters$clustering,
+ gower_dist)
> outliers <- which(silhouette_info[, 3] < 0)
> print(outliers)
[1] 73 91Didapatkan hasil bahwa amatan ke 73 dan ke 91 adalah outlier dalam data dengan keterangan berikut.
> print(zoo[outliers, ])
hair feathers eggs milk airborne aquatic predator toothed backbone
scorpion 0 0 0 0 0 0 1 0 0
tortoise 0 0 1 0 0 0 0 0 1
breathes venomous fins legs tail domestic catsize
scorpion 1 1 0 8 1 0 0
tortoise 1 0 0 4 1 0 1Hasil pendeteksian outlier didapatkan bahwa hewan scorpion dan tortoise merupakan outlier yang terdapat pada kasus ini. Berikut merupakan visualisasi pendeteksian outlier dimana saat nilai silhoutte objek kurang dari 0, maka objek dapat dikatakan outlier.
> fviz_silhouette(silhouette_info, label = T)
cluster size ave.sil.width
1 1 20 0.43
2 2 19 0.39
3 3 16 0.56
4 4 20 0.64
5 5 7 0.64
6 6 10 0.54
7 7 9 0.24Pembuktian pemilihan banyaknya cluster yang dibentuk pada cluster Non-Hierarki dapat memberikan hasil yang lebih akurat dan mengurangi kesalahan dalam penempatan centroid/titik pusat yang berakibat dalam kesalahan penempatan cluster berdasarkan karakteristik hewan.
> library(factoextra)
> library(cluster)
> library(fpc)
>
> dunn_index_list <- list()
> for (k in 2:10) {
+ kmedoidclus <- eclust(zoo,
+ "pam",
+ k = k,
+ graph = FALSE)
+ km <- cluster.stats(dist(zoo),
+ kmedoidclus$cluster)
+ dunn_index_list[[as.character(k)]] <- km$dunn
+ }
>
> dunn_df <- data.frame(
+ k = 2:10,
+ Dunn_Index = unlist(dunn_index_list)
+ )
> maxxdunn <- max(dunn_df$Dunn_Index)
> maximaldunn <- dunn_df[dunn_df$Dunn_Index == maxxdunn, ]
> maximaldunn
k Dunn_Index
6 6 0.2886751
7 7 0.2886751
8 8 0.2886751Didapatkan hasil bahwa indeks dunn terbaik dengan membagi cluster menjadi 6,7,8 bagian. Karena pada analisis cluster hierarki terbagi menjadi 7 cluster, maka cluster akan dibagi menjadi 7 bagian.
Visualisasi pada kasus hewan kebun binatang memiliki 16 variabel sehingga harus menurunkan dimensi menerapkan algoritma reduksi dimensi seperti analisis PCA (Principal Component Analysis).
> library(factoextra)
> library(psych)
> pca_data <- principal(r=cor(num),nfactors=ncol(num), rotate = "varimax", scores=T)
> pca_data$loadings
Loadings:
RC1 RC3 RC8 RC9 RC5 RC4 RC2 RC6 RC10 RC7
hair 0.881 0.188 -0.172 0.143
feathers -0.438 0.296 0.533 -0.137 -0.127 -0.216
eggs -0.916 -0.134 0.183 0.119 -0.144
milk 0.916 0.112 -0.165 -0.144 0.201
airborne -0.231 0.934 -0.147 -0.145
aquatic -0.265 -0.129 0.196 0.254 0.859
predator -0.130 0.960 -0.155 0.141
toothed 0.584 0.236 -0.418 -0.146 0.245
backbone 0.245 0.659 -0.296 -0.138 0.147
breathes 0.286 0.214 0.153 -0.117 -0.279 -0.279
venomous 0.987
fins 0.126 -0.142 -0.316 0.836 0.282
legs 0.182 -0.243 0.900 -0.245 -0.115
tail 0.977 -0.127
domestic 0.106 -0.145 0.980
catsize 0.362 0.139 -0.141 0.899
RC11 RC12 RC14 RC13 RC15 RC16
hair 0.314
feathers 0.180 0.562
eggs 0.205 0.107
milk 0.147 0.130
airborne 0.120
aquatic -0.225
predator
toothed 0.460 -0.302 0.176
backbone 0.155 0.565 0.112
breathes 0.811
venomous
fins -0.248
legs 0.116
tail
domestic
catsize
RC1 RC3 RC8 RC9 RC5 RC4 RC2 RC6 RC10 RC7
SS loadings 3.456 1.672 1.508 1.137 1.050 1.044 1.036 1.019 1.002 0.960
Proportion Var 0.216 0.105 0.094 0.071 0.066 0.065 0.065 0.064 0.063 0.060
Cumulative Var 0.216 0.320 0.415 0.486 0.551 0.617 0.681 0.745 0.808 0.868
RC11 RC12 RC14 RC13 RC15 RC16
SS loadings 0.908 0.554 0.441 0.143 0.040 0.029
Proportion Var 0.057 0.035 0.028 0.009 0.002 0.002
Cumulative Var 0.925 0.959 0.987 0.996 0.998 1.000Didapatkan bahwa RC1 dan RC3 telah
menjelaskan data dengan maksimal, sehingga dipilih menjadi perwakilan
dalam visualisasi data. Berikut merupakan hasil dari PCA pada 16
variabel.
> predictpca <- predict(pca_data,
+ data = num)
> print(predictpca[,1:2])
RC1 RC3
aardvark 1.189870582 -1.9863851
antelope 0.975709447 0.5207546
bass -0.533784713 0.5424403
bear 1.189870582 -1.9863851
boar 1.005930317 0.4910960
buffalo 0.975709447 0.5207546
calf 0.747584492 0.5500879
carp -0.792130537 0.6014323
catfish -0.533784713 0.5424403
cavy 1.330900598 -1.7541387
cheetah 1.005930317 0.4910960
chicken -0.973657465 0.6160891
chub -0.533784713 0.5424403
clam -0.502099886 -1.8961608
crab -0.430809342 -1.4896337
crayfish -0.538157121 -1.3425993
crow -0.715311640 0.5570972
deer 0.975709447 0.5207546
dogfish -0.933160552 0.3691859
dolphin 0.809439819 0.1269154
dove -0.973657465 0.6160891
duck -0.459546409 0.6992143
elephant 0.975709447 0.5207546
flamingo -1.144908350 0.4135014
flea -1.209388389 -1.4344731
frog -1.051611885 -1.4106632
poisonous frog -0.860431937 -1.2427196
fruitbat 1.869134425 0.3845697
giraffe 0.975709447 0.5207546
girl 1.069093407 -2.1040860
gnat -0.822687029 -1.5968781
goat 0.747584492 0.5500879
gorilla 1.266997491 -2.1037608
gull -0.429325539 0.6695557
haddock -0.564005583 0.5720989
hamster 1.146960332 0.7233423
hare 1.375085286 0.6940090
hawk -0.715311640 0.5570972
herring -0.533784713 0.5424403
honeybee -0.030412295 -1.4564134
housefly 0.006532711 -1.6536904
kiwi -1.102013001 0.7195022
ladybird -0.792466159 -1.6265366
lark -0.745532511 0.5867558
leopard 1.005930317 0.4910960
lion 1.005930317 0.4910960
lobster -0.538157121 -1.3425993
lynx 1.005930317 0.4910960
mink 1.291916419 0.6035545
mole 1.405306156 0.6643504
mongoose 1.005930317 0.4910960
moth 0.006532711 -1.6536904
newt -1.235552150 1.0668179
octopus -1.044880739 -1.3688194
opossum 1.405306156 0.6643504
oryx 0.975709447 0.5207546
ostrich -1.531609710 0.5759063
parakeet -0.973657465 0.6160891
penguin -1.215402738 0.6587062
pheasant -0.745532511 0.5867558
pike -0.933160552 0.3691859
piranha -0.533784713 0.5424403
pitviper -1.115662747 0.8282344
platypus 0.214140792 0.9150740
polecat 1.005930317 0.4910960
pony 0.747584492 0.5500879
porpoise 0.809439819 0.1269154
puma 1.005930317 0.4910960
pussycat 0.777805363 0.5204293
raccoon 1.005930317 0.4910960
reindeer 0.747584492 0.5500879
rhea -1.501388840 0.5462477
scorpion -0.221270913 1.2082514
seahorse -0.564005583 0.5720989
seal 1.822599825 -2.4073780
sealion 1.531311781 0.2171374
seasnake 0.583352354 0.8296908
seawasp -0.024933837 -1.6157587
skimmer -0.429325539 0.6695557
skua -0.429325539 0.6695557
slowworm -1.306842695 0.6602908
slug -0.887345053 -1.8755760
sole -0.564005583 0.5720989
sparrow -0.745532511 0.5867558
squirrel 1.482433065 0.5469747
starfish -0.484483231 -1.4161165
stingray -0.741980605 0.5371295
swan -0.858922248 0.5259599
termite -1.209388389 -1.4344731
toad -1.081832755 -1.3810046
tortoise -1.970905886 1.0022072
tuatara -1.521538252 0.9543594
tuna -0.933160552 0.3691859
vampire 1.869134425 0.3845697
vole 1.375085286 0.6940090
vulture -1.114687480 0.3838428
wallaby 1.083057225 0.3737203
wasp 0.197712659 -1.4857468
wolf 1.005930317 0.4910960
worm -0.887345053 -1.8755760
wren -0.745532511 0.5867558Hasil dari algoritma K-MEDOIDS dengan pembagian 7
cluster dan analisis PCA didapatkan hasil visualisasi
Non-Hierarki clustering sebagai berikut.
> kmedoidklaster <- data.frame(data$name,
+ pcak7$clustering)
> kmedoidklaster[order(kmedoidklaster$pcak7.clustering),]
data.name pcak7.clustering
aardvark aardvark 1
bear bear 1
cavy cavy 1
girl girl 1
gorilla gorilla 1
seal seal 1
antelope antelope 2
boar boar 2
buffalo buffalo 2
calf calf 2
cheetah cheetah 2
deer deer 2
dolphin dolphin 2
elephant elephant 2
giraffe giraffe 2
goat goat 2
leopard leopard 2
lion lion 2
lynx lynx 2
mongoose mongoose 2
oryx oryx 2
polecat polecat 2
pony pony 2
porpoise porpoise 2
puma puma 2
pussycat pussycat 2
raccoon raccoon 2
reindeer reindeer 2
seasnake seasnake 2
wallaby wallaby 2
wolf wolf 2
bass bass 3
carp carp 3
catfish catfish 3
chub chub 3
crow crow 3
duck duck 3
gull gull 3
haddock haddock 3
hawk hawk 3
herring herring 3
lark lark 3
pheasant pheasant 3
piranha piranha 3
platypus platypus 3
scorpion scorpion 3
seahorse seahorse 3
skimmer skimmer 3
skua skua 3
sole sole 3
sparrow sparrow 3
stingray stingray 3
swan swan 3
wren wren 3
chicken chicken 4
dogfish dogfish 4
dove dove 4
flamingo flamingo 4
kiwi kiwi 4
newt newt 4
ostrich ostrich 4
parakeet parakeet 4
penguin penguin 4
pike pike 4
pitviper pitviper 4
rhea rhea 4
slowworm slowworm 4
tortoise tortoise 4
tuatara tuatara 4
tuna tuna 4
vulture vulture 4
clam clam 5
crab crab 5
crayfish crayfish 5
flea flea 5
frog frog 5
poisonous frog poisonous frog 5
gnat gnat 5
ladybird ladybird 5
lobster lobster 5
octopus octopus 5
slug slug 5
starfish starfish 5
termite termite 5
toad toad 5
worm worm 5
fruitbat fruitbat 6
hamster hamster 6
hare hare 6
mink mink 6
mole mole 6
opossum opossum 6
sealion sealion 6
squirrel squirrel 6
vampire vampire 6
vole vole 6
honeybee honeybee 7
housefly housefly 7
moth moth 7
seawasp seawasp 7
wasp wasp 7Berikut merupakan hasil Non-Hierarki clustering menjadi 7 kelompok dengan penjelasan masing-masing karakteristik sebagai berikut:
Dapat disimpulkan bahwa dengan algoritma yang tahan terhadap outlier dapat menghasilkan cluster dengan akurat yang dapat merepresentasikan objek/hewan secara merata dengan tingkat validitas tinggi.
Metode clustering non-hierarki sering lebih baik daripada metode hierarki dalam kasus dataset yang besar, dinamis, dan kompleks seperti dataset Zoo. Cluster non-hierarki menawarkan fleksibilitas, efisiensi, dan interpretasi yang lebih mudah. Meskipun cluster hierarki bisa bermanfaat untuk eksplorasi awal atau visualisasi struktur dataset, penggunaannya sering terbatas oleh kendala teknis dan interpretasi dalam skala yang lebih besar.
Dalam penelitian yang menggunakan dataset seperti Zoo, sangat penting untuk memilih metrik jarak dan algoritma clustering yang sesuai agar hasilnya akurat, tahan terhadap pencilan, dan mampu menangkap pola dari data campuran yang terdiri dari atribut numerik dan kategorikal. Untuk data campuran seperti ini, penggunaan metrik jarak Gower sangat disarankan karena mampu mengukur kesamaan antara objek dengan kombinasi tipe data yang berbeda. Gower mempertahankan keseimbangan kontribusi antara fitur numerik dan kategorikal, yang sering menjadi tantangan dalam analisis clustering.
Algoritma clustering yang dipilih harus mampu menangani pencilan secara efektif. Dalam konteks ini, K-Medoids adalah salah satu algoritma yang sangat direkomendasikan karena menggunakan medoid sebagai pusat cluster, yang lebih tahan terhadap gangguan dari pencilan dibandingkan dengan pendekatan rata-rata seperti pada K-Means. Alternatif lainnya adalah DBSCAN, algoritma berbasis kerapatan yang tidak hanya mampu membentuk cluster dengan bentuk tidak beraturan tetapi juga dapat mendeteksi dan mengidentifikasi data pencilan secara otomatis.
Forsyth, R. (1990). Zoo [Dataset]. UCI Machine Learning Repository. https://doi.org/10.24432/C5R59V. Sa’adah, U., Rochayani, M. Y., Lestari, D. W., & Lusia, D. A. (2021). Kupas Tuntas Algoritma Data Mining Dan Implementasinya Menggunakan R. UB Press.