K-, Örnek ile R'de Kümeleme anlamına gelir

İçindekiler:

Anonim

Bu eğitimde öğreneceksiniz

  • Küme analizi nedir?
  • K-demek algoritma
  • Optimal k

Küme analizi nedir?

Küme analizi, denetimsiz öğrenmenin bir parçasıdır . Küme, benzer özellikleri paylaşan bir veri grubudur. Kümeleme analizinin bir tahminden çok keşifle ilgili olduğunu söyleyebiliriz. Makine, verilerdeki benzerliği arar. Örneğin, aşağıdaki uygulama için küme analizini kullanabilirsiniz:

  • Müşteri segmentasyonu: Müşteri grupları arasındaki benzerliği arar
  • Borsa kümelenmesi: Performanslara dayalı grup hisse senedi
  • Gözlemleri benzer değerlerle gruplayarak bir veri kümesinin boyutluluğunu azaltın

Kümeleme analizinin uygulanması çok zor değildir ve iş için hem anlamlı hem de uygulanabilir niteliktedir.

Denetimli ve denetimsiz öğrenme arasındaki en çarpıcı fark, sonuçlarda yatmaktadır. Denetimsiz öğrenme yeni bir değişken, etiket yaratır, denetimli öğrenme ise bir sonucu öngörür. Makine, uygulayıcıya verileri yakın ilişkiye göre etiketleme arayışında yardımcı olur. Gruplardan yararlanmak ve onlara bir isim vermek analiste kalmıştır.

Kümeleme kavramını anlamak için bir örnek verelim. Sadelik için iki boyutta çalışıyoruz. Müşterilerin toplam harcamaları ve yaşları hakkında verileriniz var. Pazarlama ekibi, reklamcılığı iyileştirmek için müşterilerine daha hedefli e-postalar göndermek istiyor.

Aşağıdaki grafikte, toplam harcamayı ve müşterilerin yaşını grafiğe döküyorsunuz.

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()

Bu noktada bir desen görülebilir

  1. Sol altta, daha düşük satın alma gücüne sahip gençleri görebilirsiniz.
  2. Üst orta, daha fazla harcayabilecekleri bir işi olan insanları yansıtır
  3. Son olarak, daha düşük bütçeli yaşlı insanlar.

Yukarıdaki şekilde, gözlemleri elle kümelendiriyor ve üç grubun her birini tanımlıyorsunuz. Bu örnek biraz basit ve oldukça görsel. Veri kümesine yeni gözlemler eklenirse, bunları daireler içinde etiketleyebilirsiniz. Daireyi bizim muhakememize göre tanımlarsınız. Bunun yerine, verileri nesnel olarak gruplamak için Makine Öğrenimini kullanabilirsiniz.

Bu eğitimde, k-ortalama algoritmasının nasıl kullanılacağını öğreneceksiniz .

K-demek algoritma

K-ortalama, şüphesiz, en popüler kümeleme yöntemidir. Araştırmacılar algoritmayı on yıllar önce yayınladılar ve k-ortalamalarında birçok iyileştirme yapıldı.

Algoritma, yerel optimal çözümler adı verilen gözlemler arasındaki mesafeyi en aza indirerek grupları bulmaya çalışır . Mesafeler, gözlemlerin koordinatlarına göre ölçülür. Örneğin, iki boyutlu bir uzayda koordinatlar basittir ve.

Algoritma şu şekilde çalışır:

  • 1. Adım: Özellik planındaki grupları rastgele seçin
  • Adım 2: Küme merkezi ile farklı gözlemler ( ağırlık merkezi ) arasındaki mesafeyi en aza indirin . Gözlemli gruplarla sonuçlanır
  • Adım 3: İlk ağırlık merkezini bir grup içindeki koordinatların ortalamasına kaydırın.
  • Adım 4: Yeni ağırlık merkezlerine göre mesafeyi en aza indirin. Yeni sınırlar yaratılır. Böylece gözlemler bir gruptan diğerine geçecektir.
  • Hiçbir gözlem grubu değiştirene kadar tekrarlayın

K-aracı genellikle özellik ve özellik arasındaki Öklid mesafesini alır:

