K-bermaksud Penggabungan dalam R dengan Contoh

Isi kandungan:

Anonim

Dalam tutorial ini, anda akan belajar

  • Apa itu analisis Cluster?
  • Algoritma K-bermaksud
  • Optimum k

Apa itu analisis Cluster?

Analisis kluster adalah sebahagian daripada pembelajaran tanpa pengawasan . Kluster adalah sekumpulan data yang mempunyai ciri yang serupa. Kita boleh katakan, analisis pengelompokan lebih kepada penemuan daripada ramalan. Mesin mencari kesamaan dalam data. Sebagai contoh, anda dapat menggunakan analisis kluster untuk aplikasi berikut:

  • Segmentasi pelanggan: Mencari persamaan antara kumpulan pelanggan
  • Penggabungan Pasaran Saham: Saham kumpulan berdasarkan prestasi
  • Kurangkan dimensi kumpulan data dengan mengelompokkan pemerhatian dengan nilai yang serupa

Analisis pengelompokan tidak terlalu sukar untuk dilaksanakan dan bermakna serta dapat dilaksanakan untuk perniagaan.

Perbezaan yang paling ketara antara pembelajaran yang diawasi dan yang tidak diawasi terletak pada hasilnya. Pembelajaran tanpa pengawasan membuat pemboleh ubah baru, label, sementara pembelajaran yang diawasi meramalkan hasilnya. Mesin tersebut membantu pengamal dalam usaha melabel data berdasarkan hubungan rapat. Terserah kepada penganalisis untuk memanfaatkan kumpulan dan memberi nama kepada mereka.

Mari kita buat contoh untuk memahami konsep pengelompokan. Untuk kesederhanaan, kami bekerja dalam dua dimensi. Anda mempunyai data mengenai jumlah perbelanjaan pelanggan dan usia mereka. Untuk meningkatkan pengiklanan, pasukan pemasaran ingin menghantar lebih banyak e-mel yang disasarkan kepada pelanggan mereka.

Dalam grafik berikut, anda menunjukkan jumlah perbelanjaan dan usia pelanggan.

library(ggplot2)df <- data.frame(age = c(18, 21, 22, 24, 26, 26, 27, 30, 31, 35, 39, 40, 41, 42, 44, 46, 47, 48, 49, 54),spend = c(10, 11, 22, 15, 12, 13, 14, 33, 39, 37, 44, 27, 29, 20, 28, 21, 30, 31, 23, 24))ggplot(df, aes(x = age, y = spend)) +geom_point()

Corak kelihatan pada ketika ini

  1. Di kiri bawah, anda dapat melihat orang muda dengan daya beli yang lebih rendah
  2. Atas-tengah menggambarkan orang yang mempunyai pekerjaan yang mereka mampu membelanjakan lebih banyak
  3. Akhirnya, orang tua dengan anggaran yang lebih rendah.

Pada rajah di atas, anda mengumpulkan pemerhatian dengan tangan dan menentukan setiap tiga kumpulan. Contoh ini agak mudah dan sangat visual. Sekiranya pemerhatian baru ditambahkan pada kumpulan data, anda boleh melabelkannya dalam lingkaran. Anda menentukan bulatan berdasarkan penilaian kami. Sebagai gantinya, anda boleh menggunakan Pembelajaran Mesin untuk mengelompokkan data secara objektif.

Dalam tutorial ini, anda akan belajar bagaimana menggunakan algoritma k-means .

Algoritma K-bermaksud

K-mean adalah, tanpa keraguan, kaedah pengelompokan paling popular. Penyelidik mengeluarkan algoritma beberapa dekad yang lalu, dan banyak penambahbaikan telah dilakukan untuk k-berarti.

Algoritma cuba mencari kumpulan dengan meminimumkan jarak antara pemerhatian, yang disebut penyelesaian optimum tempatan . Jarak diukur berdasarkan koordinat pemerhatian. Contohnya, dalam ruang dua dimensi, koordinatnya ringkas dan.

Algoritma berfungsi seperti berikut:

  • Langkah 1: Pilih kumpulan dalam rancangan ciri secara rawak
  • Langkah 2: Minimumkan jarak antara pusat kluster dan pemerhatian yang berbeza ( centroid ). Ia menghasilkan kumpulan dengan pemerhatian
  • Langkah 3: Alihkan centroid awal ke min koordinat dalam kumpulan.
  • Langkah 4: Minimumkan jarak mengikut centroid baru. Batasan baru dibuat. Oleh itu, pemerhatian akan bergerak dari satu kumpulan ke kumpulan yang lain
  • Ulangi sehingga tiada pemerhatian yang mengubah kumpulan

