K-Means Dirsek yöntemiyle Kümeleme PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Dirsek yöntemiyle K-Means Kümeleme

K-ortalama kümeleme, verileri her noktanın öklid mesafesine dayalı olarak merkezi bir noktaya göre gruplayan denetimsiz bir öğrenme algoritmasıdır. ağırlık merkezi. Merkezler, aynı kümedeki tüm noktalar aracılığıyla tanımlanır. Algoritma önce rasgele noktaları merkezler olarak seçer ve ardından tam yakınsamaya kadar bunları ayarlamayı yineler.

K-araçlarını kullanırken hatırlanması gereken önemli bir şey, küme sayısının bir hiperparametre olduğu, modeli çalıştırmadan önce tanımlanacağıdır.

K-araçları, sadece 3 satır kod ile Scikit-Learn kullanılarak uygulanabilir. Scikit-learn ayrıca halihazırda bir centroid optimizasyon yöntemine sahiptir, kmanlamına gelir++, bu modelin daha hızlı yakınsamasına yardımcı olur.

K-araç kümeleme algoritmasını uygulamak için, hadi yükleyelim Palmer Penguenleri veri kümesi, kümelenecek sütunları seçin ve renk kodlu kümelerle bir dağılım grafiği çizmek için Seaborn'u kullanın.

not: Veri setini buradan indirebilirsiniz. Link.

Kütüphaneleri içe aktaralım ve Penguins veri kümesini yükleyelim, onu seçilen sütunlara göre kırpalım ve eksik veri içeren satırları bırakalım (sadece 2 tane vardı):

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

df = pd.read_csv('penguins.csv')
print(df.shape) 
df = df[['bill_length_mm', 'flipper_length_mm']]
df = df.dropna(axis=0)

Verilerimiz için kümelerin bir göstergesine sahip olmak için Dirsek yöntemini kullanabiliriz. Dirsek şeklinde bir çizgi grafiğinin yorumlanmasından oluşur. Küme sayısı dirsek kıvrımlarıdır. Grafiğin x ekseni, kümelerin sayısıdır ve y ekseni, her küme sayısı için Küme İçi Kareler Toplamı'dır (WCSS):

wcss = []

for i in range(1, 11):
    clustering = KMeans(n_clusters=i, init='k-means++', random_state=42)
    clustering.fit(df)
    wcss.append(clustering.inertia_)
    
ks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sns.lineplot(x = ks, y = wcss);

Dirsek yöntemi, verilerimizin 2 kümeye sahip olduğunu gösterir. Verileri kümelemeden önce ve sonra çizelim:

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15,5))
sns.scatterplot(ax=axes[0], data=df, x='bill_length_mm', y='flipper_length_mm').set_title('Without clustering')
sns.scatterplot(ax=axes[1], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering.labels_).set_title('Using the elbow method');

K-Means Dirsek yöntemiyle Kümeleme PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

Bu örnek, Dirsek yönteminin yalnızca küme sayısını seçmek için kullanıldığında nasıl bir referans olduğunu gösterir. Veri setinde 3 tip penguen olduğunu zaten biliyoruz, ancak Elbow yöntemini kullanarak sayılarını belirleyecek olsaydık, sonucumuz 2 küme olurdu.

K-ortalamalar veri varyansına duyarlı olduğundan, kümelediğimiz sütunların tanımlayıcı istatistiklerine bakalım:

df.describe().T 

Bunun sonucu:

 					count 	mean 		std 		min 	25% 	50% 	75% 	max
bill_length_mm 		342.0 	43.921930 	5.459584 	32.1 	39.225 	44.45 	48.5 	59.6
flipper_length_mm 	342.0 	200.915205 	14.061714 	172.0 	190.000 197.00 	213.0 	231.0

Ortalamanın standart sapmadan (std) uzak olduğuna dikkat edin, bu yüksek varyansı gösterir. Standard Scaler ile verileri ölçeklendirerek azaltmaya çalışalım:

from sklearn.preprocessing import StandardScaler

ss = StandardScaler()
scaled = ss.fit_transform(df)

Şimdi, ölçeklenen veriler için Dirsek yöntemi işlemini tekrarlayalım:

wcss_sc = []

for i in range(1, 11):
    clustering_sc = KMeans(n_clusters=i, init='k-means++', random_state=42)
    clustering_sc.fit(scaled)
    wcss_sc.append(clustering_sc.inertia_)
    
ks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sns.lineplot(x = ks, y = wcss_sc);

K-Means Dirsek yöntemiyle Kümeleme PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

Bu sefer önerilen küme sayısı 3'tür. Karşılaştırma için önceki iki grafikle birlikte küme etiketleriyle verileri tekrar çizebiliriz:

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15,5))
sns.scatterplot(ax=axes[0], data=df, x='bill_length_mm', y='flipper_length_mm').set_title('Without cliustering')
sns.scatterplot(ax=axes[1], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering.labels_).set_title('With the Elbow method')
sns.scatterplot(ax=axes[2], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering_sc.labels_).set_title('With the Elbow method and scaled data');

K-Means Dirsek yöntemiyle Kümeleme PlatoBlockchain Veri Zekası. Dikey Arama. Ai.

K-ortalama Kümeleme kullanırken, küme sayısını önceden belirlemeniz gerekir. Kendimizi seçmek için bir yöntem kullanırken gördüğümüz gibi k küme sayısı, sonuç yalnızca bir öneridir ve verilerdeki varyans miktarından etkilenebilir. Kümeleme yaparken derinlemesine bir analiz yapmak ve farklı _k_s ile birden fazla model oluşturmak önemlidir.

Verilerde kaç küme olduğuna dair önceden bir gösterge yoksa, görselleştirin, test edin ve kümeleme sonuçlarının anlamlı olup olmadığını görmek için yorumlayın. Değilse, tekrar kümeleyin. Ayrıca, birden fazla metriğe bakın ve farklı kümeleme modellerini somutlaştırın - K-ortalamalar için, sonuçların aynı kalıp kalmadığını görmek için siluet puanına ve belki Hiyerarşik Kümelemeye bakın.

Zaman Damgası:

Den fazla Yığın kötüye kullanımı