Manhattan mesafesi veya Minlowski mesafesi gibi farklı ölçüler mevcuttur. K-ortalama, algoritmayı her çalıştırdığınızda farklı gruplar döndürür. İlk tahminlerin rastgele olduğunu hatırlayın ve algoritma gruplar içinde bir homojenliğe ulaşıncaya kadar mesafeleri hesaplayın. Yani, k-ortalama ilk seçeneğe çok duyarlıdır ve gözlemlerin ve grupların sayısı az olmadıkça aynı kümelenmeyi elde etmek neredeyse imkansızdır.

Küme sayısını seçin

K-ortalamasında bulunan bir başka zorluk, küme sayısının seçimidir. Kararlılığı artırmak için yüksek bir değer, yani çok sayıda grup ayarlayabilirsiniz, ancak aşırı veri sığdırmasıyla sonuçlanabilirsiniz. Aşırı uyum, modelin performansının yeni gelen veriler için önemli ölçüde azalması anlamına gelir. Makine, veri setinin küçük ayrıntılarını öğrendi ve genel modeli genellemek için mücadele etti.

Küme sayısı veri kümesinin doğasına, sektöre, işletmeye vb. Bağlıdır. Bununla birlikte, uygun sayıda küme seçmek için pratik bir kural vardır:

veri kümesindeki gözlem sayısına eşittir.

Genel olarak konuşursak, iş ihtiyacına uyacak en iyi değeri aramak için zaman harcamak ilginçtir.

Kümeleme analizimizi gerçekleştirmek için Kişisel Bilgisayarların Fiyatları veri kümesini kullanacağız. Bu veri kümesi 6259 gözlem ve 10 özellik içerir. Veri kümesi, ABD'deki 486 kişisel bilgisayarın 1993 ile 1995 arasındaki fiyatını gözlemliyor. Değişkenler fiyat, hız, ram, ekran, cd ve diğerleridir.

Aşağıdaki gibi ilerleyeceksiniz:

  • Verileri içe aktar
  • Modeli eğitin
  • Modeli değerlendirin

Verileri içe aktar

K ortalamaları faktör değişkenleri için uygun değildir çünkü mesafeye bağlıdır ve ayrık değerler anlamlı değerler döndürmez. Veri setimizdeki üç kategorik değişkeni silebilirsiniz. Ayrıca, bu veri setinde eksik değer yoktur.

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)
Çıktı
## 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… 

Özet istatistiklerden verilerin büyük değerlere sahip olduğunu görebilirsiniz. K ortalama ve mesafe hesaplamasıyla ilgili iyi bir uygulama, ortalama bire eşit ve standart sapma sıfıra eşit olacak şekilde verileri yeniden ölçeklendirmektir.

summary(df)

Çıktı:

## 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