K-bermaksud biasanya mengambil jarak Euclidean antara ciri dan ciri:

Langkah-langkah yang berbeza boleh didapati seperti jarak Manhattan atau jarak Minlowski. Perhatikan bahawa, K-mean mengembalikan kumpulan yang berbeza setiap kali anda menjalankan algoritma. Ingatlah bahawa tekaan awal pertama adalah rawak dan hitung jarak sehingga algoritma mencapai homogenitas dalam kumpulan. Maksudnya, k-mean sangat sensitif terhadap pilihan pertama, dan kecuali jika jumlah pemerhatian dan kumpulan kecil, hampir mustahil untuk mendapatkan pengelompokan yang sama.

Pilih bilangan kluster

Kesukaran lain yang dijumpai dengan k-mean adalah pilihan bilangan kluster. Anda boleh menetapkan nilai yang tinggi, iaitu sebilangan besar kumpulan, untuk meningkatkan kestabilan tetapi anda mungkin akan kekurangan data. Overfitting bermaksud prestasi model menurun dengan ketara untuk data baru yang akan datang. Mesin itu mempelajari sedikit butiran set data dan berjuang untuk menggeneralisasikan keseluruhan corak.

Jumlah kluster bergantung pada sifat kumpulan data, industri, perniagaan dan sebagainya. Walau bagaimanapun, terdapat peraturan untuk memilih bilangan kelompok yang sesuai:

dengan sama dengan jumlah pemerhatian dalam set data.

Secara amnya, adalah menarik untuk meluangkan masa untuk mencari nilai terbaik agar sesuai dengan keperluan perniagaan.

Kami akan menggunakan set data Harga Komputer Peribadi untuk melakukan analisis pengelompokan kami. Set data ini mengandungi 6259 pemerhatian dan 10 ciri. Set data tersebut memperhatikan harga dari 1993 hingga 1995 dari 486 komputer peribadi di AS. Pemboleh ubahnya adalah harga, kelajuan, ram, skrin, cd antara lain.

Anda akan meneruskan seperti berikut:

  • Import data
  • Latih model
  • Nilaikan model

Import data

K bermaksud tidak sesuai untuk pemboleh ubah faktor kerana berdasarkan jarak dan nilai diskrit tidak mengembalikan nilai yang bermakna. Anda boleh menghapus tiga pemboleh ubah kategori dalam set data kami. Selain itu, tidak ada nilai yang hilang dalam set data ini.

library(dplyr)PATH <-"https://raw.githubusercontent.com/guru99-edu/R-Programming/master/computers.csv"df <- read.csv(PATH) %>%select(-c(X, cd, multi, premium))glimpse(df)
Pengeluaran
## Observations: 6, 259## Variables: 7## $ price < int > 1499, 1795, 1595, 1849, 3295, 3695, 1720, 1995, 2225, 2… ##$ speed < int > 25, 33, 25, 25, 33, 66, 25, 50, 50, 50, 33, 66, 50, 25,… ##$ hd < int > 80, 85, 170, 170, 340, 340, 170, 85, 210, 210, 170, 210… ##$ ram < int > 4, 2, 4, 8, 16, 16, 4, 2, 8, 4, 8, 8, 4, 8, 8, 4, 2, 4,… ##$ screen < int > 14, 14, 15, 14, 14, 14, 14, 14, 14, 15, 15, 14, 14, 14,… ##$ ads < int > 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94,… ## $ trend  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1… 

Dari ringkasan statistik, anda dapat melihat data mempunyai nilai yang besar. Amalan yang baik dengan pengiraan min dan jarak k adalah untuk menjual kembali data sehingga min sama dengan satu dan sisihan piawai sama dengan sifar.

summary(df)

Pengeluaran:

