K-medoids di r: contoh langkah demi langkah
Clustering adalah teknik pembelajaran mesin yang mencoba menemukan kelompok atau cluster observasi dalam kumpulan data.
Tujuannya adalah untuk menemukan klaster sedemikian rupa sehingga pengamatan dalam setiap klaster cukup mirip satu sama lain, sedangkan observasi dalam klaster yang berbeda sangat berbeda satu sama lain.
Pengelompokan adalah bentuk pembelajaran tanpa pengawasan karena kita hanya mencoba menemukan struktur dalam kumpulan data daripada memprediksi nilai variabel respons .
Clustering sering digunakan dalam pemasaran ketika bisnis memiliki akses ke informasi seperti:
- Pendapatan rumah tangga
- Ukuran rumah tangga
- Profesi Kepala Rumah Tangga
- Jarak ke daerah perkotaan terdekat
Ketika informasi ini tersedia, pengelompokan dapat digunakan untuk mengidentifikasi rumah tangga yang serupa dan mungkin lebih cenderung membeli produk tertentu atau memberikan respons yang lebih baik terhadap jenis iklan tertentu.
Salah satu bentuk pengelompokan yang paling umum dikenal sebagai pengelompokan k-means .
Sayangnya, metode ini dapat dipengaruhi oleh outlier, itulah sebabnya alternatif yang sering digunakan adalah pengelompokan k-medoids .
Apa itu pengelompokan K-Medoids?
Pengelompokan K-medoids adalah teknik di mana kita menempatkan setiap observasi dalam kumpulan data ke dalam salah satu k cluster.
Tujuan akhirnya adalah untuk memiliki K cluster dimana pengamatan dalam setiap cluster cukup mirip satu sama lain, sedangkan observasi dalam cluster yang berbeda sangat berbeda satu sama lain.
Dalam praktiknya, kami menggunakan langkah-langkah berikut untuk melakukan pengelompokan K-means:
1. Pilih nilai untuk K.
- Pertama, kita perlu memutuskan berapa banyak cluster yang ingin kita identifikasi dalam data. Seringkali kita hanya perlu menguji beberapa nilai K yang berbeda dan menganalisis hasilnya untuk melihat jumlah cluster mana yang paling masuk akal untuk masalah tertentu.
2. Secara acak tetapkan setiap observasi ke cluster awal, dari 1 sampai K.
3. Lakukan prosedur berikut hingga penetapan cluster berhenti berubah.
- Untuk setiap cluster K , hitung pusat gravitasi cluster tersebut. Ini adalah vektor dari median p fitur untuk observasi cluster ke-k .
- Tetapkan setiap observasi ke cluster dengan centroid terdekat. Di sini, jarak terdekat ditentukan menggunakan jarak Euclidean .
Catatan teknis:
Karena k-medoids menghitung pusat cluster menggunakan median dan bukan mean, k-medoids cenderung lebih kuat terhadap outlier dibandingkan k-means.
Dalam praktiknya, jika tidak ada outlier ekstrem dalam kumpulan data, k-means dan k-medoids akan memberikan hasil yang serupa.
Pengelompokan K-Medoids di R
Tutorial berikut memberikan contoh langkah demi langkah tentang cara melakukan kluster k-medoids di R.
Langkah 1: Muat paket yang diperlukan
Pertama, kita akan memuat dua paket yang berisi beberapa fungsi berguna untuk clustering k-medoids di R.
library (factoextra) library (cluster)
Langkah 2: Muat dan Siapkan Data
Untuk contoh ini, kita akan menggunakan kumpulan data USArrests yang dibangun ke dalam R, yang berisi jumlah penangkapan per 100.000 orang di setiap negara bagian AS pada tahun 1973 karena pembunuhan , penyerangan , dan pemerkosaan , serta persentase populasi setiap negara bagian yang tinggal di daerah perkotaan. daerah. , UrbanPop .
Kode berikut menunjukkan cara melakukan hal berikut:
- Muat kumpulan data Penangkapan AS
- Hapus semua baris dengan nilai yang hilang
- Skalakan setiap variabel dalam kumpulan data agar memiliki rata-rata 0 dan deviasi standar 1
#load data df <-USArrests #remove rows with missing values df <- na. omitted (df) #scale each variable to have a mean of 0 and sd of 1 df <- scale(df) #view first six rows of dataset head(df) Murder Assault UrbanPop Rape Alabama 1.24256408 0.7828393 -0.5209066 -0.003416473 Alaska 0.50786248 1.1068225 -1.2117642 2.484202941 Arizona 0.07163341 1.4788032 0.9989801 1.042878388 Arkansas 0.23234938 0.2308680 -1.0735927 -0.184916602 California 0.27826823 1.2628144 1.7589234 2.067820292 Colorado 0.02571456 0.3988593 0.8608085 1.864967207
Langkah 3: Temukan jumlah cluster yang optimal
Untuk melakukan pengelompokan k-medoid di R, kita dapat menggunakan fungsi pam() , yang merupakan singkatan dari “partitioning around medians” dan menggunakan sintaks berikut:
pam(data, k, metrik = “Euclidean”, stand = FALSE)
Emas:
- data : Nama kumpulan data.
- k : Jumlah cluster.
- metrik: metrik yang digunakan untuk menghitung jarak. Standarnya adalah Euclidean tetapi Anda juga dapat menentukan manhattan .
- stand: Apakah setiap variabel dalam dataset akan dinormalisasi atau tidak. Nilai defaultnya adalah salah.
Karena kita tidak mengetahui sebelumnya berapa jumlah cluster yang optimal, kita akan membuat dua grafik berbeda yang dapat membantu kita memutuskan:
1. Jumlah cluster relatif terhadap total jumlah kuadrat
Pertama, kita akan menggunakan fungsi fviz_nbclust() untuk membuat plot jumlah cluster versus total jumlah kuadrat:
fviz_nbclust(df, pam, method = “ wss ”)
Total jumlah kuadrat umumnya akan selalu bertambah seiring bertambahnya jumlah cluster. Jadi saat kita membuat plot jenis ini, kita mencari “lutut” di mana jumlah kuadratnya mulai “membungkuk” atau mendatar.
Titik kelengkungan plot umumnya sesuai dengan jumlah cluster yang optimal. Di luar angka tersebut, kemungkinan terjadi overfitting .
Untuk grafik ini terlihat terdapat kekusutan atau “tikungan” kecil pada k = 4 cluster.
2. Statistik jumlah klaster versus kesenjangan
Cara lain untuk menentukan jumlah cluster yang optimal adalah dengan menggunakan metrik yang disebut statistik deviasi , yang membandingkan total variasi intra-cluster untuk nilai k yang berbeda dengan nilai yang diharapkan untuk distribusi tanpa pengelompokan.
Kita dapat menghitung statistik gap untuk setiap jumlah cluster menggunakan fungsi clusGap() dari paket cluster serta plot statistik cluster versus gap menggunakan fungsi fviz_gap_stat() :
#calculate gap statistic based on number of clusters gap_stat <- clusGap(df, FUN = pam, K.max = 10, #max clusters to consider B = 50) #total bootstrapped iterations #plot number of clusters vs. gap statistic fviz_gap_stat(gap_stat)
Dari grafik terlihat bahwa statistik gap paling tinggi pada k = 4 cluster, yang sesuai dengan metode siku yang kita gunakan sebelumnya.
Langkah 4: Lakukan pengelompokan K-Medoids dengan Optimal K
Terakhir, kita dapat melakukan pengelompokan k-medoids pada kumpulan data menggunakan nilai optimal untuk k sebesar 4:
#make this example reproducible set.seed(1) #perform k-medoids clustering with k = 4 clusters kmed <- pam(df, k = 4) #view results kmed ID Murder Assault UrbanPop Rape Alabama 1 1.2425641 0.7828393 -0.5209066 -0.003416473 Michigan 22 0.9900104 1.0108275 0.5844655 1.480613993 Oklahoma 36 -0.2727580 -0.2371077 0.1699510 -0.131534211 New Hampshire 29 -1.3059321 -1.3650491 -0.6590781 -1.252564419 Vector clustering: Alabama Alaska Arizona Arkansas California 1 2 2 1 2 Colorado Connecticut Delaware Florida Georgia 2 3 3 2 1 Hawaii Idaho Illinois Indiana Iowa 3 4 2 3 4 Kansas Kentucky Louisiana Maine Maryland 3 3 1 4 2 Massachusetts Michigan Minnesota Mississippi Missouri 3 2 4 1 3 Montana Nebraska Nevada New Hampshire New Jersey 3 3 2 4 3 New Mexico New York North Carolina North Dakota Ohio 2 2 1 4 3 Oklahoma Oregon Pennsylvania Rhode Island South Carolina 3 3 3 3 1 South Dakota Tennessee Texas Utah Vermont 4 1 2 3 4 Virginia Washington West Virginia Wisconsin Wyoming 3 3 4 4 3 Objective function: build swap 1.035116 1.027102 Available components: [1] "medoids" "id.med" "clustering" "objective" "isolation" [6] "clusinfo" "silinfo" "diss" "call" "data"
Perhatikan bahwa keempat pusat cluster adalah observasi aktual dalam kumpulan data. Di dekat bagian atas keluaran, kita dapat melihat bahwa empat pusat massa adalah keadaan berikut:
- Alabama
- Michigan
- Oklahoma
- New Hampshire
Kita dapat memvisualisasikan cluster pada scatterplot yang menampilkan dua komponen utama pertama pada sumbu menggunakan fungsi fivz_cluster() :
#plot results of final k-medoids model
fviz_cluster(kmed, data = df)
Kita juga dapat menambahkan penetapan klaster setiap negara bagian ke kumpulan data asli:
#add cluster assignment to original data
final_data <- cbind(USArrests, cluster = kmed$cluster)
#view final data
head(final_data)
Murder Assault UrbanPop Rape cluster
Alabama 13.2 236 58 21.2 1
Alaska 10.0 263 48 44.5 2
Arizona 8.1 294 80 31.0 2
Arkansas 8.8 190 50 19.5 1
California 9.0 276 91 40.6 2
Colorado 7.9 204 78 38.7 2
Anda dapat menemukan kode R lengkap yang digunakan dalam contoh ini di sini .