Değişkenleri dplyr kitaplığının scale () işleviyle yeniden ölçeklendirirsiniz. Dönüşüm, aykırı değerlerin etkisini azaltır ve tek bir gözlemi ortalamayla karşılaştırmaya izin verir. Standart bir değer (veya z-puanı ) yüksekse, bu gözlemin gerçekten ortalamanın üstünde olduğundan emin olabilirsiniz (büyük bir z-puanı, bu noktanın standart sapma açısından ortalamadan çok uzak olduğunu gösterir. A z- iki puan, değerin ortalamadan 2 standart sapma uzakta olduğunu gösterir Not, z-puanı bir Gauss dağılımını izler ve ortalama etrafında simetriktir.

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 tabanının k ortalama algoritmasını çalıştırmak için bir işlevi vardır. K ortalamanın temel işlevi:

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

Modeli eğitin

Şekil üçte, algoritmanın nasıl çalıştığını detaylandırdınız. Yi Hui (aynı zamanda Rmarkdown için Knit'in yaratıcısı) tarafından yapılan harika paket ile her adımı grafiksel olarak görebilirsiniz. Paket animasyonu conda kitaplığında mevcut değildir. Paketi install.packages ("animasyon") ile yüklemek için başka bir yol da kullanabilirsiniz. Paketin Anaconda klasörümüzde kurulu olup olmadığını kontrol edebilirsiniz.

install.packages("animation") 

Kitaplığı yükledikten sonra, kmeans'tan sonra .ani eklersiniz ve R tüm adımları çizecektir. Örnek olarak, algoritmayı yalnızca yeniden ölçeklendirilmiş değişkenler hd ve ram ile üç küme ile çalıştırırsınız.

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

Kod Açıklama

  • kmeans.ani (rescale_df [2: 3], 3): rescale_df veri kümesinin 2. ve 3. sütunlarını seçin ve algoritmayı k kümesiyle 3 olarak çalıştırın. Animasyonu çizin.

Animasyonu şu şekilde yorumlayabilirsiniz:

  • 1. Adım: R rastgele üç nokta seçer
  • Adım 2: Öklid mesafesini hesaplayın ve kümeleri çizin. Sol altta yeşil renkli bir küme, sağda siyah renkli büyük bir küme ve aralarında kırmızı bir küme var.
  • 3. Adım: Ağırlık merkezini, yani kümelerin ortalamasını hesaplayın
  • Veri kümesi değişmeyene kadar tekrarlayın

Algoritma yedi yinelemeden sonra birleşti. Veri setimizde k-ortalama algoritmasını beş küme ile çalıştırabilir ve pc_cluster olarak adlandırabilirsiniz.

pc_cluster <-kmeans(rescale_df, 5)
  • Pc_cluster listesi yedi ilginç öğe içerir:
  • pc_cluster $ cluster: Her gözlemin kümesini gösterir
  • pc_cluster $ merkezleri: Küme merkezleri
  • pc_cluster $ totss: Karelerin toplamı
  • pc_cluster $ withinss: Karenin toplamı içinde. Geri dönen bileşenlerin sayısı "k" ye eşittir
  • pc_cluster $ tot.withinss: withins'lerin toplamı
  • pc_clusterbetweenss: Kareler toplamı eksi Kare toplamı içinde
  • pc_cluster $ size: Her bir küme içindeki gözlem sayısı

Optimal küme sayısını hesaplamak için iç karelerin toplamını (yani toplamlar ile toplamı) kullanacaksınız. K'yi bulmak gerçekten önemli bir görevdir.

Optimal k

En iyi k'yi seçmek için bir teknik dirsek yöntemi olarak adlandırılır . Bu yöntem, değişkenliği değerlendirmek için grup içi homojenliği veya grup içi heterojenliği kullanır. Diğer bir deyişle, her bir küme tarafından açıklanan varyans yüzdesi ile ilgileniyorsunuz. Küme sayısıyla değişkenliğin artmasını, alternatif olarak heterojenliğin azalmasını bekleyebilirsiniz. Bizim zorluğumuz, azalan getirilerin ötesinde olan k'yi bulmaktır. Açıklanacak çok az bilgi kaldığından, yeni bir küme eklemek verilerdeki değişkenliği iyileştirmez.

Bu eğitimde, heterojenlik ölçüsünü kullanarak bu noktayı buluyoruz. Küme içindeki toplam kareler toplamı, kmean () ile döndürülen listedeki tot.withinss değeridir.

Dirsek grafiğini oluşturabilir ve en uygun k'yi aşağıdaki gibi bulabilirsiniz:

  • Adım 1: Küme karelerinin toplamı içindeki toplamı hesaplamak için bir işlev oluşturun
  • Adım 2: Algoritma sürelerini çalıştırın
  • Adım 3: Algoritmanın sonuçlarıyla bir veri çerçevesi oluşturun
  • 4. Adım: Sonuçların grafiğini çizin

Adım 1) Küme içindeki toplamı karelerin toplamını hesaplamak için bir fonksiyon oluşturun

K-ortalama algoritmasını çalıştıran ve toplamı karelerin toplamı kümeler içinde depolayan işlevi oluşturursunuz.

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

Kod Açıklama

  • function (k): İşlevdeki argümanların sayısını ayarlayın
  • kmeans (rescale_df, k): Algoritmayı k kez çalıştır
  • return (küme $ tot.withinss): Toplamı karelerin toplamı kümeler içinde sakla

Fonksiyonu eşittir 2 ile test edebilirsiniz.

Çıktı:

## Try with 2 cluster
kmean_withinss(2)

Çıktı:

## [1] 27087.07 

Adım 2) Algoritmayı n kez çalıştırın

Algoritmayı k aralığında çalıştırmak için sapply () işlevini kullanacaksınız. Bu teknik, bir döngü oluşturmaktan ve değeri depolamaktan daha hızlıdır.

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

Kod Açıklama

  • max_k <-20: Maksimum 20 olarak ayarlayın
  • sapply (2: max_k, kmean_withinss): kmean_withinss () işlevini 2: max_k, yani 2 ila 20 aralığında çalıştırın.