## price speed hd ram## Min. : 949 Min. : 25.00 Min. : 80.0 Min. : 2.000## 1st Qu.:1794 1st Qu.: 33.00 1st Qu.: 214.0 1st Qu.: 4.000 `## Median :2144 Median : 50.00 Median : 340.0 Median : 8.000## Mean :2220 Mean : 52.01 Mean : 416.6 Mean : 8.287## 3rd Qu.:2595 3rd Qu.: 66.00 3rd Qu.: 528.0 3rd Qu.: 8.000## Max. :5399 Max. :100.00 Max. :2100.0 Max. :32.000## screen ads trend## Min. :14.00 Min. : 39.0 Min. : 1.00## 1st Qu.:14.00 1st Qu.:162.5 1st Qu.:10.00## Median :14.00 Median :246.0 Median :16.00## Mean :14.61 Mean :221.3 Mean :15.93## 3rd Qu.:15.00 3rd Qu.:275.0 3rd Qu.:21.50## Max. :17.00 Max. :339.0 Max. :35.00

Anda menjual semula pemboleh ubah dengan fungsi skala () perpustakaan dplyr. Transformasi mengurangkan kesan outliers dan memungkinkan untuk membandingkan satu pemerhatian dengan min. Sekiranya nilai piawai (atau skor-z ) tinggi, anda boleh yakin bahawa pemerhatian ini sememangnya melebihi nilai rata-rata (skor z yang besar menunjukkan bahawa titik ini jauh dari nilai min dari segi sisihan piawai. skor dua menunjukkan nilai adalah 2 sisihan piawai dari min. Perhatikan, skor-z mengikuti taburan Gaussian dan simetri di sekitar min.

rescale_df <- df % > %mutate(price_scal = scale(price),hd_scal = scale(hd),ram_scal = scale(ram),screen_scal = scale(screen),ads_scal = scale(ads),trend_scal = scale(trend)) % > %select(-c(price, speed, hd, ram, screen, ads, trend))

R base mempunyai fungsi untuk menjalankan algoritma k mean. Fungsi asas k mean adalah:

kmeans(df, k)arguments:-df: dataset used to run the algorithm-k: Number of clusters

Latih model

Dalam gambar tiga, anda menerangkan bagaimana algoritma berfungsi. Anda dapat melihat setiap langkah secara grafik dengan binaan pakej hebat oleh Yi Hui (juga pencipta Knit for Rmarkdown). Animasi pakej tidak terdapat di perpustakaan konda. Anda boleh menggunakan cara lain untuk memasang pakej dengan install.packages ("animasi"). Anda boleh memeriksa apakah pakej dipasang di folder Anaconda kami.

install.packages("animation") 

Setelah memuatkan perpustakaan, anda menambah .ani setelah kmeans dan R akan merancang semua langkah. Untuk tujuan ilustrasi, anda hanya menjalankan algoritma dengan pemboleh ubah yang disimpan semula hd dan ram dengan tiga kluster.

set.seed(2345)library(animation)kmeans.ani(rescale_df[2:3], 3)

Penjelasan Kod

  • kmeans.ani (bailale_df [2: 3], 3): Pilih lajur 2 dan 3 kumpulan data rehale_df dan jalankan algoritma dengan set k ke 3. Plot animasi.

Anda boleh mentafsirkan animasi sebagai berikut:

  • Langkah 1: R memilih tiga mata secara rawak
  • Langkah 2: Hitung jarak Euclidean dan lukis kluster. Anda mempunyai satu kelompok berwarna hijau di kiri bawah, satu kelompok besar berwarna hitam di sebelah kanan dan merah di antara mereka.
  • Langkah 3: Hitung centroid, iaitu min kluster
  • Ulangi sehingga tidak ada data yang mengubah kluster

Algoritma berkumpul setelah tujuh lelaran. Anda boleh menjalankan algoritma k-mean dalam set data kami dengan lima kluster dan memanggilnya pc_cluster.

pc_cluster <-kmeans(rescale_df, 5)
  • Senarai pc_cluster mengandungi tujuh elemen menarik:
  • kluster pc_cluster $: Menunjukkan kluster setiap pemerhatian
  • pc_cluster $ center: Pusat kluster
  • pc_cluster $ totss: Jumlah kuasa dua
  • pc_cluster $ withinss: Dalam jumlah segi empat sama. Bilangan komponen kembali adalah sama dengan `k`
  • pc_cluster $ tot.withinss: Jumlah ofinsins
  • pc_clusterbetweenss: Jumlah kuadrat dikurangkan Dalam jumlah segiempat sama
  • pc_cluster $ size: Jumlah pemerhatian dalam setiap kluster

Anda akan menggunakan jumlah penjumlahan dalam kuadrat (iaitu total.withinss) untuk mengira bilangan kluster optimum k. Mencari k memang merupakan tugas yang besar.

Optimum k

Satu teknik untuk memilih k terbaik dipanggil kaedah siku . Kaedah ini menggunakan homogenitas dalam kumpulan atau heterogenitas dalam kumpulan untuk menilai kebolehubahan. Dengan kata lain, anda berminat dengan peratusan varians yang dijelaskan oleh setiap kelompok. Anda boleh menjangkakan kebolehubahan meningkat dengan bilangan kluster, sebagai alternatif, heterogenitas menurun. Cabaran kami adalah mencari k yang berada di luar pulangan yang berkurang. Menambah kluster baru tidak meningkatkan kebolehubahan data kerana sangat sedikit maklumat yang tersisa untuk dijelaskan.

Dalam tutorial ini, kita dapati titik ini menggunakan ukuran heterogenitas. Jumlah dalam kluster jumlah kotak adalah jumlah keseluruhan dalam senarai yang dikembalikan oleh kmean ().

Anda boleh membina graf siku dan mencari k yang optimum seperti berikut:

  • Langkah 1: Bentukkan fungsi untuk mengira jumlah kluster dalam jumlah petak
  • Langkah 2: Jalankan algoritma kali
  • Langkah 3: Buat kerangka data dengan hasil algoritma
  • Langkah 4: Buat keputusan

Langkah 1) Bentukkan fungsi untuk menghitung jumlah jumlah petak dalam kluster

Anda membuat fungsi yang menjalankan algoritma k-mean dan menyimpan jumlah dalam kluster jumlah kotak

kmean_withinss <- function(k) {cluster <- kmeans(rescale_df, k)return (cluster$tot.withinss)}

Penjelasan Kod

  • fungsi (k): Tetapkan bilangan argumen dalam fungsi
  • kmeans (rehale_df, k): Jalankan algoritma k kali
  • kembali (kluster $ tot.withinss): Simpan jumlah dalam kluster jumlah petak

Anda boleh menguji fungsi dengan sama dengan 2.

Pengeluaran:

## Try with 2 cluster
kmean_withinss(2)

Pengeluaran:

## [1] 27087.07 

Langkah 2) Jalankan algoritma n kali

Anda akan menggunakan fungsi sapply () untuk menjalankan algoritma pada jarak k. Teknik ini lebih pantas daripada membuat gelung dan menyimpan nilainya.

# Set maximum clustermax_k <-20# Run algorithm over a range of kwss <- sapply(2:max_k, kmean_withinss)

Penjelasan Kod

  • max_k <-20: Tetapkan bilangan maksimum hingga 20
  • sapply (2: max_k, kmean_withinss): Jalankan fungsi kmean_withinss () pada julat 2: max_k, iaitu 2 hingga 20.

Langkah 3) Buat kerangka data dengan hasil algoritma

Setelah membuat dan menguji fungsi kami, anda boleh menjalankan algoritma k-mean dalam jarak antara 2 hingga 20, menyimpan nilai total.

# Create a data frame to plot the graphelbow <-data.frame(2:max_k, wss)

Penjelasan Kod

  • data.frame (2: max_k, wss): Buat kerangka data dengan keluaran penyimpanan algoritma di wss

Langkah 4) Petak hasilnya

Anda memplot grafik untuk menggambarkan di mana titik siku

# Plot the graph with gglopggplot(elbow, aes(x = X2.max_k, y = wss)) +geom_point() +geom_line() +scale_x_continuous(breaks = seq(1, 20, by = 1))

Dari grafik, anda dapat melihat k yang optimum adalah tujuh, di mana lengkung mulai mempunyai pulangan yang semakin berkurang.

Setelah anda memperoleh k optimum kami, anda jalankan semula algoritma dengan k sama dengan 7 dan nilai kluster.

Meneliti kluster

pc_cluster_2 <-kmeans(rescale_df, 7)

Seperti yang telah disebutkan sebelumnya, anda boleh mengakses maklumat menarik yang tersisa dalam senarai yang dikembalikan oleh kmean ().

pc_cluster_2$clusterpc_cluster_2$centerspc_cluster_2$size 

Bahagian penilaian bersifat subjektif dan bergantung pada penggunaan algoritma. Matlamat kami di sini adalah untuk mengumpulkan komputer dengan ciri yang serupa. Seorang lelaki komputer boleh melakukan pekerjaan dengan tangan dan kumpulan komputer berdasarkan kepakarannya. Walau bagaimanapun, prosesnya akan memakan banyak masa dan akan menjadi ralat. Algoritma K-mean dapat menyediakan medan untuknya dengan mencadangkan kluster.