Adım 3) Algoritmanın sonuçlarıyla bir veri çerçevesi oluşturun

Oluşturma ve işlevimizi test ettikten sonra, k-ortalama algoritmasını 2 ila 20 aralığında çalıştırabilir, tot.withinss değerlerini saklayabilirsiniz.

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

Kod Açıklama

  • data.frame (2: max_k, wss): wss'deki algoritma deposunun çıktısıyla bir veri çerçevesi oluşturun

Adım 4) Sonuçların grafiğini çizin

Dirsek noktasının nerede olduğunu görselleştirmek için grafiği çizersiniz

# 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))

Grafikten optimal k'nin yedi olduğunu görebilirsiniz, burada eğrinin azalan bir getirisi olmaya başladı.

Optimal k değerimize sahip olduğunuzda, algoritmayı k eşittir 7 ile yeniden çalıştırır ve kümeleri değerlendirirsiniz.

Kümeyi incelemek

pc_cluster_2 <-kmeans(rescale_df, 7)

Daha önce de belirtildiği gibi, kmean () tarafından döndürülen listedeki kalan ilginç bilgilere erişebilirsiniz.

pc_cluster_2$clusterpc_cluster_2$centerspc_cluster_2$size 

Değerlendirme kısmı özneldir ve algoritmanın kullanımına dayanır. Buradaki amacımız benzer özelliklere sahip bilgisayarı toplamaktır. Bir bilgisayar adamı, işi kendi uzmanlığına göre elle ve grup bilgisayarı ile yapabilir. Ancak, işlem çok zaman alacak ve hataya açık olacaktır. K-ortalama algoritması kümeler önererek alanı kendisi için hazırlayabilir.

Ön değerlendirme olarak, kümelerin büyüklüğünü inceleyebilirsiniz.

pc_cluster_2$size

Çıktı:

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

İlk küme 608 gözlemden oluşurken, en küçük küme olan 4 numaralı küme sadece 580 bilgisayara sahiptir. Kümeler arasında homojenlik olması iyi olabilir, yoksa daha ince bir veri hazırlığı gerekebilir.

Merkez bileşen ile verilere daha derin bir bakış elde edersiniz. Satırlar, kümenin numaralandırılmasına ve sütunlar, algoritma tarafından kullanılan değişkenlere atıfta bulunur. Değerler, ilgili sütun için her bir kümenin ortalama puanıdır. Standardizasyon, yorumu kolaylaştırır. Pozitif değerler, belirli bir küme için z-puanının genel ortalamanın üzerinde olduğunu gösterir. Örneğin, küme 2, tüm kümeler arasında en yüksek fiyat ortalamasına sahiptir.

center <-pc_cluster_2$centerscenter

Çıktı:

## 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

Kategoriler arasındaki farkı vurgulamamıza yardımcı olması için ggplot ile bir ısı haritası oluşturabilirsiniz.

Ggplot'un varsayılan renklerinin RColorBrewer kitaplığı ile değiştirilmesi gerekir. Terminalde başlatmak için conda kitaplığını ve kodu kullanabilirsiniz:

conda install -cr r-rcolorbrewer

Bir ısı haritası oluşturmak için üç adımda ilerlersiniz:

  • Merkezin değerleri ile bir veri çerçevesi oluşturun ve küme numarasıyla bir değişken oluşturun
  • Verileri tidyr kitaplığının toplama () işlevi ile yeniden şekillendirin. Veriyi genişten uzuna dönüştürmek istiyorsunuz.
  • ColorRampPalette () işleviyle renk paleti oluşturun

Adım 1) Bir veri çerçevesi oluşturun

Yeniden şekillendirme veri kümesini oluşturalım

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)

Çıktı:

## 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

Adım 2) Verileri yeniden şekillendirin

Aşağıdaki kod, ısı haritasını çizmek için kullanacağınız renk paletini oluşturur.

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

Adım 3) Görselleştirin

Grafiği çizebilir ve kümelerin neye benzediğini görebilirsiniz.

# 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()

Özet

K-ortalama algoritmasını aşağıdaki tabloda özetleyebiliriz

Paket içeriği

Amaç

işlevi

tartışma

temel

Tren k-anlamı

kmeans ()

df, k

Erişim kümesi

kmeans () $ küme

Küme merkezleri

kmeans () $ merkezleri

Boyut kümesi

kmeans () $ boyut