Sebagai penilaian sebelumnya, anda dapat memeriksa ukuran kluster.

pc_cluster_2$size

Pengeluaran:

## [1] 608 1596 1231 580 1003 699 542

Kluster pertama terdiri daripada 608 pemerhatian, sedangkan kluster terkecil, nombor 4, hanya mempunyai 580 komputer. Mungkin bagus untuk memiliki kesamaan antara kelompok, jika tidak, mungkin diperlukan penyediaan data yang lebih tipis.

Anda dapat melihat lebih mendalam data dengan komponen tengah. Baris merujuk kepada penghitungan kluster dan lajur pemboleh ubah yang digunakan oleh algoritma. Nilai adalah skor purata oleh setiap kelompok untuk lajur yang berminat. Penyeragaman menjadikan penafsiran lebih mudah. Nilai positif menunjukkan skor-z bagi kluster tertentu berada di atas min keseluruhan. Sebagai contoh, kluster 2 mempunyai harga rata-rata tertinggi di antara semua kluster.

center <-pc_cluster_2$centerscenter

Pengeluaran:

## price_scal hd_scal ram_scal screen_scal ads_scal trend_scal## 1 -0.6372457 -0.7097995 -0.691520682 -0.4401632 0.6780366 -0.3379751## 2 -0.1323863 0.6299541 0.004786730 2.6419582 -0.8894946 1.2673184## 3 0.8745816 0.2574164 0.513105797 -0.2003237 0.6734261 -0.3300536## 4 1.0912296 -0.2401936 0.006526723 2.6419582 0.4704301 -0.4132057## 5 -0.8155183 0.2814882 -0.307621003 -0.3205176 -0.9052979 1.2177279## 6 0.8830191 2.1019454 2.168706085 0.4492922 -0.9035248 1.2069855## 7 0.2215678 -0.7132577 -0.318050275 -0.3878782 -1.3206229 -1.5490909

Anda boleh membuat peta panas dengan ggplot untuk membantu kami menonjolkan perbezaan antara kategori.

Warna lalai ggplot perlu diubah dengan perpustakaan RColorBrewer. Anda boleh menggunakan perpustakaan konda dan kod untuk melancarkan di terminal:

conda install -cr r-rcolorbrewer

Untuk membuat peta panas, anda meneruskan tiga langkah:

  • Bina kerangka data dengan nilai pusat dan buat pemboleh ubah dengan bilangan kluster
  • Bentuk semula data dengan fungsi mengumpulkan () perpustakaan tidyr. Anda mahu mengubah data dari lebar ke panjang.
  • Buat palet warna dengan fungsi colorRampPalette ()

Langkah 1) Bina kerangka data

Mari buat set data bentuk semula

library(tidyr)# create dataset with the cluster numbercluster <- c(1: 7)center_df <- data.frame(cluster, center)# Reshape the datacenter_reshape <- gather(center_df, features, values, price_scal: trend_scal)head(center_reshape)

Pengeluaran:

## cluster features values## 1 1 price_scal -0.6372457## 2 2 price_scal -0.1323863## 3 3 price_scal 0.8745816## 4 4 price_scal 1.0912296## 5 5 price_scal -0.8155183## 6 6 price_scal 0.8830191

Langkah 2) Bentuk semula data

Kod di bawah membuat palet warna yang akan anda gunakan untuk membuat peta haba.

library(RColorBrewer)# Create the palettehm.palette <-colorRampPalette(rev(brewer.pal(10, 'RdYlGn')),space='Lab')

Langkah 3) Visualisasikan

Anda boleh membuat plot grafik dan melihat seperti apa kluster.

# Plot the heat mapggplot(data = center_reshape, aes(x = features, y = cluster, fill = values)) +scale_y_continuous(breaks = seq(1, 7, by = 1)) +geom_tile() +coord_equal() +scale_fill_gradientn(colours = hm.palette(90)) +theme_classic()

Ringkasan

Kita dapat meringkaskan algoritma k-mean dalam jadual di bawah

Pakej

Objektif

fungsi

hujah

pangkalan

Latih k-mean

km km ()

df, k

Kelompok akses

kluster kmeans () $

Pusat kluster

kmeans () $ pusat

Kluster saiz

kmeans () $ ukuran